From b339ac3d3e23713640aa9615dec84cff7ef727d6 Mon Sep 17 00:00:00 2001 From: San Mehat Date: Fri, 29 Jan 2010 05:33:27 -0800 Subject: [PATCH] sdutil: Refactor for new APIs Signed-off-by: San Mehat --- media/sdutils/sdutil.cpp | 227 ++++++++++++++++++----------------------------- 1 file changed, 86 insertions(+), 141 deletions(-) diff --git a/media/sdutils/sdutil.cpp b/media/sdutils/sdutil.cpp index a61cccb122ab..6d3e87c0dd9d 100644 --- a/media/sdutils/sdutil.cpp +++ b/media/sdutils/sdutil.cpp @@ -38,65 +38,27 @@ static void init() { } } -static bool isMounted(const char* mountPoint) { - char s[2000]; - FILE *f = fopen("/proc/mounts", "r"); - bool mounted = false; - - while (fgets(s, sizeof(s), f)) - { - char *c, *path = NULL; - - for (c = s; *c; c++) - { - if (*c == ' ') - { - *c = 0; - path = c + 1; - break; - } - } - - for (c = path; *c; c++) - { - if (*c == ' ') - { - *c = '\0'; - break; - } - } - - if (strcmp(mountPoint, path) == 0) { - mounted = true; - break; - } - } - - fclose(f); - return mounted; +static int mount(const char* path) { + String16 string(path); + return gMountService->mountVolume(string); } -static void millisecondSleep(int milliseconds) { - struct timespec reqt, remt; - reqt.tv_sec = milliseconds / 1000; - reqt.tv_nsec = 1000000 * (milliseconds % 1000); - nanosleep(&reqt, &remt) ; +static int share(const char *path, const char *method) { + String16 sPath(path); + String16 sMethod(method); + return gMountService->shareVolume(sPath, sMethod); +} +static int unshare(const char *path, const char *method) { + String16 sPath(path); + String16 sMethod(method); + return gMountService->unshareVolume(sPath, sMethod); } -static int mount(const char* path) { - String16 string(path); - gMountService->mountVolume(string); - - for (int i = 0; i < 60; i++) { - if (isMounted(path)) { - return 0; - } - millisecondSleep(500); - } - - fprintf(stderr, "failed to mount %s\n", path); - return -1; +static bool shared(const char *path, const char *method) { + String16 sPath(path); + String16 sMethod(method); + return gMountService->getVolumeShared(sPath, sMethod); } static int asec_create(const char *id, int sizeMb, const char *fstype, @@ -105,39 +67,35 @@ static int asec_create(const char *id, int sizeMb, const char *fstype, String16 sFstype(fstype); String16 sKey(key); - String16 r = gMountService->createSecureContainer(sId, sizeMb, sFstype, - sKey, ownerUid); - return 0; + return gMountService->createSecureContainer( + sId, sizeMb, sFstype, sKey, ownerUid); } static int asec_finalize(const char *id) { String16 sId(id); - gMountService->finalizeSecureContainer(sId); - return 0; + return gMountService->finalizeSecureContainer(sId); } static int asec_destroy(const char *id) { String16 sId(id); - gMountService->destroySecureContainer(sId); - return 0; + return gMountService->destroySecureContainer(sId); } static int asec_mount(const char *id, const char *key, int ownerUid) { String16 sId(id); String16 sKey(key); - gMountService->mountSecureContainer(sId, sKey, ownerUid); - return 0; + return gMountService->mountSecureContainer(sId, sKey, ownerUid); } -static void asec_unmount(const char *id) { +static int asec_unmount(const char *id) { String16 sId(id); - gMountService->unmountSecureContainer(sId); + return gMountService->unmountSecureContainer(sId); } -static void asec_rename(const char *oldId, const char *newId) { +static int asec_rename(const char *oldId, const char *newId) { String16 sOldId(oldId); String16 sNewId(newId); - gMountService->renameSecureContainer(sOldId, sNewId); + return gMountService->renameSecureContainer(sOldId, sNewId); } static int asec_path(const char *id) { @@ -148,98 +106,85 @@ static int asec_path(const char *id) { static int unmount(const char* path) { String16 string(path); - gMountService->unmountVolume(string); - - for (int i = 0; i < 20; i++) { - if (!isMounted(path)) { - return 0; - } - millisecondSleep(500); - } - - fprintf(stderr, "failed to unmount %s\n", path); - return -1; + return gMountService->unmountVolume(string); } static int format(const char* path) { String16 string(path); - - if (isMounted(path)) - return -EBUSY; - gMountService->formatVolume(string); - - return 0; -} - -static int umsEnable(bool enable) { - gMountService->setMassStorageEnabled(enable); - return 0; + return gMountService->formatVolume(string); } }; +static void usage(void); + int main(int argc, char **argv) { - const char* command = (argc > 1 ? argv[1] : ""); - const char* argument = (argc > 2 ? argv[2] : ""); - - if (strcmp(command, "mount") == 0) { - android::init(); - return android::mount(argument); - } else if (strcmp(command, "format") == 0) { - android::init(); - return android::format(argument); - } else if (strcmp(command, "unmount") == 0) { - android::init(); - return android::unmount(argument); - } else if (strcmp(command, "ums") == 0) { - if (strcmp(argument, "enable") == 0) { - android::init(); - return android::umsEnable(true); - } else if (strcmp(argument, "disable") == 0) { - android::init(); - return android::umsEnable(false); - } - } else if (!strcmp(command, "asec")) { - const char* id = (argc > 3 ? argv[3] : NULL); - - if (!id) - goto usage; + if (argc < 2) + usage(); - android::init(); - if (!strcmp(argument, "create")) { + android::init(); + int rc = 0; + + if (strcmp(argv[1], "mount") == 0) { + rc = android::mount(argv[2]); + } else if (strcmp(argv[1], "format") == 0) { + rc = android::format(argv[2]); + } else if (strcmp(argv[1], "unmount") == 0) { + rc = android::unmount(argv[2]); + } else if (strcmp(argv[1], "share") == 0) { + if (argc != 3) + usage(); + rc = android::share(argv[2], argv[3]); + } else if (strcmp(argv[1], "unshare") == 0) { + if (argc != 3) + usage(); + rc = android::unshare(argv[2], argv[3]); + } else if (strcmp(argv[1], "shared") == 0) { + if (argc != 3) + usage(); + fprintf(stdout, "%s\n", (android::shared(argv[2], argv[3]) ? "true" : "false")); + } else if (!strcmp(argv[1], "asec")) { + if (argc < 3) + usage(); + + if (!strcmp(argv[2], "create")) { if (argc != 8) - goto usage; - return android::asec_create(id, atoi(argv[4]), argv[5], argv[6], - atoi(argv[7])); - } else if (!strcmp(argument, "finalize")) { - return android::asec_finalize(id); - } else if (!strcmp(argument, "destroy")) { - return android::asec_destroy(id); - } else if (!strcmp(argument, "mount")) { - if (argc == 6) - return android::asec_mount(id, argv[4], atoi(argv[5])); - } else if (!strcmp(argument, "rename")) { - if (argc == 5) { - android::asec_rename(id, argv[4]); - return 0; - } - } else if (!strcmp(argument, "unmount")) { - android::asec_unmount(id); - return 0; - } else if (!strcmp(argument, "path")) { - return android::asec_path(id); + usage(); + rc = android::asec_create(argv[3], atoi(argv[4]), argv[5], argv[6], atoi(argv[7])); + } else if (!strcmp(argv[3], "finalize")) { + rc = android::asec_finalize(argv[3]); + } else if (!strcmp(argv[3], "destroy")) { + return android::asec_destroy(argv[3]); + } else if (!strcmp(argv[3], "mount")) { + if (argc != 6) + usage(); + rc = android::asec_mount(argv[3], argv[4], atoi(argv[5])); + } else if (!strcmp(argv[3], "rename")) { + if (argc != 5) + usage(); + rc = android::asec_rename(argv[3], argv[4]); + } else if (!strcmp(argv[3], "unmount")) { + rc = android::asec_unmount(argv[3]); + } else if (!strcmp(argv[3], "path")) { + rc = android::asec_path(argv[3]); } } - -usage: + + fprintf(stdout, "Operation completed with code %d\n", rc); + return rc; +} + +static void usage() +{ fprintf(stderr, "usage:\n" " sdutil mount - mounts the SD card at the given mount point\n" " sdutil unmount - unmounts the SD card at the given mount point\n" " sdutil format - formats the SD card at the given mount point\n" - " sdutil ums enable - enables USB mass storage\n" - " sdutil ums disable - disables USB mass storage\n" + " sdutil share - shares a volume\n" + " sdutil unshare - unshares a volume\n" + " sdutil shared - Queries volume share state\n" " sdutil asec create \n" " sdutil asec finalize \n" " sdutil asec destroy \n" @@ -248,5 +193,5 @@ usage: " sdutil asec rename \n" " sdutil asec path \n" ); - return -1; + exit(1); } -- 2.11.0