Util-Linux package development
 help / color / mirror / Atom feed
* failed exec() exit codes
@ 2018-02-01 14:58 Karel Zak
  2018-02-01 16:01 ` Ruediger Meier
  0 siblings, 1 reply; 5+ messages in thread
From: Karel Zak @ 2018-02-01 14:58 UTC (permalink / raw)
  To: util-linux



Now we use on many places where commands executing another command:

    execvp(argv[optind], argv + optind);
    err(EXIT_FAILURE, _("failed to execute %s"), argv[optind]);

the problem is that EXIT_FAILURE is too generic and it does not
provide any way how to detect failed exec()s.

I have added a new macro errexec() to replace err(EXIT_FAILURE, ...).

The new macro is compatible with coreutils way:

    #define EX_EXEC_FAILED          126     /* Program located, but not usable. */
    #define EX_EXEC_ENOENT          127     /* Could not find program to exec.  */

    #define errexec(name)   err(errno == ENOENT ? EX_EXEC_ENOENT : EX_EXEC_FAILED, \ 
                        _("failed to execute %s"), name)

Example:

        $ taskset -c 1 ./foo; echo $?
        taskset: failed to execute ./foo: No such file or directory
        127

        $ touch foo

        $ taskset -c 1 ./foo; echo $?
        taskset: failed to execute ./foo: Permission denied
        126


We had discussion about it 2 years ago, but it has never been
implemented and merged. Fixed now ;-)

Objections? 

    Karel


-- 
 Karel Zak  <kzak@redhat.com>
 http://karelzak.blogspot.com

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2018-02-02  8:37 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-02-01 14:58 failed exec() exit codes Karel Zak
2018-02-01 16:01 ` Ruediger Meier
2018-02-01 20:22   ` Karel Zak
2018-02-01 21:31     ` Rüdiger Meier
2018-02-02  8:37       ` Karel Zak

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox