- don't free user-supplied string (via -e)
[oweals/busybox.git] / libbb / fclose_nonstdin.c
index 951ab30d6b2579180cef15d3f772b1c076d5999e..6f3f3733203a42b3f748f3265d9b0150a4527786 100644 (file)
  * here to save a little space.
  */
 
-#include <stdio.h>
-#include <libbb.h>
+#include "libbb.h"
 
-int fclose_if_not_stdin(FILE *f)
+int FAST_FUNC fclose_if_not_stdin(FILE *f)
 {
-       if (f != stdin) {
-               return fclose(f);
-       }
-       return 0;
+       /* 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;
 }