Changeset 82570ff in mainline
- Timestamp:
- 2021-08-09T21:44:23Z (3 years ago)
- Children:
- 3d36920e
- Parents:
- 5f9a52e
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/app/bdsh/input.c
r5f9a52e r82570ff 70 70 alias_t *alias; 71 71 } alias_hup_t; 72 #if 0 72 73 73 static bool find_alias_hup(alias_t *alias, list_t *alias_hups) 74 74 { … … 81 81 return false; 82 82 } 83 #endif 83 84 static errno_t find_alias(char **cmd, list_t *alias_hups, alias_t **data) 85 { 86 errno_t rc = EOK; 87 88 /* test if the passed cmd is an alias */ 89 odlink_t *alias_link = odict_find_eq(&alias_dict, (void *)cmd[0], NULL); 90 if (alias_link != NULL) { 91 *data = odict_get_instance(alias_link, alias_t, odict); 92 /* check if the alias already has been resolved once */ 93 if (!find_alias_hup(*data, alias_hups)) { 94 alias_hup_t *hup = (alias_hup_t *)calloc(1, sizeof(alias_hup_t)); 95 if (hup == NULL) { 96 cli_error(CL_EFAIL, "%s: cannot allocate alias structure\n", PACKAGE_NAME); 97 rc = ENOMEM; 98 goto exit; 99 } 100 hup->alias = *data; 101 list_append(&hup->alias_hup_link, alias_hups); 102 } 103 } 104 105 exit: 106 return rc; 107 } 108 109 static errno_t replace_alias(token_t * tokens, unsigned int tokens_start, unsigned int tokens_len, alias_t *data, char **cmd, char **line) 110 { 111 errno_t rc = EOK; 112 const size_t input_length = str_size(*line) - str_size(cmd[0]) + str_size(data->value) + 1; 113 *line = (char *)malloc(input_length); 114 if (*line == NULL) { 115 cli_error(CL_EFAIL, "%s: cannot allocate input structure\n", PACKAGE_NAME); 116 rc = ENOMEM; 117 goto exit; 118 } 119 120 *line[0] = '\0'; 121 122 unsigned int cmd_replace_index = tokens_start; 123 for (unsigned int i = 0; i < tokens_len; i++) { 124 if (i == cmd_replace_index) { 125 /* if there is a pipe symbol than cmd_token_start will point at the SPACE after the pipe symbol */ 126 if (tokens[i].type == TOKTYPE_SPACE) { 127 tokens_start++; 128 str_append(*line, input_length, tokens[i].text); 129 continue; 130 } 131 132 str_append(*line, input_length, data->value); 133 } else { 134 str_append(*line, input_length, tokens[i].text); 135 } 136 } 137 138 exit: 139 return rc; 140 } 141 84 142 /* 85 143 * Tokenizes input from console, sees if the first word is a built-in, if so … … 209 267 } 210 268 269 alias_t *data = NULL; 270 rc = find_alias(cmd, alias_hups, &data); 271 if (rc != EOK) { 272 goto finit; 273 } 274 275 if (data != NULL) { 276 rc = replace_alias(tokens, cmd_token_start, tokens_length, data, cmd, &usr->line); 277 if (rc == EOK) { 278 /* reprocess input after string replace */ 279 rc = process_input_nohup(usr, alias_hups, count_executed_hups + 1); 280 } 281 goto finit; 282 } 283 284 211 285 if (p < pipe_count - 1) { 212 286 new_iostate.stdout = to; … … 241 315 printf("Command not found.\n"); 242 316 rc = ENOTSUP; 317 goto finit; 318 } 319 320 alias_t *data = NULL; 321 rc = find_alias(cmd, alias_hups, &data); 322 if (rc != EOK) { 323 goto finit; 324 } 325 326 if (data != NULL) { 327 rc = replace_alias(tokens, cmd_token_start, tokens_length, data, cmd, &usr->line); 328 if (rc == EOK) { 329 /* reprocess input after string replace */ 330 rc = process_input_nohup(usr, alias_hups, count_executed_hups + 1); 331 } 243 332 goto finit; 244 333 }
Note:
See TracChangeset
for help on using the changeset viewer.