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