- patch from Denis Vlasenko to add and use bb_xopen3()
authorBernhard Reutner-Fischer <rep.dot.nop@gmail.com>
Thu, 13 Apr 2006 12:45:04 +0000 (12:45 -0000)
committerBernhard Reutner-Fischer <rep.dot.nop@gmail.com>
Thu, 13 Apr 2006 12:45:04 +0000 (12:45 -0000)
12 files changed:
archival/gzip.c
coreutils/dd.c
include/libbb.h
libbb/Makefile.in
libbb/xfuncs.c
miscutils/crontab.c
miscutils/mt.c
miscutils/rx.c
modutils/insmod.c
networking/vconfig.c
util-linux/mkfs_minix.c
util-linux/mkswap.c

index 5fb118706e92ddaedda3506825b46ae89bf80e46..c31706af3720fb8e9c93250b22fce1465ae9ab6e 100644 (file)
@@ -1228,7 +1228,7 @@ int gzip_main(int argc, char **argv)
                                inFileNum = STDIN_FILENO;
                                outFileNum = STDOUT_FILENO;
                        } else {
-                               inFileNum = bb_xopen(argv[i], O_RDONLY);
+                               inFileNum = bb_xopen3(argv[i], O_RDONLY, 0);
                                if (fstat(inFileNum, &statBuf) < 0)
                                        bb_perror_msg_and_die("%s", argv[i]);
                                time_stamp = statBuf.st_ctime;
index cba90857f1da05b7f9789bd69bb3de5f27778ae5..ce8bcc6a55c938bfd6f5d1e88eb6cfee73907a18 100644 (file)
@@ -5,20 +5,7 @@
  *
  * Copyright (C) 2000,2001  Matt Kraai
  *
- * 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.
  */
 
 #include <sys/types.h>
@@ -119,9 +106,7 @@ int dd_main(int argc, char **argv)
                        oflag |= O_TRUNC;
                }
 
