remove unneeded partition roots
Recovery itself no longer needs to access all these partitions; manipulation of them is done by the updater binary. This is a small first step towards removing roots entirely. Change-Id: I3fbcada32079a37db4cc097861dfa91e0a08da30
This commit is contained in:
@@ -159,17 +159,6 @@ try_update_binary(const char *path, ZipArchive *zip) {
|
|||||||
return INSTALL_SUCCESS;
|
return INSTALL_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
|
||||||
handle_update_package(const char *path, ZipArchive *zip)
|
|
||||||
{
|
|
||||||
// Update should take the rest of the progress bar.
|
|
||||||
ui_print("Installing update...\n");
|
|
||||||
|
|
||||||
int result = try_update_binary(path, zip);
|
|
||||||
register_package_root(NULL, NULL); // Unregister package root
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Reads a file containing one or more public keys as produced by
|
// Reads a file containing one or more public keys as produced by
|
||||||
// DumpPublicKey: this is an RSAPublicKey struct as it would appear
|
// DumpPublicKey: this is an RSAPublicKey struct as it would appear
|
||||||
// as a C source literal, eg:
|
// as a C source literal, eg:
|
||||||
@@ -300,6 +289,6 @@ install_package(const char *root_path)
|
|||||||
|
|
||||||
/* Verify and install the contents of the package.
|
/* Verify and install the contents of the package.
|
||||||
*/
|
*/
|
||||||
int status = handle_update_package(path, &zip);
|
ui_print("Installing update...\n");
|
||||||
return status;
|
return try_update_binary(path, &zip);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -45,15 +45,10 @@ static const char g_package_file[] = "@\0g_package_file";
|
|||||||
static const char g_ramdisk[] = "@\0g_ramdisk";
|
static const char g_ramdisk[] = "@\0g_ramdisk";
|
||||||
|
|
||||||
static RootInfo g_roots[] = {
|
static RootInfo g_roots[] = {
|
||||||
{ "BOOT:", g_mtd_device, NULL, "boot", NULL, g_raw },
|
|
||||||
{ "CACHE:", g_mtd_device, NULL, "cache", "/cache", "yaffs2" },
|
{ "CACHE:", g_mtd_device, NULL, "cache", "/cache", "yaffs2" },
|
||||||
{ "DATA:", g_mtd_device, NULL, "userdata", "/data", "yaffs2" },
|
{ "DATA:", g_mtd_device, NULL, "userdata", "/data", "yaffs2" },
|
||||||
{ "MISC:", g_mtd_device, NULL, "misc", NULL, g_raw },
|
{ "MISC:", g_mtd_device, NULL, "misc", NULL, g_raw },
|
||||||
{ "PACKAGE:", NULL, NULL, NULL, NULL, g_package_file },
|
|
||||||
{ "RECOVERY:", g_mtd_device, NULL, "recovery", "/", g_raw },
|
|
||||||
{ "SDCARD:", "/dev/block/mmcblk0p1", "/dev/block/mmcblk0", NULL, "/sdcard", "vfat" },
|
{ "SDCARD:", "/dev/block/mmcblk0p1", "/dev/block/mmcblk0", NULL, "/sdcard", "vfat" },
|
||||||
{ "SYSTEM:", g_mtd_device, NULL, "system", "/system", "yaffs2" },
|
|
||||||
{ "MBM:", g_mtd_device, NULL, "mbm", NULL, g_raw },
|
|
||||||
{ "TMP:", NULL, NULL, NULL, "/tmp", g_ramdisk },
|
{ "TMP:", NULL, NULL, NULL, "/tmp", g_ramdisk },
|
||||||
};
|
};
|
||||||
#define NUM_ROOTS (sizeof(g_roots) / sizeof(g_roots[0]))
|
#define NUM_ROOTS (sizeof(g_roots) / sizeof(g_roots[0]))
|
||||||
@@ -85,56 +80,6 @@ get_root_info_for_path(const char *root_path)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const ZipArchive *g_package = NULL;
|
|
||||||
static char *g_package_path = NULL;
|
|
||||||
|
|
||||||
int
|
|
||||||
register_package_root(const ZipArchive *package, const char *package_path)
|
|
||||||
{
|
|
||||||
if (package != NULL) {
|
|
||||||
package_path = strdup(package_path);
|
|
||||||
if (package_path == NULL) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
g_package_path = (char *)package_path;
|
|
||||||
} else {
|
|
||||||
free(g_package_path);
|
|
||||||
g_package_path = NULL;
|
|
||||||
}
|
|
||||||
g_package = package;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
is_package_root_path(const char *root_path)
|
|
||||||
{
|
|
||||||
const RootInfo *info = get_root_info_for_path(root_path);
|
|
||||||
return info != NULL && info->filesystem == g_package_file;
|
|
||||||
}
|
|
||||||
|
|
||||||
const char *
|
|
||||||
translate_package_root_path(const char *root_path,
|
|
||||||
char *out_buf, size_t out_buf_len, const ZipArchive **out_package)
|
|
||||||
{
|
|
||||||
const RootInfo *info = get_root_info_for_path(root_path);
|
|
||||||
if (info == NULL || info->filesystem != g_package_file) {
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Strip the package root off of the path.
|
|
||||||
*/
|
|
||||||
size_t root_len = strlen(info->name);
|
|
||||||
root_path += root_len;
|
|
||||||
size_t root_path_len = strlen(root_path);
|
|
||||||
|
|
||||||
if (out_buf_len < root_path_len + 1) {
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
strcpy(out_buf, root_path);
|
|
||||||
*out_package = g_package;
|
|
||||||
return out_buf;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Takes a string like "SYSTEM:lib" and turns it into a string
|
/* Takes a string like "SYSTEM:lib" and turns it into a string
|
||||||
* like "/system/lib". The translated path is put in out_buf,
|
* like "/system/lib". The translated path is put in out_buf,
|
||||||
* and out_buf is returned if the translation succeeded.
|
* and out_buf is returned if the translation succeeded.
|
||||||
|
|||||||
@@ -24,14 +24,6 @@
|
|||||||
* components, like "SYSTEM:a/b/c".
|
* components, like "SYSTEM:a/b/c".
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Associate this package with the package root "PKG:".
|
|
||||||
*/
|
|
||||||
int register_package_root(const ZipArchive *package, const char *package_path);
|
|
||||||
|
|
||||||
/* Returns non-zero iff root_path points inside a package.
|
|
||||||
*/
|
|
||||||
int is_package_root_path(const char *root_path);
|
|
||||||
|
|
||||||
/* Takes a string like "SYSTEM:lib" and turns it into a string
|
/* Takes a string like "SYSTEM:lib" and turns it into a string
|
||||||
* like "/system/lib". The translated path is put in out_buf,
|
* like "/system/lib". The translated path is put in out_buf,
|
||||||
* and out_buf is returned if the translation succeeded.
|
* and out_buf is returned if the translation succeeded.
|
||||||
@@ -39,12 +31,6 @@ int is_package_root_path(const char *root_path);
|
|||||||
const char *translate_root_path(const char *root_path,
|
const char *translate_root_path(const char *root_path,
|
||||||
char *out_buf, size_t out_buf_len);
|
char *out_buf, size_t out_buf_len);
|
||||||
|
|
||||||
/* Takes a string like "PKG:lib/libc.so" and returns a pointer to
|
|
||||||
* the containing zip file and a path like "lib/libc.so".
|
|
||||||
*/
|
|
||||||
const char *translate_package_root_path(const char *root_path,
|
|
||||||
char *out_buf, size_t out_buf_len, const ZipArchive **out_package);
|
|
||||||
|
|
||||||
/* Returns negative on error, positive if it's mounted, zero if it isn't.
|
/* Returns negative on error, positive if it's mounted, zero if it isn't.
|
||||||
*/
|
*/
|
||||||
int is_root_path_mounted(const char *root_path);
|
int is_root_path_mounted(const char *root_path);
|
||||||
|
|||||||
Reference in New Issue
Block a user