2004-12-17 Andrew J. Schorr <ajschorr@alumni.princeton.edu>

	* pid_output.c: (pid_output_lock) Eliminate static function, and just
	  use the #ifdef to decide which version of the function to include.
	  This eliminates a compilation problem with gcc4.  And fix the
	  non-fcntl version so that it actually compiles.  Exit with
	  status 1 instead of -1 on error.
diff --git a/lib/ChangeLog b/lib/ChangeLog
index 22f60c2..a91901c 100644
--- a/lib/ChangeLog
+++ b/lib/ChangeLog
@@ -1,3 +1,11 @@
+2004-12-17 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
+	
+	* pid_output.c: (pid_output_lock) Eliminate static function, and just
+	  use the #ifdef to decide which version of the function to include.
+	  This eliminates a compilation problem with gcc4.  And fix the
+	  non-fcntl version so that it actually compiles.  Exit with
+	  status 1 instead of -1 on error.
+
 2004-12-15 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
 
 	* sigevent.c: (trap_default_signals) Ignore SIGPIPE instead of exiting.
diff --git a/lib/pid_output.c b/lib/pid_output.c
index 11e1243..a098c63 100644
--- a/lib/pid_output.c
+++ b/lib/pid_output.c
@@ -25,13 +25,14 @@
 #include <log.h>
 #include "version.h"
 
+#ifndef HAVE_FCNTL
+
 pid_t
 pid_output (const char *path)
 {
-#ifndef HAVE_FCNTL
   FILE *fp;
   pid_t pid;
-  mask_t oldumask;
+  mode_t oldumask;
 
   pid = getpid();
 
@@ -42,20 +43,20 @@
       fprintf (fp, "%d\n", (int) pid);
       fclose (fp);
       umask(oldumask);
-      return -1;
+      return pid;
     }
+  /* XXX Why do we continue instead of exiting?  This seems incompatible
+     with the behavior of the fcntl version below. */
+  zlog_warn("Can't fopen pid lock file %s (%s), continuing",
+	    path, safe_strerror(errno));
   umask(oldumask);
-  return pid;
-#else
-  static pid_t pid_output_lock (const char *);
-
-  return pid_output_lock(path);
-#endif /* HAVE_FCNTL */
+  return -1;
 }
 
-#ifdef HAVE_FCNTL
-static pid_t
-pid_output_lock (const char *path)
+#else /* HAVE_FCNTL */
+
+pid_t
+pid_output (const char *path)
 {
   int tmp;
   int fd;
@@ -68,12 +69,12 @@
 
   oldumask = umask(0777 & ~LOGFILE_MASK);
   fd = open (path, O_RDWR | O_CREAT, LOGFILE_MASK);
-      if (fd < 0)
-        {
-        zlog_err( "Can't creat pid lock file %s (%s), exit", 
-                 path, safe_strerror(errno));
+  if (fd < 0)
+    {
+      zlog_err("Can't create pid lock file %s (%s), exiting",
+	       path, safe_strerror(errno));
       umask(oldumask);
-      exit (-1);
+      exit(1);
     }
   else
     {
@@ -87,8 +88,8 @@
 
       if (fcntl(fd, F_SETLK, &lock) < 0)
         {
-          zlog_err("Could not lock pid_file %s, exit", path);
-          exit (-1);
+          zlog_err("Could not lock pid_file %s, exiting", path);
+          exit(1);
         }
 
       sprintf (buf, "%d\n", (int) pid);
@@ -102,4 +103,5 @@
     }
   return pid;
 }
+
 #endif /* HAVE_FCNTL */