ubik-warning-cleanup-20011005
[openafs.git] / src / ubik / ubikcmd.c
1 /*
2  * Copyright 2000, International Business Machines Corporation and others.
3  * All Rights Reserved.
4  * 
5  * This software has been released under the terms of the IBM Public
6  * License.  For details, see the LICENSE file in the top-level source
7  * directory or online at http://www.openafs.org/dl/license10.html
8  */
9
10 #include <afsconfig.h>
11 #include <afs/param.h>
12
13 RCSID("$Header$");
14
15 #include <sys/types.h>
16 #ifdef AFS_NT40_ENV
17 #include <winsock2.h>
18 #else
19 #include <sys/file.h>
20 #include <netinet/in.h>
21 #include <sys/param.h>
22 #include <netdb.h>
23 #endif
24 #include <time.h>
25 #include <lock.h>
26 #ifdef HAVE_STRING_H
27 #include <string.h>
28 #else
29 #ifdef HAVE_STRINGS_H
30 #include <strings.h>
31 #endif
32 #endif
33 #include <rx/xdr.h>
34 #include <rx/rx.h>
35
36 #define UBIK_INTERNALS
37 #include "ubik.h"
38
39 /* This file contain useful subroutines for parsing command line args for ubik
40  *   applications.
41  */
42
43 ubik_ParseServerList(argc, argv, ahost, aothers)
44     int argc;
45     char **argv;
46     afs_int32 *ahost;
47     afs_int32 *aothers; {
48     register afs_int32 i;
49     register char *tp;
50     register struct hostent *th;
51     char hostname[64];
52     afs_int32 myHost, temp, counter;
53     int inServer, sawServer;
54     
55     gethostname(hostname, sizeof(hostname));
56     th = gethostbyname(hostname);
57     if (!th) return UBADHOST;
58     memcpy(&myHost, th->h_addr, sizeof(afs_int32));
59     *ahost = myHost;
60
61     inServer = 0;       /* haven't seen -servers yet */
62     sawServer = 0;
63     counter = 0;
64     for(i=1; i<argc; i++) {
65         /* look for -servers argument */
66         tp = argv[i];
67         
68         if (inServer) {
69             if (*tp == '-') {
70                 inServer = 0;
71             }
72             else {
73                 /* otherwise this is a new host name */
74                 th = gethostbyname(tp);
75                 if (!th) return UBADHOST;
76                 memcpy(&temp, th->h_addr, sizeof(afs_int32));
77                 if (temp != myHost) {
78                     if (counter++ >= MAXSERVERS) return UNHOSTS;
79                     *aothers++ = temp;
80                 }
81             }
82         }
83         /* haven't seen a -server yet */
84         if (!strcmp(tp, "-servers")) {
85             inServer = 1;
86             sawServer = 1;
87         }
88         else if (!strcmp(tp, "-dubik")) {
89             ubik_debugFlag = 1;
90         }
91     }
92     if (!sawServer) {
93         /* never saw a -server */
94         return UNOENT;
95     }
96     if (counter < MAXSERVERS) *aothers++ = 0;   /* null terminate if there's room */
97     return 0;
98 }