diff options
| author | apb <apb@NetBSD.org> | 2006-02-18 22:42:12 +0000 |
|---|---|---|
| committer | apb <apb@NetBSD.org> | 2006-02-18 22:42:12 +0000 |
| commit | 1045a48c150bd56616fe80e4994b680afdd20fb4 (patch) | |
| tree | b466bd74e3048c014cd52592867ac313060f4260 /gnu/dist/diffutils/src | |
| parent | f511d415b465d69843a6f2387f9075962ad80b92 (diff) | |
Merge the check_child_status function from diffutils-2.8.7.
The rest of the gnu/dist/diffutils tree remains at version 2.8.1.
Fixes PR 23162 from George Michaelson (etcupdate/sdiff report
error on applying merge edits)
Approved by wiz, christos
Diffstat (limited to 'gnu/dist/diffutils/src')
| -rw-r--r-- | gnu/dist/diffutils/src/sdiff.c | 37 |
1 files changed, 20 insertions, 17 deletions
diff --git a/gnu/dist/diffutils/src/sdiff.c b/gnu/dist/diffutils/src/sdiff.c index 4c65992d9cd..b69fecec789 100644 --- a/gnu/dist/diffutils/src/sdiff.c +++ b/gnu/dist/diffutils/src/sdiff.c @@ -1,4 +1,4 @@ -/* $NetBSD: sdiff.c,v 1.1.1.1 2003/01/26 00:43:17 wiz Exp $ */ +/* $NetBSD: sdiff.c,v 1.2 2006/02/18 22:42:12 apb Exp $ */ /* sdiff - side-by-side merge of file differences @@ -263,22 +263,24 @@ perror_fatal (char const *msg) } static void -ck_editor_status (int errnum, int status) +check_child_status (int werrno, int wstatus, int max_ok_status, + char const *subsidiary_program) { - if (errnum | status) + int status = (! werrno && WIFEXITED (wstatus) + ? WEXITSTATUS (wstatus) + : INT_MAX); + + if (max_ok_status < status) { - char const *failure_msgid = N_("subsidiary program `%s' failed"); - if (! errnum && WIFEXITED (status)) - switch (WEXITSTATUS (status)) - { - case 126: - failure_msgid = N_("subsidiary program `%s' not executable"); - break; - case 127: - failure_msgid = N_("subsidiary program `%s' not found"); - break; - } - error (0, errnum, _(failure_msgid), editor_program); + error (0, werrno, + _(status == 126 + ? "subsidiary program `%s' could not be invoked" + : status == 127 + ? "subsidiary program `%s' not found" + : status == INT_MAX + ? "subsidiary program `%s' failed" + : "subsidiary program `%s' failed (exit status %d)"), + subsidiary_program, status); exiterr (); } } @@ -726,7 +728,7 @@ main (int argc, char *argv[]) if (! interact_ok) exiterr (); - ck_editor_status (werrno, wstatus); + check_child_status (werrno, wstatus, EXIT_FAILURE, diffargv[0]); untrapsig (0); checksigs (); exit (WEXITSTATUS (wstatus)); @@ -1089,7 +1091,8 @@ edit (struct line_filter *left, char const *lname, lin lline, lin llen, } ignore_SIGINT = 0; - ck_editor_status (werrno, wstatus); + check_child_status (werrno, wstatus, EXIT_SUCCESS, + editor_program); } { |
