summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--debian/changelog6
-rw-r--r--pee.c19
2 files changed, 19 insertions, 6 deletions
diff --git a/debian/changelog b/debian/changelog
index 6d41dff..66f923c 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+moreutils (0.44) UNRELEASED; urgency=low
+
+ * pee: Propigate exit status of commands run.
+
+ -- Joey Hess <joeyh@debian.org> Sat, 19 Feb 2011 17:34:50 -0400
+
moreutils (0.43) unstable; urgency=low
* chronic: New command, runs a command quietly, unless it fails.
diff --git a/pee.c b/pee.c
index 6ba38f7..cd3ff20 100644
--- a/pee.c
+++ b/pee.c
@@ -1,5 +1,7 @@
#include <stdlib.h>
#include <stdio.h>
+#include <sys/types.h>
+#include <sys/wait.h>
/* Licensed under the GPL
* Copyright (c) Miek Gieben, 2006
@@ -9,12 +11,19 @@
* pipes _and_ output to standard output
*/
-void
+int
close_pipes(FILE **p, size_t i)
{
+ int ret=EXIT_SUCCESS;
size_t j;
- for (j = 0; j < i; j++)
- pclose(p[j]);
+ for (j = 0; j < i; j++) {
+ int r = pclose(p[j]);
+ if (WIFEXITED(r))
+ ret |= WEXITSTATUS(r);
+ else
+ ret |= 1;
+ }
+ return ret;
}
int
@@ -48,7 +57,5 @@ main(int argc, char **argv) {
}
}
}
- close_pipes(pipes, argc);
-
- exit(EXIT_SUCCESS);
+ exit(close_pipes(pipes, argc));
}