]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
whereis: remove goto statements
authorSami Kerola <kerolasa@iki.fi>
Sat, 25 Jun 2011 10:57:05 +0000 (12:57 +0200)
committerSami Kerola <kerolasa@iki.fi>
Sat, 25 Jun 2011 11:29:22 +0000 (13:29 +0200)
Signed-off-by: Sami Kerola <kerolasa@iki.fi>
misc-utils/whereis.c

index b6204ddd7192d96884fa6382f1a6fe403e034327..a2a3bb672b1b2e448a605b4a095edaa012380a33 100644 (file)
@@ -256,34 +256,16 @@ zerof()
 int    count;
 int    print;
 
-void
-lookup(char *cp) {
-       register char *dp;
-
-       for (dp = cp; *dp; dp++)
-               continue;
-       for (; dp > cp; dp--) {
-               if (*dp == '.') {
-                       *dp = 0;
-                       break;
-               }
-       }
-       for (dp = cp; *dp; dp++)
-               if (*dp == '/')
-                       cp = dp + 1;
-       if (uflag) {
-               print = 0;
-               count = 0;
-       } else
-               print = 1;
-again:
+int
+print_again(char *cp)
+{
        if (print)
                printf("%s:", cp);
        if (sflag) {
                looksrc(cp);
                if (uflag && print == 0 && count != 1) {
                        print = 1;
-                       goto again;
+                       return 1;
                }
        }
        count = 0;
@@ -291,7 +273,7 @@ again:
                lookbin(cp);
                if (uflag && print == 0 && count != 1) {
                        print = 1;
-                       goto again;
+                       return 1;
                }
        }
        count = 0;
@@ -299,9 +281,36 @@ again:
                lookman(cp);
                if (uflag && print == 0 && count != 1) {
                        print = 1;
-                       goto again;
+                       return 1;
+               }
+       }
+       return 0;
+}
+
+void
+lookup(char *cp) {
+       register char *dp;
+
+       for (dp = cp; *dp; dp++)
+               continue;
+       for (; dp > cp; dp--) {
+               if (*dp == '.') {
+                       *dp = 0;
+                       break;
                }
        }
+       for (dp = cp; *dp; dp++)
+               if (*dp == '/')
+                       cp = dp + 1;
+       if (uflag) {
+               print = 0;
+               count = 0;
+       } else
+               print = 1;
+
+       while (print_again(cp))
+               /* all in print_again() */ ;
+
        if (print)
                printf("\n");
 }
@@ -352,8 +361,20 @@ findin(char *dir, char *cp) {
        struct stat statbuf;
 
        dd = strchr(dir, '*');
-       if (!dd)
-               goto noglob;
+       if (!dd) {
+               dirp = opendir(dir);
+               if (dirp == NULL)
+                       return;
+               while ((dp = readdir(dirp)) != NULL) {
+                       if (itsit(cp, dp->d_name)) {
+                               count++;
+                               if (print)
+                                       printf(" %s/%s", dir, dp->d_name);
+                       }
+               }
+               closedir(dirp);
+               return;
+       }
 
        l = strlen(dir);
        if (l < sizeof(dirbuf)) {       /* refuse excessively long names */
@@ -381,18 +402,6 @@ findin(char *dir, char *cp) {
        }
        return;
 
-    noglob:
-       dirp = opendir(dir);
-       if (dirp == NULL)
-               return;
-       while ((dp = readdir(dirp)) != NULL) {
-               if (itsit(cp, dp->d_name)) {
-                       count++;
-                       if (print)
-                               printf(" %s/%s", dir, dp->d_name);
-               }
-       }
-       closedir(dirp);
 }
 
 int