- 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 5fb1187..c31706a 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 cba9085..ce8bcc6 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 e1ac912..8fc2dbb 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 eac14c6..102047d 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 9ee4fcd..3db526b 100644 (file)
@@ -100,10 +100,17 @@ 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 703d01e..1b2f46f 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 44efedb..368fc66 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 c7e82ea..3df4613 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 2eebf56..f38daa2 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 72729c7..6cbbb54 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 30bc9f1..d9388b1 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 32021fe..44d809a 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))