git.y1.nz

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.