diff options
author | Kobi Cohen-Arazi <kobic@codeaurora.org> | 2010-07-26 12:48:36 -0600 |
---|---|---|
committer | Brian Daugherty <bdaugher@codeaurora.org> | 2010-07-26 12:48:36 -0600 |
commit | afb2fb552003fe76fd084916166dfa64d7ee9ed6 (patch) | |
tree | 2308dd2fbe40254f7be238833e01c17024b4cac0 | |
parent | cc97f1875c66a6fbe65772e8c09526a0e785fd0c (diff) | |
download | platform_external_rootdev-afb2fb552003fe76fd084916166dfa64d7ee9ed6.tar.gz platform_external_rootdev-afb2fb552003fe76fd084916166dfa64d7ee9ed6.tar.bz2 platform_external_rootdev-afb2fb552003fe76fd084916166dfa64d7ee9ed6.zip |
rootdev.c: Added -d option to strip trailing partition number
Change-Id: I2afbb0a8546f48224292433e2efcf0a868c7a1c6
Review URL: http://codereview.chromium.org/2814040
Patch from Kobi Cohen-Arazi <kobic@codeaurora.org>.
-rw-r--r-- | rootdev.c | 49 |
1 files changed, 40 insertions, 9 deletions
@@ -13,7 +13,7 @@ static int -find_dev_recursive(char *dirnamebuf, int number) { +find_dev_recursive(char *dirnamebuf, int number, int deviceOnly) { DIR *dp; struct dirent *dir; struct stat s; @@ -31,10 +31,23 @@ find_dev_recursive(char *dirnamebuf, int number) { strcpy(dirnamebuf+dirnamelen+1, dir->d_name); if (lstat(dirnamebuf, &s) < 0) continue; - if ((s.st_mode & S_IFMT) == S_IFBLK && s.st_rdev == number) + if ((s.st_mode & S_IFMT) == S_IFBLK && s.st_rdev == number){ + if (deviceOnly) { + int len = strlen(dirnamebuf); + char c = 0; + do { + c = dirnamebuf[len-1]; + --len; + }while(c > 0 && c < 9 && len > 0); + /* arm has "p" for partition */ + if (dirnamebuf[len-1] == 'p') + --len; + dirnamebuf[len]='\0'; + } return 1; + } if ((s.st_mode & S_IFMT) == S_IFDIR && - find_dev_recursive(dirnamebuf, number)) + find_dev_recursive(dirnamebuf, number, deviceOnly)) return 1; } dirnamebuf[dirnamelen] = 0; @@ -42,28 +55,46 @@ find_dev_recursive(char *dirnamebuf, int number) { return 0; } +void usage(){ + printf ("rootdev \n\t-d (for device only)\n"); +} + int main(int argc, char *argv[]) { struct stat s; char *file = "/"; static char name[PATH_MAX+1]; - - if (argc > 1) - file = argv[1]; + int deviceOnly=0; + int c; + extern char *optarg; + extern int optind, optopt; + while ((c = getopt(argc, argv, "hd")) != -1) { + switch(c) { + case 'd': + deviceOnly=1; + break; + case 'h': + default: + usage(); + return 1; + } + } + if (argc - optind >= 1) + file = argv[optind]; if (stat(file, &s) < 0) err(1, "unable to stat %s", file); - + if (!s.st_dev) err(1, "unknown device number 0"); strcpy(name, "/dev"); - if (!find_dev_recursive(name, s.st_dev)) { + if (!find_dev_recursive(name, s.st_dev, deviceOnly)) { fprintf(stderr, "unable to find match\n"); return 1; } printf("%s\n", name); - + return 0; } |