libbb: introduce and use xrename and rename_or_warn.
diff --git a/editors/patch.c b/editors/patch.c
index 07fa5cf..1b283a1 100644
--- a/editors/patch.c
+++ b/editors/patch.c
@@ -150,10 +150,7 @@
backup_filename = xmalloc(strlen(new_filename) + 6);
strcpy(backup_filename, new_filename);
strcat(backup_filename, ".orig");
- if (rename(new_filename, backup_filename) == -1) {
- bb_perror_msg_and_die("cannot create file %s",
- backup_filename);
- }
+ xrename(new_filename, backup_filename);
dst_stream = xfopen(new_filename, "w");
}
diff --git a/editors/sed.c b/editors/sed.c
index 4334182..e55bcaf 100644
--- a/editors/sed.c
+++ b/editors/sed.c
@@ -1340,8 +1340,7 @@
G.nonstdout = stdout;
/* unlink(argv[i]); */
- // FIXME: error check / message?
- rename(G.outname, argv[i]);
+ xrename(G.outname, argv[i]);
free(G.outname);
G.outname = NULL;
}
diff --git a/include/libbb.h b/include/libbb.h
index 67afcdf..2af89df 100644
--- a/include/libbb.h
+++ b/include/libbb.h
@@ -298,6 +298,8 @@
int xopen3(const char *pathname, int flags, int mode);
int open_or_warn(const char *pathname, int flags);
int open3_or_warn(const char *pathname, int flags, int mode);
+void xrename(const char *oldpath, const char *newpath);
+int rename_or_warn(const char *oldpath, const char *newpath);
off_t xlseek(int fd, off_t offset, int whence);
off_t fdlength(int fd);
diff --git a/libbb/vfork_daemon_rexec.c b/libbb/vfork_daemon_rexec.c
index 98339c9..1567d89 100644
--- a/libbb/vfork_daemon_rexec.c
+++ b/libbb/vfork_daemon_rexec.c
@@ -98,11 +98,6 @@
if (WIFSIGNALED(status))
return WTERMSIG(status) + 1000;
return 0;
- if (WIFEXITED(status))
- return WEXITSTATUS(status);
- if (WIFSIGNALED(status))
- return WTERMSIG(status) + 1000;
- return 0;
}
#if ENABLE_FEATURE_PREFER_APPLETS
diff --git a/libbb/xfuncs.c b/libbb/xfuncs.c
index 8dd414d..b4c059f 100644
--- a/libbb/xfuncs.c
+++ b/libbb/xfuncs.c
@@ -146,18 +146,32 @@
return open3_or_warn(pathname, flags, 0666);
}
-void xpipe(int filedes[2])
-{
- if (pipe(filedes))
- bb_perror_msg_and_die("can't create pipe");
-}
-
void xunlink(const char *pathname)
{
if (unlink(pathname))
bb_perror_msg_and_die("can't remove file '%s'", pathname);
}
+void xrename(const char *oldpath, const char *newpath)
+{
+ if (rename(oldpath, newpath))
+ bb_perror_msg_and_die("can't move '%s' to '%s'", oldpath, newpath);
+}
+
+int rename_or_warn(const char *oldpath, const char *newpath)
+{
+ int n = rename(oldpath, newpath);
+ if (n)
+ bb_perror_msg("can't move '%s' to '%s'", oldpath, newpath);
+ return n;
+}
+
+void xpipe(int filedes[2])
+{
+ if (pipe(filedes))
+ bb_perror_msg_and_die("can't create pipe");
+}
+
// Turn on nonblocking I/O on a fd
int ndelay_on(int fd)
{
diff --git a/miscutils/crond.c b/miscutils/crond.c
index 0df143a..9721a8a 100644
--- a/miscutils/crond.c
+++ b/miscutils/crond.c
@@ -548,7 +548,7 @@
fi = fopen(CRONUPDATE, "r");
if (fi != NULL) {
- remove(CRONUPDATE);
+ unlink(CRONUPDATE);
while (fgets(buf, sizeof(buf), fi) != NULL) {
SynchronizeFile(strtok(buf, " \t\r\n"));
}
@@ -579,7 +579,7 @@
* scan directory and add associated users
*/
- remove(CRONUPDATE);
+ unlink(CRONUPDATE);
if (chdir(CDir) < 0) {
crondlog("\311cannot find %s\n", CDir);
}
@@ -814,7 +814,7 @@
crondlog("\024cannot fork\n");
line->cl_Pid = 0;
if (mail_filename) {
- remove(mail_filename);
+ unlink(mail_filename);
}
} else if (mail_filename) {
/* PARENT, FORK SUCCESS
@@ -823,7 +823,7 @@
char mailFile2[128];
snprintf(mailFile2, sizeof(mailFile2), TMPDIR "/cron.%s.%d", user, pid);
- rename(mail_filename, mailFile2);
+ rename(mail_filename, mailFile2); // TODO: xrename?
}
/*
* Close the mail file descriptor.. we can't just leave it open in
@@ -896,7 +896,7 @@
*/
mailFd = open(mailFile, O_RDONLY);
- remove(mailFile);
+ unlink(mailFile);
if (mailFd < 0) {
return;
}
diff --git a/networking/sendmail.c b/networking/sendmail.c
index fa995ab..b2fbc5a 100644
--- a/networking/sendmail.c
+++ b/networking/sendmail.c
@@ -512,10 +512,7 @@
if (fd < 0)
bb_perror_msg_and_die("cannot create unique file");
close(fd);
- if (rename(tmp_name, new_name) < 0) {
- // something is very wrong
- bb_perror_msg_and_die("cannot move %s to %s", tmp_name, new_name);
- }
+ xrename(tmp_name, new_name);
}
// delete message from server
diff --git a/runit/runsv.c b/runit/runsv.c
index 02271d6..02dcf50 100644
--- a/runit/runsv.c
+++ b/runit/runsv.c
@@ -157,16 +157,6 @@
return fd;
}
-static int rename_or_warn(const char *old, const char *new)
-{
- if (rename(old, new) == -1) {
- bb_perror_msg("%s: warning: cannot rename %s to %s",
- dir, old, new);
- return -1;
- }
- return 0;
-}
-
static void update_status(struct svdir *s)
{
ssize_t sz;
diff --git a/sysklogd/syslogd.c b/sysklogd/syslogd.c
index c6e0571..dc5e625 100644
--- a/sysklogd/syslogd.c
+++ b/sysklogd/syslogd.c
@@ -344,10 +344,10 @@
sprintf(newFile, "%s.%d", G.logFilePath, i);
if (i == 0) break;
sprintf(oldFile, "%s.%d", G.logFilePath, --i);
- rename(oldFile, newFile);
+ xrename(oldFile, newFile);
}
/* newFile == "f.0" now */
- rename(G.logFilePath, newFile);
+ xrename(G.logFilePath, newFile);
fl.l_type = F_UNLCK;
fcntl(G.logFD, F_SETLKW, &fl);
close(G.logFD);
diff --git a/util-linux/mdev.c b/util-linux/mdev.c
index a18fc09..2bb0224 100644
--- a/util-linux/mdev.c
+++ b/util-linux/mdev.c
@@ -209,7 +209,7 @@
} else
dest = alias;
- rename(device_name, dest);
+ rename(device_name, dest); // TODO: xrename?
symlink(dest, device_name);
if (alias != dest)