Index: sdiff.c =================================================================== RCS file: /cvsroot/src/gnu/dist/diffutils/src/sdiff.c,v retrieving revision 1.1.1.1 diff -u -r1.1.1.1 sdiff.c --- sdiff.c 2003/01/26 00:43:17 1.1.1.1 +++ sdiff.c 2004/01/23 07:55:04 @@ -263,26 +261,50 @@ } static void +sub_program_failure (const char *program, int errnum, int 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), program); + exiterr (); +} + +static void ck_editor_status (int errnum, int status) { if (errnum | 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); - exiterr (); + sub_program_failure(editor_program, errnum, status); } } +static void +ck_diff_status (int errnum, int status) +{ +/* Copy & paste from diff.c: + + Value is EXIT_SUCCESS if files are the same, EXIT_FAILURE if + different, EXIT_TROUBLE if there is a problem opening them. */ + + if (errnum || !WIFEXITED(status) || (WEXITSTATUS(status) != EXIT_SUCCESS && + WEXITSTATUS(status) != EXIT_FAILURE)) + { + sub_program_failure(DEFAULT_DIFF_PROGRAM, errnum, status); + } +} + + static FILE * ck_fopen (char const *fname, char const *type) { @@ -726,7 +748,7 @@ if (! interact_ok) exiterr (); - ck_editor_status (werrno, wstatus); + ck_diff_status (werrno, wstatus); untrapsig (0); checksigs (); exit (WEXITSTATUS (wstatus));