summaryrefslogtreecommitdiffstats
path: root/term-utils/script.c
diff options
context:
space:
mode:
authorSami Kerola2012-04-04 19:44:04 +0200
committerSami Kerola2012-04-04 19:46:25 +0200
commitcdd2a8c360c70d16804ace7cc923a6c6bb7c9ca9 (patch)
tree6e4b7254c8179edc8b8f3f1c0908f7e966732b49 /term-utils/script.c
parenttext-utils: verify writing to streams was successful (diff)
downloadkernel-qcow2-util-linux-cdd2a8c360c70d16804ace7cc923a6c6bb7c9ca9.tar.gz
kernel-qcow2-util-linux-cdd2a8c360c70d16804ace7cc923a6c6bb7c9ca9.tar.xz
kernel-qcow2-util-linux-cdd2a8c360c70d16804ace7cc923a6c6bb7c9ca9.zip
term-utils: verify writing to streams was successful
Signed-off-by: Sami Kerola <kerolasa@iki.fi>
Diffstat (limited to 'term-utils/script.c')
-rw-r--r--term-utils/script.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/term-utils/script.c b/term-utils/script.c
index effedac4f..07be7e987 100644
--- a/term-utils/script.c
+++ b/term-utils/script.c
@@ -59,6 +59,7 @@
#include <locale.h>
#include <stddef.h>
+#include "closestream.h"
#include "nls.h"
#include "c.h"
@@ -180,6 +181,7 @@ main(int argc, char **argv) {
setlocale(LC_NUMERIC, "C"); /* see comment above */
bindtextdomain(PACKAGE, LOCALEDIR);
textdomain(PACKAGE);
+ atexit(close_stdout);
while ((ch = getopt_long(argc, argv, "ac:efqt::Vh", longopts, NULL)) != -1)
switch(ch) {
@@ -283,7 +285,8 @@ main(int argc, char **argv) {
}
doinput();
- fclose(timingfd);
+ if (close_stream(timingfd) != 0)
+ errx(EXIT_FAILURE, _("write error"));
return EXIT_SUCCESS;
}
@@ -292,7 +295,8 @@ doinput(void) {
ssize_t cc;
char ibuf[BUFSIZ];
- fclose(fscript);
+ if (close_stream(fscript) != 0)
+ errx(EXIT_FAILURE, _("write error"));
while (die == 0) {
if ((cc = read(STDIN_FILENO, ibuf, BUFSIZ)) > 0) {
@@ -404,6 +408,8 @@ dooutput(FILE *timingfd) {
if (flgs)
fcntl(master, F_SETFL, flgs);
+ if (close_stream(timingfd) != 0)
+ errx(EXIT_FAILURE, _("write error"));
done();
}
@@ -423,7 +429,8 @@ doshell(void) {
getslave();
close(master);
- fclose(fscript);
+ if (close_stream(fscript) != 0)
+ errx(EXIT_FAILURE, _("write error"));
dup2(slave, STDIN_FILENO);
dup2(slave, STDOUT_FILENO);
dup2(slave, STDERR_FILENO);
@@ -484,7 +491,8 @@ done(void) {
my_strftime(buf, sizeof buf, "%c\n", localtime(&tvec));
fprintf(fscript, _("\nScript done on %s"), buf);
}
- fclose(fscript);
+ if (close_stream(fscript) != 0)
+ errx(EXIT_FAILURE, _("write error"));
close(master);
master = -1;