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>.
diff --git a/rootdev.c b/rootdev.c
index 053745d..c3dc175 100644
--- a/rootdev.c
+++ b/rootdev.c
@@ -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 @@
                 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 @@
         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;
 }