diff options
Diffstat (limited to 'libbb/fclose_nonstdin.c')
-rw-r--r-- | libbb/fclose_nonstdin.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/libbb/fclose_nonstdin.c b/libbb/fclose_nonstdin.c new file mode 100644 index 0000000..6f3f373 --- /dev/null +++ b/libbb/fclose_nonstdin.c @@ -0,0 +1,25 @@ +/* vi: set sw=4 ts=4: */ +/* + * fclose_nonstdin implementation for busybox + * + * Copyright (C) 2003 Manuel Novoa III <mjn3@codepoet.org> + * + * Licensed under GPLv2 or later, see file LICENSE in this tarball for details. + */ + +/* A number of standard utilities can accept multiple command line args + * of '-' for stdin, according to SUSv3. So we encapsulate the check + * here to save a little space. + */ + +#include "libbb.h" + +int FAST_FUNC fclose_if_not_stdin(FILE *f) +{ + /* Some more paranoid applets want ferror() check too */ + int r = ferror(f); /* NB: does NOT set errno! */ + if (r) errno = EIO; /* so we'll help it */ + if (f != stdin) + return (r | fclose(f)); /* fclose does set errno on error */ + return r; +} |