add option port
[webserver.git] / webserver.c
CommitLineData
8512671a
LM
1/* depend: */
2/* cflags: */
3/* linker: color.o debug.o */
4
5#include <stdio.h>
6#include <stdlib.h>
7
8#include "debug.h"
9
10/* constants */
11
12#define BUFFER_SIZE 4096
13
14/* macros */
15
16/* gobal variables */
17
18char *progname = NULL;
21ac031b 19int port = 8080;
8512671a
LM
20
21/* help function */
22
23int usage (int ret)
24{
25 FILE *fid = ret ? stderr : stdout;
26 fprintf (fid, "usage: %s\n", progname);
27 fprintf (fid, " -h : help message\n");
21ac031b 28 fprintf (fid, " -p : port number (%d)\n", port);
8512671a
LM
29 fprintf (fid, " -v : verbose level (%d)\n", verbose);
30
31 return ret;
32}
33
34/* main function */
35
36int main (int argc, char *argv[])
37{
38 int i = 0;
39 int ret = 0;
40
41 /* program name */
42
43 progname = argv[0];
44 while (progname[i] != '\0') {
45 if ((progname[i] == '/') || (progname[i] == '\\')) {
46 progname += i + 1;
47 i = 0;
48 } else {
49 i++;
50 }
51 }
52
53 /* argument processing */
54
55 while (argc-- > 1) {
56 char *arg = *(++argv);
57 if (arg[0] != '-') {
58 VERBOSE (ERROR, fprintf (stderr, "%s: invalid option -- '%s'\n", progname, arg); usage (1));
59 return 1;
60 }
61 char c = arg[1];
62 switch (c) {
21ac031b 63 case 'p':
8512671a
LM
64 arg = (arg[2]) ? arg + 2 : (--argc > 0) ? *(++argv) : NULL;
65 if (arg == NULL) {
21ac031b
LM
66 VERBOSE (ERROR, fprintf (stderr, "%s: missing port number\n", progname); usage (1));
67 return 1;
68 }
69 port = atoi (arg);
70 if (port <= 0) {
71 VERBOSE (ERROR, fprintf (stderr, "%s: incorrect port number (%s)\n", progname, arg); usage (1));
8512671a
LM
72 return 1;
73 }
8512671a 74 break;
8512671a
LM
75 case 'v':
76 arg = (arg[2]) ? arg + 2 : (--argc > 0) ? *(++argv) : NULL;
77 if (arg == NULL) {
78 VERBOSE (ERROR, fprintf (stderr, "%s: missing verbose level\n", progname); usage (1));
79 return 1;
80 }
81 verbose = atoi (arg);
82 break;
83 case 'h':
84 default:
85 return usage (c != 'h');
86 }
87 }
88
89 return ret;
90}
91
92// test: webserver.exe -h
93// test: webserver.exe -h | awk '/usage:/ { rc=1 } END { exit (1-rc) }'
21ac031b 94// test: webserver.exe -_ 2> /dev/null | wc -l | xargs test 0 =
8512671a
LM
95// test: webserver.exe -_ 2>&1 | awk '/usage:/ { rc=1 } END { exit (1-rc) }'
96// test: webserver.exe error 2>&1 | grep -q 'invalid option'
21ac031b
LM
97// test: webserver.exe -v 2>&1 | grep -q 'missing verbose level'
98// test: webserver.exe -p 2>&1 | grep -q 'missing port number'
99// test: webserver.exe -p -1 2>&1 | grep -q 'incorrect port number'
8512671a
LM
100
101/* vim: set ts=4 sw=4 et: */