From 4aca87515a5083ae0e31ce3177189fd43b6d05ac Mon Sep 17 00:00:00 2001 From: Andreas Baumann Date: Sat, 3 Jan 2015 13:58:15 +0100 Subject: patch to Vanilla Tomato 1.28 --- release/src/router/busybox/libbb/fclose_nonstdin.c | 32 +++++++--------------- 1 file changed, 10 insertions(+), 22 deletions(-) (limited to 'release/src/router/busybox/libbb/fclose_nonstdin.c') diff --git a/release/src/router/busybox/libbb/fclose_nonstdin.c b/release/src/router/busybox/libbb/fclose_nonstdin.c index 97e303e9..6f3f3733 100644 --- a/release/src/router/busybox/libbb/fclose_nonstdin.c +++ b/release/src/router/busybox/libbb/fclose_nonstdin.c @@ -4,34 +4,22 @@ * * Copyright (C) 2003 Manuel Novoa III * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * + * Licensed under GPLv2 or later, see file LICENSE in this tarball for details. */ -/* A number of standard utilites can accept multiple command line args +/* 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 -#include +#include "libbb.h" -int bb_fclose_nonstdin(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; } -- cgit v1.2.3-54-g00ecf