sgw | Static git web (fork of stagit) |
| download: https://git.y1.nz/archives/sgw.tar.gz | |
| README | Files | Log | Refs | LICENSE |
opt.c
1
2 #include <stdlib.h>
3 #include <stdio.h>
4 #include <limits.h>
5
6 #include "opt.h"
7
8
9 int
10 parse_opt(Opt *opt, const char *cur, const char *next)
11 {
12 int index;
13 char flag;
14
15 if (cur[0] != '-') return OPT_REPO;
16 for (index = 1;;) {
17 flag = cur[index];
18 if (flag == '\0') break;
19
20 switch (flag) {
21 case 'i': opt->index = 1; break;
22 case 'p': opt->pages = 1; break;
23 case 'o': opt->out_dir = next; return OPT_SKIP;
24 case 'b': opt->base_url = next; return OPT_SKIP;
25 case 'c':
26 opt->categories[opt->repo_count] = next;
27 return OPT_SKIP;
28 default: ERROR("Unrecognized flag: -%c." "\n\n", flag);
29 }
30
31 index++;
32 }
33
34 return OPT_GOOD;
35 }
36
37 int
38 parse_opts(Opt *opt, int argc, const char * argv[])
39 {
40 const char * cur;
41 const char * next;
42 int index;
43
44 if (argc < 2) ERROR("");
45
46 /* set default values */
47 opt->index = 0;
48 opt->pages = 0;
49 opt->base_url = "";
50 opt->out_dir = "";
51 opt->categories = malloc(MAX_REPOS * sizeof(char *));
52 opt->repo_dirs = malloc(MAX_REPOS * sizeof(char *));
53
54 opt->categories[0] = NULL;
55
56 for (index = 1;;) {
57 cur = argv[index];
58 // printf("Parsing flag group: %s" "\n", cur);
59 next = (index+1 < argc-1) ? argv[index+1] : NULL;
60 switch (parse_opt(opt, cur, next)) {
61 case OPT_SKIP: index++; break;
62 case OPT_FAIL: return OPT_FAIL;
63 case OPT_REPO:
64 opt->repo_dirs[opt->repo_count] = cur;
65 opt->repo_count++;
66 opt->categories[opt->repo_count] = NULL;
67 break;
68 }
69 index++;
70 if(index >= argc) break;
71 }
72
73 if (opt->repo_count == 0)
74 ERROR("Must specify at least one repository." "\n\n");
75
76 return OPT_GOOD;
77 }
78
79 void
80 free_opts(Opt *opt)
81 {
82 free(opt->categories);
83 free(opt->repo_dirs);
84 }
This webpage is intended to be an accessible preview of this repository. To get a fuller picture, clone it and use the git CLI.