X Strike Force XFree86 SVN commit: rev 894 - branches/4.3.0/sid/debian/patches
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 to: