- if (waitpid(pid, &status, 0) < 0 || !WIFEXITED(status))
- die("diff program failed");
-
+ if (waitpid(pid, &status, 0) < 0 || !WIFEXITED(status)) {
+ /* We do not check the exit status because typically
+ * diff exits non-zero if files are different, and
+ * we are not interested in knowing that. We *knew*
+ * they are different and that's why we ran diff
+ * in the first place! However if it dies by a signal,
+ * we stop processing immediately.
+ */
+ remove_tempfile();
+ die("external diff died unexpectedly.\n");
+ }