--- /dev/null
+#ifndef PROCPS_NG_FILEUTILS
+#define PROCPS_NG_FILEUTILS
+
+int close_stream(FILE * stream);
+void close_stdout(void);
+
+#endif
.dirstamp
+test_fileutils
test_strutils
AM_CPPFLAGS += -DTEST_PROGRAM
-noinst_PROGRAMS = test_strutils
+noinst_PROGRAMS = test_strutils test_fileutils
test_strutils_SOURCES = strutils.c
+test_fileutils_SOURCES = fileutils.c
--- /dev/null
+#include <errno.h>
+#include <error.h>
+#include <stdio_ext.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+#include "nls.h"
+
+int close_stream(FILE * stream)
+{
+ const int some_pending = (__fpending(stream) != 0);
+ const int prev_fail = (ferror(stream) != 0);
+ const int fclose_fail = (fclose(stream) != 0);
+ if (prev_fail || (fclose_fail && (some_pending || errno != EBADF))) {
+ if (!fclose_fail)
+ errno = 0;
+ return EOF;
+ }
+ return 0;
+}
+
+/* Use atexit(); */
+void close_stdout(void)
+{
+ if (close_stream(stdout) != 0 && !(errno == EPIPE)) {
+ char const *write_error = _("write error");
+ error(0, errno, "%s", write_error);
+ _exit(EXIT_FAILURE);
+ }
+
+ if (close_stream(stderr) != 0)
+ _exit(EXIT_FAILURE);
+}
+
+#ifdef TEST_PROGRAM
+#include <stdio.h>
+int main(int argc, char *argv[])
+{
+ atexit(close_stdout);
+ printf("Hello, World!\n");
+ return EXIT_SUCCESS;
+}
+#endif /* TEST_PROGRAM */
global-conf.exp \
free.test/free.exp \
kill.test/kill.exp \
+ lib.test/fileutils.exp \
lib.test/strutils.exp \
pgrep.test/pgrep.exp \
pkill.test/pkill.exp \
--- /dev/null
+#
+# Testsuite for lib/fileutils program
+#
+
+set noarg "${topdir}lib/test_fileutils"
+
+set test "without argument"
+spawn $noarg
+expect_pass "$test" "Hello, World!"
+
+set badfd "${topdir}testsuite/lib.test/fileutils_badfd.sh"
+set test "test bad file descriptor"
+spawn $badfd
+expect_pass "$test" "test_fileutils: write error: Bad file descriptor"
+
+set full "${topdir}testsuite/lib.test/fileutils_full.sh"
+set test "test no space left on device"
+spawn $full
+expect_pass "$test" "test_fileutils: write error: No space left on device"
--- /dev/null
+#!/bin/sh
+
+BASEDIR=$(dirname ${0})
+${BASEDIR}/../../lib/test_fileutils >&-
--- /dev/null
+#!/bin/sh
+
+BASEDIR=$(dirname ${0})
+${BASEDIR}/../../lib/test_fileutils > /dev/full