Changes in uspace/app/bdsh/compl.c [587867a:28a5ebd] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/app/bdsh/compl.c
r587867a r28a5ebd 35 35 #include <vfs/vfs.h> 36 36 #include <str.h> 37 37 #include <adt/odict.h> 38 39 #include "scli.h" 38 40 #include "cmds/cmds.h" 39 41 #include "compl.h" … … 42 44 #include "util.h" 43 45 44 static errno_t compl_init( wchar_t *text, size_t pos, size_t *cstart, void **state);46 static errno_t compl_init(char32_t *text, size_t pos, size_t *cstart, void **state); 45 47 static errno_t compl_get_next(void *state, char **compl); 46 48 static void compl_fini(void *state); … … 64 66 size_t prefix_len; 65 67 68 /* Pointer to the current alias */ 69 odlink_t *alias_link; 70 66 71 /** Pointer inside list of modules */ 67 72 module_t *module; … … 89 94 * Set up iterators in completion object, based on current token. 90 95 */ 91 static errno_t compl_init( wchar_t *text, size_t pos, size_t *cstart, void **state)96 static errno_t compl_init(char32_t *text, size_t pos, size_t *cstart, void **state) 92 97 { 93 98 compl_t *cs = NULL; … … 243 248 } else if (cs->is_command) { 244 249 /* Command without path */ 250 cs->alias_link = odict_first(&alias_dict); 245 251 cs->module = modules; 246 252 cs->builtin = builtins; … … 321 327 } 322 328 329 /* Alias */ 330 if (cs->alias_link != NULL) { 331 while (*compl == NULL && cs->alias_link != NULL) { 332 alias_t *data = odict_get_instance(cs->alias_link, alias_t, odict); 333 if (compl_match_prefix(cs, data->name)) { 334 asprintf(compl, "%s ", data->name); 335 cs->last_compl = *compl; 336 if (*compl == NULL) 337 return ENOMEM; 338 } 339 cs->alias_link = odict_next(cs->alias_link, &alias_dict); 340 } 341 } 342 323 343 /* Modules */ 324 344 if (cs->module != NULL) { 325 345 while (*compl == NULL && cs->module->name != NULL) { 346 /* prevents multiple listing of an overriden cmd */ 326 347 if (compl_match_prefix(cs, cs->module->name)) { 327 asprintf(compl, "%s ", cs->module->name); 328 cs->last_compl = *compl; 329 if (*compl == NULL) 330 return ENOMEM; 348 odlink_t *alias_link = odict_find_eq(&alias_dict, (void *)cs->module->name, NULL); 349 if (alias_link == NULL) { 350 asprintf(compl, "%s ", cs->module->name); 351 cs->last_compl = *compl; 352 if (*compl == NULL) 353 return ENOMEM; 354 } 331 355 } 332 356 cs->module++; … … 338 362 while (*compl == NULL && cs->builtin->name != NULL) { 339 363 if (compl_match_prefix(cs, cs->builtin->name)) { 340 asprintf(compl, "%s ", cs->builtin->name); 341 cs->last_compl = *compl; 342 if (*compl == NULL) 343 return ENOMEM; 364 /* prevents multiple listing of an overriden cmd */ 365 odlink_t *alias_link = odict_find_eq(&alias_dict, (void *)cs->module->name, NULL); 366 if (alias_link == NULL) { 367 asprintf(compl, "%s ", cs->builtin->name); 368 cs->last_compl = *compl; 369 if (*compl == NULL) 370 return ENOMEM; 371 } 344 372 } 345 373 cs->builtin++; … … 389 417 free(ent_path); 390 418 419 /* prevents multiple listing of an overriden cmd */ 420 if (cs->is_command && !ent_stat.is_directory) { 421 odlink_t *alias_link = odict_find_eq(&alias_dict, (void *)dent->d_name, NULL); 422 if (alias_link != NULL) { 423 continue; 424 } 425 } 426 391 427 asprintf(compl, "%s%c", dent->d_name, 392 428 ent_stat.is_directory ? '/' : ' ');
Note:
See TracChangeset
for help on using the changeset viewer.