]> git.puffer.fish Git - matthieu/frr.git/commitdiff
Quagga: Fix some more compile warnings
authorDonald Sharp <sharpd@cumulusnetworks.com>
Wed, 7 Oct 2015 16:27:09 +0000 (09:27 -0700)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Wed, 7 Oct 2015 16:27:09 +0000 (09:27 -0700)
The debian build process under Jessie has a 'newer' gcc
compiler that is more stringent on warnings returned.
This commit cleans up some more warnings returned.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
isisd/isis_main.c
lib/log.c
vtysh/vtysh_main.c

index fa6552e643c554299d4ea43d146ba0dd78e693c2..75463b33bbadb50db46e9c8fef4915cdb85a3d95 100644 (file)
@@ -246,7 +246,12 @@ main (int argc, char **argv, char **envp)
   _argc = argc;
   _argv = argv;
   _envp = envp;
-  getcwd (_cwd, sizeof (_cwd));
+  if (getcwd (_cwd, sizeof (_cwd)) == NULL)
+    {
+      zlog_err ("ISISd: Unable to determine CWD: %d", errno);
+      exit (1);
+    }
+
   if (*argv[0] == '.')
     snprintf (_progpath, sizeof (_progpath), "%s/%s", _cwd, _argv[0]);
   else
@@ -348,8 +353,11 @@ main (int argc, char **argv, char **envp)
     return(0);
   
   /* demonize */
-  if (daemon_mode)
-    daemon (0, 0);
+  if (daemon_mode && daemon (0, 0) < 0)
+    {
+      zlog_err("ISISd daemon failed: %s", strerror(errno));
+      return (1);
+    }
 
   /* Process ID file creation. */
   if (pid_file[0] != '\0')
index 1046f904dbf67282538960ae6b0a0ea62747dc80..cf575a3c43243e289965663712490166949c3b0e 100644 (file)
--- a/lib/log.c
+++ b/lib/log.c
@@ -67,8 +67,36 @@ const char *zlog_priority[] =
   "debugging",
   NULL,
 };
-  
 
+/*
+ * write_wrapper
+ *
+ * glibc has declared that the return value from write *must* not be
+ * ignored.
+ * gcc see's this problem and issues a warning for the line.
+ *
+ * Why is this a big deal you say?  Because both of them are right
+ * and if you have -Werror enabled then all calls to write
+ * generate a build error and the build stops.
+ *
+ * clang has helpfully allowed this construct:
+ * (void)write(...)
+ * to tell the compiler yeah I know it has a return value
+ * I don't care about it at this time.
+ * gcc doesn't have this ability.
+ *
+ * This code was written such that it didn't care about the
+ * return value from write.  At this time do I want
+ * to go through and fix and test this code for correctness.
+ * So just wrapper the bad behavior and move on.
+ */
+static void write_wrapper (int fd, const void *buf, size_t count)
+{
+  if (write (fd, buf, count) <= 0)
+    return;
+
+  return;
+}
 
 /* For time string format. */
 
@@ -324,7 +352,7 @@ syslog_sigsafe(int priority, const char *msg, size_t msglen)
     }
   s = str_append(LOC,": ");
   s = str_append(LOC,msg);
-  write(syslog_fd,buf,s-buf);
+  write_wrapper (syslog_fd,buf,s-buf);
 #undef LOC
 }
 
@@ -405,7 +433,7 @@ zlog_signal(int signo, const char *action
   /* N.B. implicit priority is most severe */
 #define PRI LOG_CRIT
 
-#define DUMP(FD) write(FD, buf, s-buf);
+#define DUMP(FD) write_wrapper(FD, buf, s-buf);
   /* If no file logging configured, try to write to fallback log file. */
   if ((logfile_fd >= 0) || ((logfile_fd = open_crashlog()) >= 0))
     DUMP(logfile_fd)
@@ -456,17 +484,17 @@ zlog_backtrace_sigsafe(int priority, void *program_counter)
 #define DUMP(FD) { \
   if (program_counter) \
     { \
-      write(FD, pclabel, sizeof(pclabel)-1); \
+      write_wrapper(FD, pclabel, sizeof(pclabel)-1); \
       backtrace_symbols_fd(&program_counter, 1, FD); \
     } \
-  write(FD, buf, s-buf);       \
+  write_wrapper(FD, buf, s-buf);       \
   backtrace_symbols_fd(array, size, FD); \
 }
 #elif defined(HAVE_PRINTSTACK)
 #define DUMP(FD) { \
   if (program_counter) \
-    write((FD), pclabel, sizeof(pclabel)-1); \
-  write((FD), buf, s-buf); \
+    write_wrapper((FD), pclabel, sizeof(pclabel)-1); \
+  write_wrapper((FD), buf, s-buf); \
   printstack((FD)); \
 }
 #endif /* HAVE_GLIBC_BACKTRACE, HAVE_PRINTSTACK */
index 5d3a61e14db51e23dfb8f3ab031ebe7446790e5d..e160e3360b69854f2abbb5dd54af2f32a0d56241 100644 (file)
@@ -336,7 +336,13 @@ main (int argc, char **argv, char **env)
 
   /* Ignore error messages */
   if (no_error)
-    freopen("/dev/null", "w", stdout);
+    {
+      if (freopen("/dev/null", "w", stdout) == NULL)
+       {
+         fprintf(stderr, "Exiting: Failed to duplicate stdout with -n option");
+         exit(1);
+       }
+    }
 
   /* Make sure we pass authentication before proceeding. */
   vtysh_auth ();