libbb: add xunlink()
authorDenis Vlasenko <vda.linux@googlemail.com>
Thu, 5 Apr 2007 21:25:15 +0000 (21:25 -0000)
committerDenis Vlasenko <vda.linux@googlemail.com>
Thu, 5 Apr 2007 21:25:15 +0000 (21:25 -0000)
patch: do not try to delete same file twice

archival/bbunzip.c
editors/patch.c
include/libbb.h
libbb/xfuncs.c

index e16e6b083781bbf69694c0572f2fc35f6a265491..3c3cc2886beaaa609ef77afe48f4291a2932e73d 100644 (file)
@@ -105,8 +105,7 @@ int bbunpack(char **argv,
                                if (new_name == filename)
                                        filename[strlen(filename)] = '.';
                        }
-                       if (unlink(del) < 0)
-                               bb_perror_msg_and_die("cannot remove %s", del);
+                       xunlink(del);
 
 #if 0 /* Currently buggy - wrong name: "a.gz: 261% - replaced with a.gz" */
                        /* Extreme bloat for gunzip compat */
index 2c908040fc0a04d3eca196e679baad420112be24..4d1425edcd66dd73fe86d9c3628bdc22dd0262e8 100644 (file)
@@ -260,12 +260,9 @@ int patch_main(int argc, char **argv)
                        }
                        if ((dest_cur_line == 0) || (dest_beg_line == 0)) {
                                /* The new patched file is empty, remove it */
-                               if (unlink(new_filename) == -1) {
-                                       bb_perror_msg_and_die("cannot remove file %s", new_filename);
-                               }
-                               if (unlink(original_filename) == -1) {
-                                       bb_perror_msg_and_die("cannot remove original file %s", new_filename);
-                               }
+                               xunlink(new_filename);
+                               if (strcmp(new_filename, original_filename) != 0)
+                                       xunlink(original_filename);
                        }
                }
        }
index 91715c16a7da5f1805228e4249c2758345bd6563..b56352626a953cf394381cd66207d0be966d7cc7 100644 (file)
@@ -293,14 +293,15 @@ extern void sig_pause(void);
 
 
 
-extern void xsetgid(gid_t gid);
-extern void xsetuid(uid_t uid);
-extern void xchdir(const char *path);
-extern void xsetenv(const char *key, const char *value);
-extern int xopen(const char *pathname, int flags);
-extern int xopen3(const char *pathname, int flags, int mode);
-extern off_t xlseek(int fd, off_t offset, int whence);
-extern off_t fdlength(int fd);
+void xsetgid(gid_t gid);
+void xsetuid(uid_t uid);
+void xchdir(const char *path);
+void xsetenv(const char *key, const char *value);
+void xunlink(const char *pathname);
+int xopen(const char *pathname, int flags);
+int xopen3(const char *pathname, int flags, int mode);
+off_t xlseek(int fd, off_t offset, int whence);
+off_t fdlength(int fd);
 
 
 int xsocket(int domain, int type, int protocol);
index b08f92d813eea899464b0cc76f9a8acb89285dc8..c18a1d9986ec5739fd56a3f272df5b64085003b5 100644 (file)
@@ -122,6 +122,12 @@ int xopen3(const char *pathname, int flags, int mode)
        return ret;
 }
 
+void xunlink(const char *pathname)
+{
+       if (unlink(pathname))
+               bb_perror_msg_and_die("cannot remove file '%s'", pathname);
+}
+
 // Turn on nonblocking I/O on a fd
 int ndelay_on(int fd)
 {