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