libbb: introduce and use xrename and rename_or_warn.

This commit is contained in:
Denis Vlasenko 2008-02-17 14:28:53 +00:00
parent ffae845cfd
commit cb448fe01b
10 changed files with 33 additions and 39 deletions

View File

@ -150,10 +150,7 @@ int patch_main(int argc, char **argv)
backup_filename = xmalloc(strlen(new_filename) + 6); backup_filename = xmalloc(strlen(new_filename) + 6);
strcpy(backup_filename, new_filename); strcpy(backup_filename, new_filename);
strcat(backup_filename, ".orig"); strcat(backup_filename, ".orig");
if (rename(new_filename, backup_filename) == -1) { xrename(new_filename, backup_filename);
bb_perror_msg_and_die("cannot create file %s",
backup_filename);
}
dst_stream = xfopen(new_filename, "w"); dst_stream = xfopen(new_filename, "w");
} }

View File

@ -1340,8 +1340,7 @@ int sed_main(int argc, char **argv)
G.nonstdout = stdout; G.nonstdout = stdout;
/* unlink(argv[i]); */ /* unlink(argv[i]); */
// FIXME: error check / message? xrename(G.outname, argv[i]);
rename(G.outname, argv[i]);
free(G.outname); free(G.outname);
G.outname = NULL; G.outname = NULL;
} }

View File

@ -298,6 +298,8 @@ int xopen(const char *pathname, int flags);
int xopen3(const char *pathname, int flags, int mode); int xopen3(const char *pathname, int flags, int mode);
int open_or_warn(const char *pathname, int flags); int open_or_warn(const char *pathname, int flags);
int open3_or_warn(const char *pathname, int flags, int mode); 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 xlseek(int fd, off_t offset, int whence);
off_t fdlength(int fd); off_t fdlength(int fd);

View File

@ -98,11 +98,6 @@ int wait4pid(int pid)
if (WIFSIGNALED(status)) if (WIFSIGNALED(status))
return WTERMSIG(status) + 1000; return WTERMSIG(status) + 1000;
return 0; return 0;
if (WIFEXITED(status))
return WEXITSTATUS(status);
if (WIFSIGNALED(status))
return WTERMSIG(status) + 1000;
return 0;
} }
#if ENABLE_FEATURE_PREFER_APPLETS #if ENABLE_FEATURE_PREFER_APPLETS

View File

@ -146,18 +146,32 @@ int open_or_warn(const char *pathname, int flags)
return open3_or_warn(pathname, flags, 0666); 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) void xunlink(const char *pathname)
{ {
if (unlink(pathname)) if (unlink(pathname))
bb_perror_msg_and_die("can't remove file '%s'", 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 // Turn on nonblocking I/O on a fd
int ndelay_on(int fd) int ndelay_on(int fd)
{ {

View File

@ -548,7 +548,7 @@ static void CheckUpdates(void)
fi = fopen(CRONUPDATE, "r"); fi = fopen(CRONUPDATE, "r");
if (fi != NULL) { if (fi != NULL) {
remove(CRONUPDATE); unlink(CRONUPDATE);
while (fgets(buf, sizeof(buf), fi) != NULL) { while (fgets(buf, sizeof(buf), fi) != NULL) {
SynchronizeFile(strtok(buf, " \t\r\n")); SynchronizeFile(strtok(buf, " \t\r\n"));
} }
@ -579,7 +579,7 @@ static void SynchronizeDir(void)
* scan directory and add associated users * scan directory and add associated users
*/ */
remove(CRONUPDATE); unlink(CRONUPDATE);
if (chdir(CDir) < 0) { if (chdir(CDir) < 0) {
crondlog("\311cannot find %s\n", CDir); crondlog("\311cannot find %s\n", CDir);
} }
@ -814,7 +814,7 @@ ForkJob(const char *user, CronLine * line, int mailFd,
crondlog("\024cannot fork\n"); crondlog("\024cannot fork\n");
line->cl_Pid = 0; line->cl_Pid = 0;
if (mail_filename) { if (mail_filename) {
remove(mail_filename); unlink(mail_filename);
} }
} else if (mail_filename) { } else if (mail_filename) {
/* PARENT, FORK SUCCESS /* PARENT, FORK SUCCESS
@ -823,7 +823,7 @@ ForkJob(const char *user, CronLine * line, int mailFd,
char mailFile2[128]; char mailFile2[128];
snprintf(mailFile2, sizeof(mailFile2), TMPDIR "/cron.%s.%d", user, pid); 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 * Close the mail file descriptor.. we can't just leave it open in
@ -896,7 +896,7 @@ static void EndJob(const char *user, CronLine * line)
*/ */
mailFd = open(mailFile, O_RDONLY); mailFd = open(mailFile, O_RDONLY);
remove(mailFile); unlink(mailFile);
if (mailFd < 0) { if (mailFd < 0) {
return; return;
} }

View File

@ -512,10 +512,7 @@ int sendgetmail_main(int argc, char **argv)
if (fd < 0) if (fd < 0)
bb_perror_msg_and_die("cannot create unique file"); bb_perror_msg_and_die("cannot create unique file");
close(fd); close(fd);
if (rename(tmp_name, new_name) < 0) { xrename(tmp_name, new_name);
// something is very wrong
bb_perror_msg_and_die("cannot move %s to %s", tmp_name, new_name);
}
} }
// delete message from server // delete message from server

View File

@ -157,16 +157,6 @@ static int open_trunc_or_warn(const char *name)
return fd; 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) static void update_status(struct svdir *s)
{ {
ssize_t sz; ssize_t sz;

View File

@ -344,10 +344,10 @@ static void log_locally(time_t now, char *msg)
sprintf(newFile, "%s.%d", G.logFilePath, i); sprintf(newFile, "%s.%d", G.logFilePath, i);
if (i == 0) break; if (i == 0) break;
sprintf(oldFile, "%s.%d", G.logFilePath, --i); sprintf(oldFile, "%s.%d", G.logFilePath, --i);
rename(oldFile, newFile); xrename(oldFile, newFile);
} }
/* newFile == "f.0" now */ /* newFile == "f.0" now */
rename(G.logFilePath, newFile); xrename(G.logFilePath, newFile);
fl.l_type = F_UNLCK; fl.l_type = F_UNLCK;
fcntl(G.logFD, F_SETLKW, &fl); fcntl(G.logFD, F_SETLKW, &fl);
close(G.logFD); close(G.logFD);

View File

@ -209,7 +209,7 @@ static void make_device(char *path, int delete)
} else } else
dest = alias; dest = alias;
rename(device_name, dest); rename(device_name, dest); // TODO: xrename?
symlink(dest, device_name); symlink(dest, device_name);
if (alias != dest) if (alias != dest)