aboutsummaryrefslogtreecommitdiff
path: root/toys/posix
diff options
context:
space:
mode:
authorRob Landley <rob@landley.net>2014-11-22 00:36:45 -0600
committerRob Landley <rob@landley.net>2014-11-22 00:36:45 -0600
commitf6c28b6e0017ac36190ee31132721a1c9e30f2b6 (patch)
treec242e6d66c112c46ec1a0010758ff00df29f2e87 /toys/posix
parentea6fc27fc8853b317a78c402e290bdc0142792e8 (diff)
downloadtoybox-f6c28b6e0017ac36190ee31132721a1c9e30f2b6.tar.gz
As long as Android's going to require fortify, fixup the warnings it generates.
Diffstat (limited to 'toys/posix')
-rw-r--r--toys/posix/cp.c22
-rw-r--r--toys/posix/cpio.c2
-rw-r--r--toys/posix/find.c11
3 files changed, 24 insertions, 11 deletions
diff --git a/toys/posix/cp.c b/toys/posix/cp.c
index 07a8f05b..9e83cb80 100644
--- a/toys/posix/cp.c
+++ b/toys/posix/cp.c
@@ -261,6 +261,7 @@ int cp_node(struct dirtree *try)
if (fdout != -1) {
if (flags & (FLAG_a|FLAG_p)) {
struct timespec times[2];
+ int rc;
// Inability to set these isn't fatal, some require root access.
@@ -268,13 +269,20 @@ int cp_node(struct dirtree *try)
times[1] = try->st.st_mtim;
// If we can't get a filehandle to the actual object, use racy functions
- if (fdout == AT_FDCWD) {
- fchownat(cfd, catch, try->st.st_uid, try->st.st_gid,
- AT_SYMLINK_NOFOLLOW);
- utimensat(cfd, catch, times, AT_SYMLINK_NOFOLLOW);
- // permission bits already correct for mknod, don't apply to symlink
- } else {
- fchown(fdout, try->st.st_uid, try->st.st_gid);
+ if (fdout == AT_FDCWD)
+ rc = fchownat(cfd, catch, try->st.st_uid, try->st.st_gid,
+ AT_SYMLINK_NOFOLLOW);
+ else rc = fchown(fdout, try->st.st_uid, try->st.st_gid);
+ if (rc) {
+ char *pp;
+
+ perror_msg("chown '%s'", pp = dirtree_path(try, 0));
+ free(pp);
+ }
+
+ // permission bits already correct for mknod and don't apply to symlink
+ if (fdout == AT_FDCWD) utimensat(cfd, catch, times, AT_SYMLINK_NOFOLLOW);
+ else {
futimens(fdout, times);
fchmod(fdout, try->st.st_mode);
}
diff --git a/toys/posix/cpio.c b/toys/posix/cpio.c
index 2a0f7d92..312bb939 100644
--- a/toys/posix/cpio.c
+++ b/toys/posix/cpio.c
@@ -256,7 +256,7 @@ void cpio_main(void)
xwrite(afd, toybuf, nlen);
}
llen = st.st_size & 3;
- if (llen) write(afd, &zero, 4-llen);
+ if (llen) xwrite(afd, &zero, 4-llen);
}
close(fd);
}
diff --git a/toys/posix/find.c b/toys/posix/find.c
index caec80e9..370220e8 100644
--- a/toys/posix/find.c
+++ b/toys/posix/find.c
@@ -72,7 +72,7 @@ static int flush_exec(struct dirtree *new, struct exec_range *aa)
{
struct double_list **dl;
char **newargs;
- int rc;
+ int rc = 0;
if (!aa->namecount) return 0;
@@ -82,8 +82,13 @@ static int flush_exec(struct dirtree *new, struct exec_range *aa)
// switch to directory for -execdir, or back to top if we have an -execdir
// _and_ a normal -exec, or are at top of tree in -execdir
- if (aa->dir && new->parent) fchdir(new->parent->data);
- else if (TT.topdir != -1) fchdir(TT.topdir);
+ if (aa->dir && new->parent) rc = fchdir(new->parent->data);
+ else if (TT.topdir != -1) rc = fchdir(TT.topdir);
+ if (rc) {
+ perror_msg("%s", new->name);
+
+ return rc;
+ }
// execdir: accumulated execs in this directory's children.
newargs = xmalloc(sizeof(char *)*(aa->arglen+aa->namecount+1));