431:1e8592657a01 | 432:a213ecaf3f4a |
---|---|
154 ret = cmd_repository_url(args); | 154 ret = cmd_repository_url(args); |
155 } else if(!strcasecmp(cmd, "version") || !strcasecmp(cmd, "-version") | 155 } else if(!strcasecmp(cmd, "version") || !strcasecmp(cmd, "-version") |
156 || !strcasecmp(cmd, "--version")) { | 156 || !strcasecmp(cmd, "--version")) { |
157 fprintf(stderr, "dav %s\n", DAV_VERSION); | 157 fprintf(stderr, "dav %s\n", DAV_VERSION); |
158 } else if(!strcasecmp(cmd, "complete")) { | 158 } else if(!strcasecmp(cmd, "complete")) { |
159 ret = shell_completion(args); | 159 if(args->argc < 2) { |
160 return 1; | |
161 } | |
162 char *index_str = args->argv[0]; | |
163 int64_t index = 0; | |
164 if(!util_strtoint(index_str, &index)) { | |
165 return 1; | |
166 } | |
167 if(args->argc + 2 != argc) { | |
168 // we have to fix the index | |
169 | |
170 for(int i=2;i<args->argc;i++) { | |
171 if(index == i-2) { | |
172 break; | |
173 } | |
174 if(strcmp(argv[i+2], args->argv[i])) { | |
175 index--; | |
176 } | |
177 } | |
178 } | |
179 | |
180 ret = shell_completion(args, index); | |
160 } else { | 181 } else { |
161 print_usage(argv[0]); | 182 print_usage(argv[0]); |
162 } | 183 } |
163 } | 184 } |
164 | 185 |
2009 return -1; | 2030 return -1; |
2010 } | 2031 } |
2011 } | 2032 } |
2012 | 2033 |
2013 | 2034 |
2014 int shell_completion(CmdArgs *args) { | 2035 int shell_completion(CmdArgs *args, int index) { |
2015 if(args->argc < 2) { | 2036 if(args->argc < 2 || args->argc < 3) { |
2016 return 1; | |
2017 } | |
2018 | |
2019 char *index_str = args->argv[0]; | |
2020 int64_t index = 0; | |
2021 if(!util_strtoint(index_str, &index)) { | |
2022 return 1; | 2037 return 1; |
2023 } | 2038 } |
2024 | 2039 |
2025 if(index == 1) { | 2040 if(index == 1) { |
2026 sstr_t prefix = { NULL, 0 }; | 2041 sstr_t prefix = { NULL, 0 }; |
2155 } | 2170 } |
2156 if(elm->iscollection) { | 2171 if(elm->iscollection) { |
2157 ucx_buffer_putc(out, '/'); | 2172 ucx_buffer_putc(out, '/'); |
2158 } | 2173 } |
2159 printf("%.*s\n", (int)out->pos, out->space); | 2174 printf("%.*s\n", (int)out->pos, out->space); |
2175 | |
2176 ucx_buffer_free(out); | |
2160 } | 2177 } |
2161 elm = elm->next; | 2178 elm = elm->next; |
2162 } | 2179 } |
2163 | 2180 |
2181 free(lspath); | |
2164 | 2182 |
2183 dav_session_destroy(sn); | |
2165 } | 2184 } |
2166 | 2185 |
2167 return 10; | 2186 return 10; |
2168 } | 2187 } |