0001-server-main.c-fixed-command-line-parsing-using-GNU-getopt
Srivatsa Kanchi, R
skanchi at nexthop.com
Mon Mar 5 03:02:35 CST 2007
replaced the custom 'parse_args' function with GNU getopt
applied some coding style to limit code 80 characters /line
server/main.c | 138
+++++++++++++++++++++++++++++++--------------------------
1 files changed, 74 insertions(+), 64 deletions(-)
-------------- next part --------------
>From ca89203320aba34b523b232a89ba34f83bd3e0aa Mon Sep 17 00:00:00 2001
From: Srivatsa Kanchi R <skanchi at nexthop.com>
Date: Sun, 4 Mar 2007 01:14:59 +0530
Subject: server/main.c fixed command line parsing using GNU getopt
replaced the custom 'parse_args' function with GNU getopt
applied some coding style to limit code 80 characters /line
---
server/main.c | 138 +++++++++++++++++++++++++++++++--------------------------
1 files changed, 74 insertions(+), 64 deletions(-)
diff --git a/server/main.c b/server/main.c
index f96e2ee..9505cce 100644
--- a/server/main.c
+++ b/server/main.c
@@ -36,88 +36,95 @@ #include "request.h"
/* command-line options */
int debug_level = 0;
-int master_socket_timeout = 3; /* master socket timeout in seconds, default is 3 s */
+int master_socket_timeout = 3; /* master socket timeout in seconds,
+ default is 3 s */
int foreground = 0;
const char *server_argv0;
-/* parse-line args */
-/* FIXME: should probably use getopt, and add a (more complete?) help option */
static void usage(void)
{
fprintf(stderr, "\nusage: %s [options]\n\n", server_argv0);
- fprintf(stderr, "options:\n");
- fprintf(stderr, " -d<n> set debug level to <n>\n");
- fprintf(stderr, " -f remain in the foreground for debugging\n");
- fprintf(stderr, " -h display this help message\n");
- fprintf(stderr, " -k[n] kill the current wineserver, optionally with signal n\n");
- fprintf(stderr, " -p[n] make server persistent, optionally for n seconds\n");
- fprintf(stderr, " -v display version information and exit\n");
- fprintf(stderr, " -w wait until the current wineserver terminates\n");
+ fprintf(stderr, "Options:\n");
+ fprintf(stderr, "\t-d<n> set debug level to <n>\n");
+ fprintf(stderr, "\t-f remain in the foreground for debugging\n");
+ fprintf(stderr, "\t-h display this help message\n");
+ fprintf(stderr, "\t-k[n] kill the current wineserver,\
+ optionally with signal n\n");
+ fprintf(stderr, "\t-p[n] make server persistent,\
+ optionally for n seconds\n");
+ fprintf(stderr, "\t-v display version information and exit\n");
+ fprintf(stderr, "\t-w wait until the current wineserver terminates\n");
fprintf(stderr, "\n");
}
-static void parse_args( int argc, char *argv[] )
-{
- int i, ret;
-
- server_argv0 = argv[0];
- for (i = 1; i < argc; i++)
- {
- if (argv[i][0] == '-')
- {
- switch(argv[i][1])
- {
- case 'd':
- if (isdigit(argv[i][2])) debug_level = atoi( argv[i] + 2 );
- else debug_level++;
- break;
- case 'f':
- foreground = 1;
- break;
- case 'h':
- usage();
- exit(0);
- break;
- case 'k':
- if (isdigit(argv[i][2])) ret = kill_lock_owner( atoi(argv[i] + 2) );
- else ret = kill_lock_owner(-1);
- exit( !ret );
- case 'p':
- if (isdigit(argv[i][2])) master_socket_timeout = atoi( argv[i] + 2 );
- else master_socket_timeout = -1;
- break;
- case 'v':
- fprintf( stderr, "%s\n", PACKAGE_STRING );
- exit(0);
- case 'w':
- wait_for_lock();
- exit(0);
- default:
- fprintf( stderr, "wineserver: unknown option '%s'\n", argv[i] );
- usage();
- exit(1);
- }
- }
- else
- {
- fprintf( stderr, "wineserver: unknown argument '%s'.\n", argv[i] );
- usage();
- exit(1);
- }
- }
-}
static void sigterm_handler( int signum )
{
exit(1); /* make sure atexit functions get called */
}
+
int main( int argc, char *argv[] )
{
- parse_args( argc, argv );
+ int c;
+
+ /* parse the arguments provided on the command line */
+ server_argv0 = argv[0];
- /* setup temporary handlers before the real signal initialization is done */
+ while ((c = getopt (argc, argv, "d:fhk::p::vw")) != -1)
+ {
+ switch (c)
+ {
+ case 'd':
+ if( NULL != optarg && atoi(optarg) )
+ debug_level = atoi(optarg);
+ else
+ debug_level++;
+ break;
+
+ case 'f':
+ foreground = 1;
+ break;
+
+ case 'k':
+ if( NULL != optarg && atoi(optarg) )
+ c = kill_lock_owner( atoi(optarg) );
+ else
+ c = kill_lock_owner(-1);
+ exit( !c );
+
+ case 'p':
+ if( NULL != optarg && atoi(optarg) )
+ master_socket_timeout = atoi(optarg);
+ else
+ master_socket_timeout = -1;
+ break;
+
+ case 'v':
+ fprintf( stderr, "%s\n", PACKAGE_STRING );
+ exit(0);
+
+ case 'w':
+ wait_for_lock();
+ exit(0);
+
+ default:
+ usage();
+ exit(0);
+ }
+ }
+
+ if(optind < argc)
+ {
+ fprintf( stderr, "%s: unknown argument '%s'.\n",
+ server_argv0, argv[optind] );
+ usage();
+ exit(1);
+ }
+
+ /* setup temporary handlers before the real signal
+ * initialization is done */
signal( SIGPIPE, SIG_IGN );
signal( SIGHUP, sigterm_handler );
signal( SIGINT, sigterm_handler );
@@ -129,7 +136,10 @@ int main( int argc, char *argv[] )
open_master_socket();
setvbuf( stderr, NULL, _IOLBF, 0 );
- if (debug_level) fprintf( stderr, "wineserver: starting (pid=%ld)\n", (long) getpid() );
+ if (debug_level)
+ fprintf( stderr, "wineserver: starting (pid=%ld)\n",
+ (long) getpid() );
+
init_signals();
init_directories();
init_registry();
--
1.4.1
More information about the wine-patches
mailing list