Get more help from gcc, add -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2...
[sysvinit.git] / src / killall5.c
index 853acb2d1a2158c27ffb42ffa821158e521217d4..187255598df3030a7fce410788d6aa6e30ecf5e4 100644 (file)
@@ -376,6 +376,20 @@ out:
        return 0;
 }
 
+/*
+ * Get the maximal number of symlinks to follow.  Use sysconf() on
+ * Hurd where the hardcoded value MAXSYMLINKS is not available.
+ */
+static int maxsymlinks(void)
+{
+       int v = sysconf(_SC_SYMLOOP_MAX);
+#ifdef MAXSYMLINKS
+       if (v == -1)
+               return MAXSYMLINKS;
+#endif
+       return v;
+}
+
 /*
  *     Check path is located on a network based partition.
  */
@@ -383,7 +397,7 @@ int check4nfs(const char * path, char * real)
 {
        char buf[PATH_MAX+1];
        const char *curr;
-       int deep = MAXSYMLINKS;
+       int deep = maxsymlinks();
 
        if (!nlist) return 0;
 
@@ -508,8 +522,10 @@ int readproc(int do_stat)
 
                /* Read SID & statname from it. */
                if ((fp = fopen(path, "r")) != NULL) {
-                       if (!fgets(buf, sizeof(buf), fp))
-                               buf[0] = '\0';
+                       size_t len;
+
+                       len = fread(buf, sizeof(char), sizeof(buf)-1, fp);
+                       buf[len] = '\0';
 
                        if (buf[0] == '\0') {
                                nsyslog(LOG_ERR,