[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: