|
From: Jim M. <ji...@me...> - 2003-12-15 14:30:16
|
Julian Seward <js...@ac...> wrote: > 2.1.0 is available at the usual place, http://valgrind.kde.org. I discovered a small problem in that some error output from valgrind went to stdout. Unfortunately, I'd redirected stdout for the program being operated on and didn't see valgrind's message about ``./foo not found in $PATH, aborting''. In addition, valgrind exited successfully even though it didn't find or run the specified program, so I assumed it had succeeded. The exit status of 127 is pretty commonly used for cases like this. For example, GNU nice and nohup both exit with status 127 if their attempt to exec the specified file fails due to ENOENT. However, I've just noticed that there are numerous other places where diagnostics are `echo'ed to stdout rather than stderr. Perhaps they should be changed, too. Here's a patch that changes only the exit status: --- coregrind/valgrind.in.~1~ 2003-12-15 15:10:09.000000000 +0100 +++ coregrind/valgrind.in 2003-12-15 15:24:38.000000000 +0100 @@ -115,7 +115,7 @@ if [ $# != 0 ] ; then if [ z$which_prog = z ]; then echo "$0: '$1' not found in \$PATH, aborting." - exit + exit 127 fi if [ $# != 0 ] ; then If you'd also like to redirect all diagnostics to stdout, then here's a combined patch that does that, too: --- coregrind/valgrind.in.~1~ 2003-12-15 15:10:09.000000000 +0100 +++ coregrind/valgrind.in 2003-12-15 15:27:19.000000000 +0100 @@ -79,12 +79,12 @@ fi # Setup tool shared object. tool_so="vgskin_${tool}.so" if [ ! -r "$tooldir/$tool_so" ] ; then - echo - echo "Tool error:" - echo " The shared library \`$tool_so' for the chosen" - echo " tool \`$tool' could not be found in" - echo " $tooldir" - echo + echo >&2 + echo "Tool error:" >&2 + echo " The shared library \`$tool_so' for the chosen" >&2 + echo " tool \`$tool' could not be found in" >&2 + echo " $tooldir" >&2 + echo >&2 exit 1 fi @@ -114,27 +114,27 @@ if [ $# != 0 ] ; then fi if [ z$which_prog = z ]; then - echo "$0: '$1' not found in \$PATH, aborting." - exit + echo "$0: '$1' not found in \$PATH, aborting." >&2 + exit 127 fi if [ $# != 0 ] ; then case `file -L "$which_prog"` in # must follow symlinks, hence -L # Ensure the program isn't statically linked. *"statically linked"*) - echo "\`$which_prog' is statically linked" - echo "Valgrind only works on dynamically linked executables; your" - echo "program must rely on at least one shared object for Valgrind" - echo "to work with it. Read FAQ #5 for more information." + echo "\`$which_prog' is statically linked" >&2 + echo "Valgrind only works on dynamically linked executables; your" >&2 + echo "program must rely on at least one shared object for Valgrind" >&2 + echo "to work with it. Read FAQ #5 for more information." >&2 exit 1 ;; # Ensure that there are no setuid or gid flags *:\ set?id\ ELF*) - echo "\`$which_prog' is suid/sgid." - echo "Valgrind can't handle these executables, as it" - echo "requires the LD_PRELOAD feature in order to work." - echo "" - echo "Remove those flags and try again." - echo "" + echo "\`$which_prog' is suid/sgid." >&2 + echo "Valgrind can't handle these executables, as it" >&2 + echo "requires the LD_PRELOAD feature in order to work." >&2 + echo "" >&2 + echo "Remove those flags and try again." >&2 + echo "" >&2 exit 1 ;; esac |