aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/portability.h12
-rw-r--r--toys/other/acpi.c2
-rw-r--r--toys/other/clear.c2
-rw-r--r--toys/other/lspci.c3
-rw-r--r--toys/other/nbd_client.c2
-rw-r--r--toys/posix/cp.c22
-rw-r--r--toys/posix/cpio.c2
-rw-r--r--toys/posix/find.c11
8 files changed, 29 insertions, 27 deletions
diff --git a/lib/portability.h b/lib/portability.h
index 2f2421d8..d58e5928 100644
--- a/lib/portability.h
+++ b/lib/portability.h
@@ -4,18 +4,6 @@
// in specific compiler, library, or OS versions, localize all that here
// and in portability.c
-// The tendency of gcc to produce stupid warnings continues with
-// warn_unused_result, which warns about things like ignoring the return code
-// of nice(2) (which is completely useless since -1 is a legitimate return
-// value on success and even the man page tells you to use errno instead).
-
-// This makes it stop.
-
-// Except on Android, where fortify is mandatory.
-#if !defined(__ANDROID__)
-#undef _FORTIFY_SOURCE
-#endif
-
// For musl
#define _ALL_SOURCE
diff --git a/toys/other/acpi.c b/toys/other/acpi.c
index c4f31283..44fd03b1 100644
--- a/toys/other/acpi.c
+++ b/toys/other/acpi.c
@@ -38,7 +38,7 @@ int read_int_at(int dirfd, char *name)
FILE *fil;
if ((fd = openat(dirfd, name, O_RDONLY)) < 0) return -1;
- fscanf(fil = xfdopen(fd, "r"), "%d", &ret);
+ if (!fscanf(fil = xfdopen(fd, "r"), "%d", &ret)) perror_exit("%s", name);
fclose(fil);
return ret;
diff --git a/toys/other/clear.c b/toys/other/clear.c
index 2515f735..4061ea8d 100644
--- a/toys/other/clear.c
+++ b/toys/other/clear.c
@@ -15,5 +15,5 @@ config CLEAR
void clear_main(void)
{
- write(1, "\e[2J\e[H", 7);
+ xwrite(1, "\e[2J\e[H", 7);
}
diff --git a/toys/other/lspci.c b/toys/other/lspci.c
index 40e0c0a0..6a265a1d 100644
--- a/toys/other/lspci.c
+++ b/toys/other/lspci.c
@@ -50,9 +50,10 @@ int do_lspci(struct dirtree *new)
if (-1 == (dirfd = openat(dirtree_parentfd(new), new->name, O_RDONLY)))
return 0;
+ // it's ok for the driver link not to be there, whatever fortify says
*driver = 0;
if (toys.optflags & FLAG_k)
- readlinkat(dirfd, "driver", driver, sizeof(driver));
+ if (readlinkat(dirfd, "driver", driver, sizeof(driver)));
for (fields = (char*[]){"class", "vendor", "device", 0}; *fields; fields++) {
int fd, size = 6 + 2*((toys.optflags & FLAG_e) && p == toybuf);
diff --git a/toys/other/nbd_client.c b/toys/other/nbd_client.c
index 6b437c72..969ad4ae 100644
--- a/toys/other/nbd_client.c
+++ b/toys/other/nbd_client.c
@@ -112,7 +112,7 @@ void nbd_client_main(void)
// Daemonize here.
- daemon(0,0);
+ if (daemon(0,0)) perror_exit("daemonize");
// Process NBD requests until further notice.
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));