Author: branden
Date: 2004-01-12 14:06:24 -0500 (Mon, 12 Jan 2004)
New Revision: 894

Added:
   branches/4.3.0/sid/debian/patches/003b_xfs_fixes.diff
Log:
Restore parts of patch #003 from 4.2.1 packages that were lost.


Added: branches/4.3.0/sid/debian/patches/003b_xfs_fixes.diff
===================================================================
--- branches/4.3.0/sid/debian/patches/003b_xfs_fixes.diff       2004-01-12 
18:15:50 UTC (rev 893)
+++ branches/4.3.0/sid/debian/patches/003b_xfs_fixes.diff       2004-01-12 
19:06:24 UTC (rev 894)
@@ -0,0 +1,192 @@
+$Id$
+
+This patch by Branden Robinson, Matthieu Herrb, and Nikita V. Youshchenko.
+
+os/utils.c:
+  - Handle pid files the way most other Unix daemons do.  Use Matthieu
+    Herrb's version of StorePid(), which refuses to open pre-existing pid
+    files, and is more careful with the type of Pid_t.
+  - Allow the user to specify the pid filename on the command line with a
+    "-pid" option (courtesy of Nikita V. Youshchenko).
+  - Whitespace police.
+
+xfs.man:
+  - Document the new "-pid" option (courtesy of Nikita V. Youshchenko).
+
+Not submitted upstream yet.
+
+--- xc/programs/xfs/os/utils.c~        2004-01-12 13:49:11.000000000 -0500
++++ xc/programs/xfs/os/utils.c 2004-01-12 13:52:23.000000000 -0500
+@@ -3,7 +3,7 @@
+  * misc os utilities
+  */
+ /*
+- 
++
+ Copyright 1990, 1991, 1998  The Open Group
+ 
+ Permission to use, copy, modify, distribute, and sell this software and its
+@@ -27,7 +27,7 @@
+ in this Software without prior written authorization from The Open Group.
+ 
+  * Copyright 1990, 1991 Network Computing Devices;
+- * Portions Copyright 1987 by Digital Equipment Corporation 
++ * Portions Copyright 1987 by Digital Equipment Corporation
+  *
+  * Permission to use, copy, modify, distribute, and sell this software and
+  * its documentation for any purpose is hereby granted without fee, provided
+@@ -219,7 +219,7 @@
+ static void
+ usage(void)
+ {
+-    fprintf(stderr, "usage: %s [-config config_file] [-port tcp_port] 
[-droppriv] [-daemon] [-nodaemon] [-user user_name] [-ls listen_socket]\n",
++    fprintf(stderr, "usage: %s [-config config_file] [-daemon] [-droppriv] 
[-ls listen_socket] [-nodaemon] [-pid pid_file] [-port tcp_port] [-user 
user_name]\n",
+           progname);
+     exit(1);
+ }
+@@ -242,7 +242,7 @@
+  *
+  * [] denotes optional and ... denotes repitition.
+  *
+- * The string must be _exactly_ in the above format. 
++ * The string must be _exactly_ in the above format.
+  */
+ 
+ void
+@@ -260,7 +260,7 @@
+           count++;
+       ptr++;
+     }
+-  
++
+     OldListenCount = count + 1;
+     OldListen = (OldListenRec *) malloc (
+       OldListenCount * sizeof (OldListenRec));
+@@ -349,6 +349,11 @@
+               configfilename = argv[++i];
+           else
+               usage();
++      } else if (!strcmp(argv[i], "-pid")) {
++          if (argv[i + 1])
++              pidFile = argv[++i];
++          else
++              usage();
+       }
+ #ifdef MEMBUG
+       else if ( strcmp( argv[i], "-alloc") == 0)
+@@ -392,7 +397,7 @@
+ FSalloc (unsigned long amount)
+ {
+     register pointer  ptr;
+-      
++
+     if ((long)amount < 0)
+       return 0;
+     if (amount == 0)
+@@ -462,21 +467,21 @@
+       FatalError("out of memory\n");
+     return 0;
+ }
+-                    
++
+ /*****************
+  *  FSfree
+- *    calls free 
+- *****************/    
++ *    calls free
++ *****************/
+ 
+ void
+ FSfree(pointer ptr)
+ {
+ #ifdef MEMBUG
+     if (ptr)
+-      ffree((char *)ptr); 
++      ffree((char *)ptr);
+ #else
+     if (ptr)
+-      free((char *)ptr); 
++      free((char *)ptr);
+ #endif
+ }
+ 
+@@ -523,7 +528,7 @@
+ void
+ SetDaemonState(void)
+ {
+-    int           oldpid;
++    long      oldpid;
+ 
+     if (becomeDaemon) {
+       BecomeOrphan();
+@@ -540,30 +545,53 @@
+ }
+ 
+ 
+-static int
++static long
+ StorePid (void)
+ {
+-    int               oldpid;
++    long      oldpid;
++    char      pidstr[11]; /* enough space for a 32-bit pid plus \0 */
++    size_t    pidstrlen;
+ 
+-    if (pidFile[0] != '\0') {
+-      pidFd = open (pidFile, O_RDWR);
+-      if (pidFd == -1 && errno == ENOENT)
+-          pidFd = open (pidFile, O_RDWR|O_CREAT, 0666);
+-      if (pidFd == -1 || !(pidFilePtr = fdopen (pidFd, "r+")))
++    if (pidFile[0] != '\0')
++    {
++      pidFd = open (pidFile, O_WRONLY|O_CREAT|O_EXCL, 0666);
++      if (pidFd == -1)
+       {
+-          ErrorF ("cannot open process-id file %s: %s\n", pidFile,
+-                  strerror (errno));
+-          return -1;
++          if (errno == EEXIST)
++          {
++              /* pidFile already exists; see if we can open it */
++              pidFilePtr = fopen (pidFile, "r");
++              if (pidFilePtr == NULL)
++              {
++                  ErrorF ("cannot open process-id file %s for reading: "
++                          "%s\n", pidFile, strerror (errno));
++                  return -1;
++              }
++              if (fscanf (pidFilePtr, "%ld\n", &oldpid) != 1)
++              {
++                  ErrorF ("existing process-id file %s empty or contains "
++                          "garbage\n", pidFile);
++                  oldpid = -1;
++              }
++              fclose (pidFilePtr);
++              return oldpid;
++          }
++              else
++          {
++              ErrorF ("cannot fdopen process-id file %s for writing: "
++                      "%s\n", pidFile, strerror (errno));
++              return -1;
++          }
+       }
+-      if (fscanf (pidFilePtr, "%d\n", &oldpid) != 1)
+-          oldpid = -1;
+-      if (fseek (pidFilePtr, 0L, SEEK_SET) == -1)
++      if ((pidFilePtr = fdopen (pidFd, "w")) == NULL)
+       {
+-          ErrorF ("cannot seek process-id file %s: %s\n", pidFile,
+-                   strerror (errno));
+-          return -1;
++              ErrorF ("cannot open process-id file %s for writing: %s\n",
++                      pidFile, strerror (errno));
++              return -1;
+       }
+-      if (fprintf (pidFilePtr, "%5ld\n", (long) getpid ()) != 6)
++      (void) snprintf (pidstr, 11, "%ld", (long) getpid());
++      pidstrlen = strlen (pidstr);
++      if (fprintf (pidFilePtr, "%s\n", pidstr) != ( pidstrlen + 1))
+       {
+           ErrorF ("cannot write to process-id file %s: %s\n", pidFile,
+                   strerror (errno));


Property changes on: branches/4.3.0/sid/debian/patches/003b_xfs_fixes.diff
___________________________________________________________________
Name: svn:keywords
   + Id

Reply via email to