dav/sopt.c

changeset 747
efbd59642577
parent 533
5b9f20aa88c2
equal deleted inserted replaced
746:a569148841ff 747:efbd59642577
30 #include <stdlib.h> 30 #include <stdlib.h>
31 #include <string.h> 31 #include <string.h>
32 32
33 #include "sopt.h" 33 #include "sopt.h"
34 34
35 #include <cx/hash_map.h>
36
35 void cmd_args_free(CmdArgs *args) { 37 void cmd_args_free(CmdArgs *args) {
36 if(args) { 38 if(args) {
37 ucx_map_free(args->options); 39 cxMapDestroy(args->options);
38 free(args->argv); 40 free(args->argv);
39 free(args); 41 free(args);
40 } 42 }
41 } 43 }
42 44
45 static void cmd_map_put(CxMap *map, const char *key, const void *value) {
46 cxMapPut(map, key, (void*)value);
47 }
48
43 CmdArgs* cmd_parse_args(int argc, char **argv) { 49 CmdArgs* cmd_parse_args(int argc, char **argv) {
44 CmdArgs *a = malloc(sizeof(CmdArgs)); 50 CmdArgs *a = malloc(sizeof(CmdArgs));
45 a->options = ucx_map_new(16); 51 a->options = cxHashMapCreate(cxDefaultAllocator, CX_STORE_POINTERS, 16);
46 a->argv = calloc(argc, sizeof(char*)); 52 a->argv = calloc(argc, sizeof(char*));
47 a->argc = 0; 53 a->argc = 0;
48 54
49 const char *NOARG = ""; 55 const char *NOARG = "";
50 56
60 fprintf(stderr, "Unknown option -%c\n\n", arg[c]); 66 fprintf(stderr, "Unknown option -%c\n\n", arg[c]);
61 cmd_args_free(a); 67 cmd_args_free(a);
62 return NULL; 68 return NULL;
63 } 69 }
64 case 'c': { 70 case 'c': {
65 ucx_map_cstr_put(a->options, "conflict", NOARG); 71 cmd_map_put(a->options, "conflict", NOARG);
66 break; 72 break;
67 } 73 }
68 case 'l': { 74 case 'l': {
69 ucx_map_cstr_put(a->options, "lock", NOARG); 75 cmd_map_put(a->options, "lock", NOARG);
70 break; 76 break;
71 } 77 }
72 case 'd': { 78 case 'd': {
73 ucx_map_cstr_put(a->options, "nolock", NOARG); 79 cmd_map_put(a->options, "nolock", NOARG);
74 break; 80 break;
75 } 81 }
76 case 'r': { 82 case 'r': {
77 ucx_map_cstr_put(a->options, "remove", NOARG); 83 cmd_map_put(a->options, "remove", NOARG);
78 break; 84 break;
79 } 85 }
80 case 'v': { 86 case 'v': {
81 ucx_map_cstr_put(a->options, "verbose", NOARG); 87 cmd_map_put(a->options, "verbose", NOARG);
82 break; 88 break;
83 } 89 }
84 case 's': { 90 case 's': {
85 option = "syncdir"; 91 option = "syncdir";
86 optchar = 's'; 92 optchar = 's';
95 option = "version"; 101 option = "version";
96 optchar = 'V'; 102 optchar = 'V';
97 break; 103 break;
98 } 104 }
99 case 'R': { 105 case 'R': {
100 ucx_map_cstr_put(a->options, "restore-removed", NOARG); 106 cmd_map_put(a->options, "restore-removed", NOARG);
101 break; 107 break;
102 } 108 }
103 case 'M': { 109 case 'M': {
104 ucx_map_cstr_put(a->options, "restore-modified", NOARG); 110 cmd_map_put(a->options, "restore-modified", NOARG);
105 break; 111 break;
106 } 112 }
107 case 'S': { 113 case 'S': {
108 ucx_map_cstr_put(a->options, "snapshot", NOARG); 114 cmd_map_put(a->options, "snapshot", NOARG);
109 } 115 }
110 } 116 }
111 } 117 }
112 } else if(option) { 118 } else if(option) {
113 ucx_map_cstr_put(a->options, option, arg); 119 cmd_map_put(a->options, option, arg);
114 option = NULL; 120 option = NULL;
115 } else { 121 } else {
116 a->argv[a->argc++] = arg; 122 a->argv[a->argc++] = arg;
117 } 123 }
118 } 124 }
119 125
120 return a; 126 return a;
121 } 127 }
122 128
123 char* cmd_getoption(CmdArgs *arg, char *name) { 129 char* cmd_getoption(CmdArgs *arg, const char *name) {
124 return ucx_map_cstr_get(arg->options, name); 130 return cxMapGet(arg->options, cx_hash_key_str(name));
125 } 131 }

mercurial