From: Sami Kerola Date: Sat, 25 Jun 2011 10:57:05 +0000 (+0200) Subject: whereis: remove goto statements X-Git-Tag: v2.20-rc1~138^2~29 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=12b806427da4f626176c1b28e2c4f377d296f0bd;p=thirdparty%2Futil-linux.git whereis: remove goto statements Signed-off-by: Sami Kerola --- diff --git a/misc-utils/whereis.c b/misc-utils/whereis.c index b6204ddd71..a2a3bb672b 100644 --- a/misc-utils/whereis.c +++ b/misc-utils/whereis.c @@ -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