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:
Doug Zongker 2010-09-17 13:02:48 -07:00
parent 792b00712b
commit d7d4208976
3 changed files with 2 additions and 82 deletions

View file

@ -159,17 +159,6 @@ try_update_binary(const char *path, ZipArchive *zip) {
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
// DumpPublicKey: this is an RSAPublicKey struct as it would appear
// as a C source literal, eg:
@ -300,6 +289,6 @@ install_package(const char *root_path)
/* Verify and install the contents of the package.
*/
int status = handle_update_package(path, &zip);
return status;
ui_print("Installing update...\n");
return try_update_binary(path, &zip);
}

55
roots.c
View file

@ -45,15 +45,10 @@ static const char g_package_file[] = "@\0g_package_file";
static const char g_ramdisk[] = "@\0g_ramdisk";
static RootInfo g_roots[] = {
{ "BOOT:", g_mtd_device, NULL, "boot", NULL, g_raw },
{ "CACHE:", g_mtd_device, NULL, "cache", "/cache", "yaffs2" },
{ "DATA:", g_mtd_device, NULL, "userdata", "/data", "yaffs2" },
{ "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" },
{ "SYSTEM:", g_mtd_device, NULL, "system", "/system", "yaffs2" },
{ "MBM:", g_mtd_device, NULL, "mbm", NULL, g_raw },
{ "TMP:", NULL, NULL, NULL, "/tmp", g_ramdisk },
};
#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;
}
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
* like "/system/lib". The translated path is put in out_buf,
* and out_buf is returned if the translation succeeded.

14
roots.h
View file

@ -24,14 +24,6 @@
* 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
* like "/system/lib". The translated path is put in out_buf,
* 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,
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.
*/
int is_root_path_mounted(const char *root_path);