add option port
[webserver.git] / webserver.c
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
18 char *progname = NULL;
19 int port = 8080;
20
21 /* help function */
22
23 int usage (int ret)
24 {
25 FILE *fid = ret ? stderr : stdout;
26 fprintf (fid, "usage: %s\n", progname);
27 fprintf (fid, " -h : help message\n");
28 fprintf (fid, " -p : port number (%d)\n", port);
29 fprintf (fid, " -v : verbose level (%d)\n", verbose);
30
31 return ret;
32 }
33
34 /* main function */
35
36 int 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) {
63 case 'p':
64 arg = (arg[2]) ? arg + 2 : (--argc > 0) ? *(++argv) : NULL;
65 if (arg == NULL) {
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));
72 return 1;
73 }
74 break;
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) }'
94 // test: webserver.exe -_ 2> /dev/null | wc -l | xargs test 0 =
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'
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'
100
101 /* vim: set ts=4 sw=4 et: */