libbb: add xunlink()

patch: do not try to delete same file twice
This commit is contained in:
Denis Vlasenko 2007-04-05 21:25:15 +00:00
parent 9020d850bf
commit 1bb552b1d9
4 changed files with 19 additions and 16 deletions

View File

@ -105,8 +105,7 @@ int bbunpack(char **argv,
if (new_name == filename) if (new_name == filename)
filename[strlen(filename)] = '.'; filename[strlen(filename)] = '.';
} }
if (unlink(del) < 0) xunlink(del);
bb_perror_msg_and_die("cannot remove %s", del);
#if 0 /* Currently buggy - wrong name: "a.gz: 261% - replaced with a.gz" */ #if 0 /* Currently buggy - wrong name: "a.gz: 261% - replaced with a.gz" */
/* Extreme bloat for gunzip compat */ /* Extreme bloat for gunzip compat */

View File

@ -260,12 +260,9 @@ int patch_main(int argc, char **argv)
} }
if ((dest_cur_line == 0) || (dest_beg_line == 0)) { if ((dest_cur_line == 0) || (dest_beg_line == 0)) {
/* The new patched file is empty, remove it */ /* The new patched file is empty, remove it */
if (unlink(new_filename) == -1) { xunlink(new_filename);
bb_perror_msg_and_die("cannot remove file %s", new_filename); if (strcmp(new_filename, original_filename) != 0)
} xunlink(original_filename);
if (unlink(original_filename) == -1) {
bb_perror_msg_and_die("cannot remove original file %s", new_filename);
}
} }
} }
} }

View File

@ -293,14 +293,15 @@ extern void sig_pause(void);
extern void xsetgid(gid_t gid); void xsetgid(gid_t gid);
extern void xsetuid(uid_t uid); void xsetuid(uid_t uid);
extern void xchdir(const char *path); void xchdir(const char *path);
extern void xsetenv(const char *key, const char *value); void xsetenv(const char *key, const char *value);
extern int xopen(const char *pathname, int flags); void xunlink(const char *pathname);
extern int xopen3(const char *pathname, int flags, int mode); int xopen(const char *pathname, int flags);
extern off_t xlseek(int fd, off_t offset, int whence); int xopen3(const char *pathname, int flags, int mode);
extern off_t fdlength(int fd); off_t xlseek(int fd, off_t offset, int whence);
off_t fdlength(int fd);
int xsocket(int domain, int type, int protocol); int xsocket(int domain, int type, int protocol);

View File

@ -122,6 +122,12 @@ int xopen3(const char *pathname, int flags, int mode)
return ret; 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 // Turn on nonblocking I/O on a fd
int ndelay_on(int fd) int ndelay_on(int fd)
{ {