-               if ((ofd = open(outfile, oflag, 0666)) < 0) {
-                       bb_perror_msg_and_die("%s", outfile);
-               }
+               ofd = bb_xopen3(outfile, oflag, 0666);
 
                if (seek && trunc_flag) {
                        if (ftruncate(ofd, seek * bs) < 0) {
index e1ac912f690504ff243b6bd705ee03379d970d6d..8fc2dbbc8256be07bb179fec8903e23c61e39c7d 100644 (file)
@@ -440,6 +440,7 @@ extern struct spwd *pwd_to_spwd(const struct passwd *pw);
 extern int obscure(const char *old, const char *newval, const struct passwd *pwdp);
 
 extern int bb_xopen(const char *pathname, int flags);
+extern int bb_xopen3(const char *pathname, int flags, int mode);
 extern ssize_t bb_xread(int fd, void *buf, size_t count);
 extern void bb_xread_all(int fd, void *buf, size_t count);
 extern unsigned char bb_xread_char(int fd);
index eac14c60ce6280516a7022c6c6eed5d3307992d5..102047d73926417f6431240f8ad0b94cc7cc0b0e 100644 (file)
@@ -68,7 +68,7 @@ $(LIBBB_MOBJ0):$(LIBBB_MSRC0)
 
 LIBBB_MSRC1:=$(srcdir)/xfuncs.c
 LIBBB_MOBJ1:=xmalloc.o xrealloc.o xcalloc.o xstrdup.o xstrndup.o \
-       xfopen.o xopen.o xread.o xread_all.o xread_char.o \
+       xfopen.o xopen.o xopen3.o xread.o xread_all.o xread_char.o \
        xferror.o xferror_stdout.o xfflush_stdout.o strlen.o
 LIBBB_MOBJ1:=$(patsubst %,$(LIBBB_DIR)/%, $(LIBBB_MOBJ1))
 $(LIBBB_MOBJ1):$(LIBBB_MSRC1)
index 9ee4fcd65a19a4c615cbded3a71793ff65c2ac87..3db526b85811203ac4fce960feab063cacdda7a1 100644 (file)
@@ -99,11 +99,18 @@ FILE *bb_xfopen(const char *path, const char *mode)
 
 #ifdef L_xopen
 int bb_xopen(const char *pathname, int flags)
+{
+       return bb_xopen3(pathname, flags, 0777);
+}
+#endif
+
+#ifdef L_xopen3
+int bb_xopen3(const char *pathname, int flags, int mode)
 {
        int ret;
 
-       ret = open(pathname, flags, 0777);
-       if (ret == -1) {
+       ret = open(pathname, flags, mode);
+       if (ret < 0) {
                bb_perror_msg_and_die("%s", pathname);
        }
        return ret;
@@ -116,7 +123,7 @@ ssize_t bb_xread(int fd, void *buf, size_t count)
        ssize_t size;
 
        size = read(fd, buf, count);
-       if (size == -1) {
+       if (size < 0) {
                bb_perror_msg_and_die(bb_msg_read_error);
        }
        return(size);
index 703d01ecc88e5c978cd23afb94f8551c6d7a59f5..1b2f46f3a7dec2efca245435aec1c179a314dcdc 100644 (file)
@@ -179,20 +179,16 @@ crontab_main(int ac, char **av)
            char buf[1024];
 
            snprintf(tmp, sizeof(tmp), TMPDIR "/crontab.%d", getpid());
-           if ((fd = open(tmp, O_RDWR|O_CREAT|O_TRUNC|O_EXCL, 0600)) >= 0) {
-               chown(tmp, getuid(), getgid());
-               if ((fi = fopen(pas->pw_name, "r"))) {
-                   while ((n = fread(buf, 1, sizeof(buf), fi)) > 0)
-                       write(fd, buf, n);
-               }
-               EditFile(caller, tmp);
-               remove(tmp);
-               lseek(fd, 0L, 0);
-               repFd = fd;
-           } else {
-               bb_error_msg_and_die("unable to create %s", tmp);
+           fd = bb_xopen3(tmp, O_RDWR|O_CREAT|O_TRUNC|O_EXCL, 0600);
+           chown(tmp, getuid(), getgid());
+           if ((fi = fopen(pas->pw_name, "r"))) {
+               while ((n = fread(buf, 1, sizeof(buf), fi)) > 0)
+                   write(fd, buf, n);
            }
-
+           EditFile(caller, tmp);
+           remove(tmp);
+           lseek(fd, 0L, 0);
+           repFd = fd;
        }
        option = REPLACE;
        /* fall through */
@@ -289,11 +285,8 @@ GetReplaceStream(const char *user, const char *file)
     if (ChangeUser(user, 0) < 0)
        exit(0);
 
-    fd = open(file, O_RDONLY);
-    if (fd < 0) {
-       bb_error_msg("unable to open %s", file);
-       exit(0);
-    }
+    bb_default_error_retval = 0;
+    fd = bb_xopen3(file, O_RDONLY, 0);
     buf[0] = 0;
     write(filedes[1], buf, 1);
     while ((n = read(fd, buf, sizeof(buf))) > 0) {
index 44efedbe374f461bd29f4526c7ef0bcd90a04668..368fc66b9f586653960fb6435e1762fb01d1ba16 100644 (file)
@@ -101,8 +101,7 @@ int mt_main(int argc, char **argv)
                        break;
        }
 
-       if ((fd = open(file, mode, 0)) < 0)
-               bb_perror_msg_and_die("%s", file);
+       fd = bb_xopen3(file, mode, 0);
 
        switch (code->value) {
                case MTTELL:
index c7e82ead5387dfdf88470b6bc3ca3d3d4a71ec65..3df4613491ffed1788ba5ceb6477476bb3dcdde8 100644 (file)
@@ -1,3 +1,4 @@
+/* vi: set sw=4 ts=4: */
 /*-------------------------------------------------------------------------
  * Filename:      xmodem.c
  * Version:       $Id: rx.c,v 1.2 2004/03/15 08:28:46 andersen Exp $
@@ -289,13 +290,8 @@ int rx_main(int argc, char **argv)
                        bb_show_usage();
 
        fn = argv[1];
-       ttyfd = open("/dev/tty", O_RDWR);
-       if (ttyfd < 0)
-                       bb_error_msg_and_die("%s: open on /dev/tty failed: %m\n", argv[0]);
-
-       filefd = open(fn, O_RDWR|O_CREAT|O_TRUNC, 0666);
-       if (filefd < 0)
-                       bb_error_msg_and_die("%s: open on %s failed: %m\n", argv[0], fn);
+       ttyfd = bb_xopen3("/dev/tty", O_RDWR, 0);
+       filefd = bb_xopen3(fn, O_RDWR|O_CREAT|O_TRUNC, 0666);
 
        if (tcgetattr(ttyfd, &tty) < 0)
                        bb_error_msg_and_die("%s: tcgetattr failed: %m\n", argv[0]);
index 2eebf560f42e0428d118b984cec6ad59c469bd8d..f38daa257cc24e0e8837f022d08427e9c5989d17 100644 (file)
  *   Restructured (and partly rewritten) by:
  *   Björn Ekwall <bj0rn@blox.se> February 1999
  *
- * 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.
  */
 
 #include <stdlib.h>
@@ -4297,9 +4284,7 @@ int insmod_ng_main( int argc, char **argv)
                strcat(options, " ");
        }
 
-       if ((fd = open(filename, O_RDONLY, 0)) < 0) {
-               bb_perror_msg_and_die("cannot open module `%s'", filename);
-       }
+       fd = bb_xopen3(filename, O_RDONLY, 0);
 
        fstat(fd, &st);
        len = st.st_size;
index 72729c7ed048ece3f90b7aeb8d020d6593ff81db..6cbbb54ca13267071cad9f935699ad80ba7a5fc8 100644 (file)
@@ -123,7 +123,8 @@ int vconfig_main(int argc, char **argv)
        }
 
        /* Don't bother closing the filedes.  It will be closed on cleanup. */
-       bb_xopen(conf_file_name, O_RDONLY);     /* Will die if 802.1q is not present */
+       /* Will die if 802.1q is not present */
+       bb_xopen3(conf_file_name, O_RDONLY, 0);
 
        memset(&ifr, 0, sizeof(struct vlan_ioctl_args));
 
index 30bc9f12d0df6f5990f200ea16474ab590c18813..d9388b1d7ef05cd37661a9783d2111079d2400d8 100644 (file)
@@ -307,7 +307,7 @@ static inline int get_size(const char *file)
        int fd;
        long size;
 
-       fd = bb_xopen(file, O_RDWR);
+       fd = bb_xopen3(file, O_RDWR, 0);
        if (ioctl(fd, BLKGETSIZE, &size) >= 0) {
                close(fd);
                return (size * 512);
@@ -820,7 +820,7 @@ goodbye:
        tmp += dirsize;
        *(short *) tmp = 2;
        strcpy(tmp + 2, ".badblocks");
-       DEV = bb_xopen(device_name, O_RDWR);
+       DEV = bb_xopen3(device_name, O_RDWR, 0);
        if (fstat(DEV, &statbuf) < 0)
                bb_error_msg_and_die("unable to stat %s", device_name);
        if (!S_ISBLK(statbuf.st_mode))
index 32021fe08fd13cc1b4c8cc9ec1d1266c1b2191bd..44d809a3677015653586c5d0404ec620f05b2740 100644 (file)
@@ -258,7 +258,7 @@ static inline long get_size(const char *file)
        int fd;
        long size;
 
-       fd = bb_xopen(file, O_RDONLY);
+       fd = bb_xopen3(file, O_RDONLY, 0);
        if (ioctl(fd, BLKGETSIZE, &size) >= 0) {
                size /= pagesize / 512;
        } else {
@@ -341,7 +341,7 @@ int mkswap_main(int argc, char **argv)
                                PAGES * goodpages);
        }
 
-       DEV = bb_xopen(device_name, O_RDWR);
+       DEV = bb_xopen3(device_name, O_RDWR, 0);
        if (fstat(DEV, &statbuf) < 0)
                bb_perror_msg_and_die("%s", device_name);
        if (!S_ISBLK(statbuf.st_mode))