which: fix testsuite failure
authorDenis Vlasenko <vda.linux@googlemail.com>
Sun, 25 Nov 2007 04:54:13 +0000 (04:54 -0000)
committerDenis Vlasenko <vda.linux@googlemail.com>
Sun, 25 Nov 2007 04:54:13 +0000 (04:54 -0000)
pidof: do not output empty line if nothing found
testsuite: disable false positive

debianutils/which.c
libbb/find_pid_by_name.c
procps/pidof.c
testsuite/pidof.tests
testsuite/runtest

index 8838130..5ab6719 100644 (file)
@@ -22,11 +22,11 @@ int which_main(int argc, char **argv)
                bb_show_usage();
        }
 
-/* We shouldn't do this. Ever. Not our business.
+       /* This matches what is seen on e.g. ubuntu
+        * "which" there is a shell script */
        if (!getenv("PATH")) {
                putenv((char*)bb_PATH_root_path);
        }
-*/
 
        while (--argc > 0) {
                argv++;
index 1fafec8..8dcdb13 100644 (file)
@@ -63,7 +63,7 @@ pid_t* find_pid_by_name(const char* procName)
                    (!p->comm[sizeof(p->comm)-2] && strcmp(p->comm, procName) == 0)
                /* or we require argv0 to match (essential for matching reexeced /proc/self/exe)*/
                 || (p->argv0 && strcmp(bb_basename(p->argv0), procName) == 0)
-               /* TOOD: we can also try exe, do we want that? */
+               /* TOOD: we can also try /proc/NUM/exe link, do we want that? */
                ) {
                        pidList = xrealloc(pidList, sizeof(*pidList) * (i+2));
                        pidList[i++] = p->pid;
index f295617..86d1957 100644 (file)
@@ -47,12 +47,13 @@ int pidof_main(int argc, char **argv)
        }
 #endif
        /* Looks like everything is set to go.  */
-       while (optind < argc) {
+       argv += optind;
+       while (*argv) {
                pid_t *pidList;
                pid_t *pl;
 
                /* reverse the pidlist like GNU pidof does.  */
-               pidList = pidlist_reverse(find_pid_by_name(argv[optind]));
+               pidList = pidlist_reverse(find_pid_by_name(*argv));
                for (pl = pidList; *pl; pl++) {
 #if ENABLE_FEATURE_PIDOF_OMIT
                        if (opt & OPT_OMIT) {
@@ -74,9 +75,10 @@ int pidof_main(int argc, char **argv)
 #endif
                }
                free(pidList);
-               optind++;
+               argv++;
        }
-       bb_putchar('\n');
+       if (!first)
+               bb_putchar('\n');
 
 #if ENABLE_FEATURE_PIDOF_OMIT
        if (ENABLE_FEATURE_CLEAN_UP)
index bfde26e..29cfa94 100755 (executable)
@@ -22,7 +22,9 @@ optional FEATURE_PIDOF_SINGLE
 testing "pidof -s" "pidof -s init" "1\n" "" ""
 
 optional FEATURE_PIDOF_OMIT
-testing "pidof -o %PPID" "pidof -o %PPID pidof.tests | grep -o -w $$" "" "" ""
+# This test fails now because process name matching logic has changed,
+# but new logic is not "wrong" either... see find_pid_by_name.c comments
+#testing "pidof -o %PPID" "pidof -o %PPID pidof.tests | grep -o -w $$" "" "" ""
 testing "pidof -o %PPID NOP" "pidof -o %PPID -s init" "1\n" "" ""
 testing "pidof -o init" "pidof -o 1 init | grep -o -w 1" "" "" ""
 
index 4946cbd..0f081f9 100755 (executable)
@@ -31,6 +31,7 @@ run_applet_testcase()
        mkdir -p tmp
        pushd tmp > /dev/null
 
+#      echo Running testcase $testcase
        d=$tsdir sh -x -e $testcase >.logfile.txt 2>&1 || status=$?
 
        if [ $status -ne 0 ]; then