changeset 1571:e85e5f3b87c2 draft

As long as Android's going to require fortify, fixup the warnings it generates.
author Rob Landley <rob@landley.net>
date Sat, 22 Nov 2014 00:36:45 -0600
parents d2eb3c88a724
children da1bf31ed322
files lib/portability.h toys/other/acpi.c toys/other/clear.c toys/other/lspci.c toys/other/nbd_client.c toys/posix/cp.c toys/posix/cpio.c toys/posix/find.c
diffstat 8 files changed, 29 insertions(+), 27 deletions(-) [+]
line wrap: on
line diff
--- a/lib/portability.h	Sat Nov 22 00:31:03 2014 -0600
+++ b/lib/portability.h	Sat Nov 22 00:36:45 2014 -0600
@@ -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
 
--- a/toys/other/acpi.c	Sat Nov 22 00:31:03 2014 -0600
+++ b/toys/other/acpi.c	Sat Nov 22 00:36:45 2014 -0600
@@ -38,7 +38,7 @@
   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;
--- a/toys/other/clear.c	Sat Nov 22 00:31:03 2014 -0600
+++ b/toys/other/clear.c	Sat Nov 22 00:36:45 2014 -0600
@@ -15,5 +15,5 @@
 
 void clear_main(void)
 {
-  write(1, "\e[2J\e[H", 7);
+  xwrite(1, "\e[2J\e[H", 7);
 }
--- a/toys/other/lspci.c	Sat Nov 22 00:31:03 2014 -0600
+++ b/toys/other/lspci.c	Sat Nov 22 00:36:45 2014 -0600
@@ -50,9 +50,10 @@
   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);
--- a/toys/other/nbd_client.c	Sat Nov 22 00:31:03 2014 -0600
+++ b/toys/other/nbd_client.c	Sat Nov 22 00:36:45 2014 -0600
@@ -112,7 +112,7 @@
 
     // Daemonize here.
 
-    daemon(0,0);
+    if (daemon(0,0)) perror_exit("daemonize");
 
     // Process NBD requests until further notice.
 
--- a/toys/posix/cp.c	Sat Nov 22 00:31:03 2014 -0600
+++ b/toys/posix/cp.c	Sat Nov 22 00:36:45 2014 -0600
@@ -261,6 +261,7 @@
   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 @@
       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);
       }
--- a/toys/posix/cpio.c	Sat Nov 22 00:31:03 2014 -0600
+++ b/toys/posix/cpio.c	Sat Nov 22 00:36:45 2014 -0600
@@ -256,7 +256,7 @@
           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);
     }
--- a/toys/posix/find.c	Sat Nov 22 00:31:03 2014 -0600
+++ b/toys/posix/find.c	Sat Nov 22 00:36:45 2014 -0600
@@ -72,7 +72,7 @@
 {
   struct double_list **dl;
   char **newargs;
-  int rc;
+  int rc = 0;
 
   if (!aa->namecount) return 0;
 
@@ -82,8 +82,13 @@
 
   // 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));