aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--archival/tar.c2
-rw-r--r--coreutils/dd.c2
-rw-r--r--libbb/xfuncs.c30
-rw-r--r--miscutils/crontab.c7
-rw-r--r--miscutils/rx.c2
-rw-r--r--networking/ftpgetput.c2
-rw-r--r--networking/wget.c4
-rw-r--r--runit/svlogd.c6
-rw-r--r--util-linux/mdev.c4
9 files changed, 35 insertions, 24 deletions
diff --git a/archival/tar.c b/archival/tar.c
index 48a1c34cd..be3df687e 100644
--- a/archival/tar.c
+++ b/archival/tar.c
@@ -851,7 +851,7 @@ int tar_main(int argc, char **argv)
tar_handle->src_fd = fileno(tar_stream);
tar_handle->seek = seek_by_read;
} else {
- tar_handle->src_fd = xopen3(tar_filename, flags, 0666);
+ tar_handle->src_fd = xopen(tar_filename, flags);
}
}
diff --git a/coreutils/dd.c b/coreutils/dd.c
index 01702a580..01f37abeb 100644
--- a/coreutils/dd.c
+++ b/coreutils/dd.c
@@ -138,7 +138,7 @@ int dd_main(int argc, char **argv)
if (!seek && (flags & trunc_flag))
oflag |= O_TRUNC;
- ofd = xopen3(outfile, oflag, 0666);
+ ofd = xopen(outfile, oflag);
if (seek && (flags & trunc_flag)) {
if (ftruncate(ofd, seek * obs) < 0) {
diff --git a/libbb/xfuncs.c b/libbb/xfuncs.c
index 773e718b8..ade639516 100644
--- a/libbb/xfuncs.c
+++ b/libbb/xfuncs.c
@@ -57,7 +57,7 @@ char * xstrdup(const char *s)
if (s == NULL)
return NULL;
- t = strdup (s);
+ t = strdup(s);
if (t == NULL)
bb_error_msg_and_die(bb_msg_memory_exhausted);
@@ -69,23 +69,33 @@ char * xstrdup(const char *s)
// the (possibly truncated to length n) string into it.
char * xstrndup(const char *s, int n)
{
+ int m;
char *t;
if (ENABLE_DEBUG && s == NULL)
bb_error_msg_and_die("xstrndup bug");
- /* TODO: think about xstrndup("abc", 10000)!!! */
- t = xmalloc(++n);
+ /* We can just xmalloc(n+1) and strncpy into it, */
+ /* but think about xstrndup("abc", 10000) wastage! */
+ m = n;
+ t = (char*) s;
+ while (m) {
+ if (!*t) break;
+ m--; t++;
+ }
+ n = n - m;
+ t = xmalloc(n + 1);
+ t[n] = '\0';
- return safe_strncpy(t,s,n);
+ return memcpy(t,s,n);
}
// Die if we can't open a file and return a FILE * to it.
// Notice we haven't got xfread(), This is for use with fscanf() and friends.
FILE *xfopen(const char *path, const char *mode)
{
- FILE *fp;
- if ((fp = fopen(path, mode)) == NULL)
+ FILE *fp = fopen(path, mode);
+ if (fp == NULL)
bb_perror_msg_and_die("%s", path);
return fp;
}
@@ -93,8 +103,8 @@ FILE *xfopen(const char *path, const char *mode)
// Die if we can't open an existing file and return an fd.
int xopen(const char *pathname, int flags)
{
- if (ENABLE_DEBUG && (flags & O_CREAT))
- bb_error_msg_and_die("xopen() with O_CREAT");
+ //if (ENABLE_DEBUG && (flags & O_CREAT))
+ // bb_error_msg_and_die("xopen() with O_CREAT");
return xopen3(pathname, flags, 0666);
}
@@ -142,7 +152,7 @@ off_t xlseek(int fd, off_t offset, int whence)
return off;
}
-// Die with supplied error message if this FILE * has ferror set.
+// Die with supplied filename if this FILE * has ferror set.
void die_if_ferror(FILE *fp, const char *fn)
{
if (ferror(fp)) {
@@ -214,7 +224,6 @@ void xsetenv(const char *key, const char *value)
bb_error_msg_and_die(bb_msg_memory_exhausted);
}
-
// Converts unsigned long long value into compact 4-char
// representation. Examples: "1234", "1.2k", " 27M", "123T"
// Fifth char is always '\0'
@@ -257,7 +266,6 @@ void smart_ulltoa5(unsigned long long ul, char buf[5])
buf[4] = '\0';
}
-
// Convert unsigned integer to ascii, writing into supplied buffer. A
// truncated result is always null terminated (unless buflen is 0), and
// contains the first few digits of the result ala strncpy.
diff --git a/miscutils/crontab.c b/miscutils/crontab.c
index 743ac74ae..39d3aae41 100644
--- a/miscutils/crontab.c
+++ b/miscutils/crontab.c
@@ -156,6 +156,7 @@ int crontab_main(int ac, char **av)
break;
case EDIT:
{
+/* FIXME: messy code here! we have file copying helpers for this! */
FILE *fi;
int fd;
int n;
@@ -163,11 +164,12 @@ int crontab_main(int ac, char **av)
snprintf(tmp, sizeof(tmp), TMPDIR "/crontab.%d", getpid());
fd = xopen3(tmp, O_RDWR|O_CREAT|O_TRUNC|O_EXCL, 0600);
+/* race, use fchown */
chown(tmp, getuid(), getgid());
fi = fopen(pas->pw_name, "r");
if (fi) {
while ((n = fread(buf, 1, sizeof(buf), fi)) > 0)
- write(fd, buf, n);
+ full_write(fd, buf, n);
}
EditFile(caller, tmp);
remove(tmp);
@@ -178,6 +180,7 @@ int crontab_main(int ac, char **av)
/* fall through */
case REPLACE:
{
+/* same here */
char path[1024];
int fd;
int n;
@@ -186,7 +189,7 @@ int crontab_main(int ac, char **av)
fd = open(path, O_CREAT|O_TRUNC|O_APPEND|O_WRONLY, 0600);
if (fd >= 0) {
while ((n = read(repFd, buf, sizeof(buf))) > 0) {
- write(fd, buf, n);
+ full_write(fd, buf, n);
}
close(fd);
rename(path, pas->pw_name);
diff --git a/miscutils/rx.c b/miscutils/rx.c
index f723c1676..9b9f6afd4 100644
--- a/miscutils/rx.c
+++ b/miscutils/rx.c
@@ -263,7 +263,7 @@ int rx_main(int argc, char **argv)
fn = argv[1];
ttyfd = xopen(CURRENT_TTY, O_RDWR);
- filefd = xopen3(fn, O_RDWR|O_CREAT|O_TRUNC, 0666);
+ filefd = xopen(fn, O_RDWR|O_CREAT|O_TRUNC);
if (tcgetattr(ttyfd, &tty) < 0)
bb_perror_msg_and_die("tcgetattr");
diff --git a/networking/ftpgetput.c b/networking/ftpgetput.c
index a842401c0..fa1854903 100644
--- a/networking/ftpgetput.c
+++ b/networking/ftpgetput.c
@@ -166,7 +166,7 @@ int ftp_receive(ftp_host_info_t *server, FILE *control_stream,
if (do_continue) {
fd_local = xopen(local_path, O_APPEND | O_WRONLY);
} else {
- fd_local = xopen3(local_path, O_CREAT | O_TRUNC | O_WRONLY, 0666);
+ fd_local = xopen(local_path, O_CREAT | O_TRUNC | O_WRONLY);
}
}
diff --git a/networking/wget.c b/networking/wget.c
index 5a547ce1f..1e51ce96b 100644
--- a/networking/wget.c
+++ b/networking/wget.c
@@ -452,8 +452,8 @@ int wget_main(int argc, char **argv)
/* Do it before progressmeter (want to have nice error message) */
if (output_fd < 0)
- output_fd = xopen3(fname_out,
- O_WRONLY|O_CREAT|O_EXCL|O_TRUNC, 0666);
+ output_fd = xopen(fname_out,
+ O_WRONLY|O_CREAT|O_EXCL|O_TRUNC);
if (!(opt & WGET_OPT_QUIET))
progressmeter(-1);
diff --git a/runit/svlogd.c b/runit/svlogd.c
index b2fbe5167..7024c3db4 100644
--- a/runit/svlogd.c
+++ b/runit/svlogd.c
@@ -148,19 +148,19 @@ static unsigned processorstart(struct logdir *ld)
if (fd_move(0, fd) == -1)
bb_perror_msg_and_die(FATAL"cannot %s processor %s", "move filedescriptor for", ld->name);
ld->fnsave[26] = 't';
- fd = xopen3(ld->fnsave, O_WRONLY|O_NDELAY|O_TRUNC|O_CREAT, 0644);
+ fd = xopen(ld->fnsave, O_WRONLY|O_NDELAY|O_TRUNC|O_CREAT);
if (fd_move(1, fd) == -1)
bb_perror_msg_and_die(FATAL"cannot %s processor %s", "move filedescriptor for", ld->name);
fd = open_read("state");
if (fd == -1) {
if (errno != ENOENT)
bb_perror_msg_and_die(FATAL"cannot %s processor %s", "open state for", ld->name);
- close(xopen3("state", O_WRONLY|O_NDELAY|O_TRUNC|O_CREAT, 0644));
+ close(xopen("state", O_WRONLY|O_NDELAY|O_TRUNC|O_CREAT));
fd = xopen("state", O_RDONLY|O_NDELAY);
}
if (fd_move(4, fd) == -1)
bb_perror_msg_and_die(FATAL"cannot %s processor %s", "move filedescriptor for", ld->name);
- fd = xopen3("newstate", O_WRONLY|O_NDELAY|O_TRUNC|O_CREAT, 0644);
+ fd = xopen("newstate", O_WRONLY|O_NDELAY|O_TRUNC|O_CREAT);
if (fd_move(5, fd) == -1)
bb_perror_msg_and_die(FATAL"cannot %s processor %s", "move filedescriptor for", ld->name);
diff --git a/util-linux/mdev.c b/util-linux/mdev.c
index c03dd6130..957316d52 100644
--- a/util-linux/mdev.c
+++ b/util-linux/mdev.c
@@ -73,7 +73,7 @@ static void make_device(char *path, int delete)
line++;
/* find end of this line */
- for(end=pos; end-conf<len && *end!='\n'; end++)
+ for (end=pos; end-conf<len && *end!='\n'; end++)
;
/* Three fields: regex, uid:gid, mode */
@@ -111,7 +111,7 @@ static void make_device(char *path, int delete)
char *s, *s2;
/* Find : */
- for(s=pos; s<end2 && *s!=':'; s++)
+ for (s=pos; s<end2 && *s!=':'; s++)
;
if (s == end2) break;