rc fix
This commit is contained in:
parent
4c8a383829
commit
c51f739bea
5
TODO
5
TODO
|
@ -60,7 +60,10 @@ Findutils:
|
|||
xargs
|
||||
|
||||
Shell:
|
||||
rc - run command (1 2 3 ~ | <> <<>> & * " parsing) (alias)
|
||||
rc - run command (1 2 3 ~ | <> <<>> & * " parsing) (sig handler)
|
||||
|
||||
Init:
|
||||
sinit - Simple init
|
||||
|
||||
BUGS:
|
||||
ls (unicode strlen, -l flag col)
|
||||
|
|
|
@ -67,7 +67,7 @@ int main(int argc, char **argv) {
|
|||
break;
|
||||
}
|
||||
|
||||
if (mu_recurse((f_flag) ? NULL : "rm", 0, argv[i], NULL, rm, rmd))
|
||||
if (mu_recurse((f_flag) ? NULL : "rm", 1, argv[i], NULL, rm, rmd))
|
||||
ret = 1;
|
||||
}
|
||||
|
||||
|
|
56
shell/rc.c
56
shell/rc.c
|
@ -15,7 +15,7 @@ typedef struct {
|
|||
char *name;
|
||||
char *val;
|
||||
} ALIAS;
|
||||
ALIAS **aliases;
|
||||
ALIAS *aliases;
|
||||
size_t aliases_size;
|
||||
|
||||
unsigned int exit_flag;
|
||||
|
@ -29,11 +29,10 @@ char *cmd[] = {"cd", "exit", "alias"};
|
|||
int (*func[])(char **args) = {rc_cd, rc_exit, rc_alias};
|
||||
|
||||
int rc_alias(char **args) {
|
||||
/* Bug */
|
||||
/* Print all aliases */
|
||||
if (args[0] == NULL) {
|
||||
for (size_t i = 0; i < aliases_size; i++)
|
||||
printf("alias %s=\"%s\"\n", aliases[i]->name, aliases[i]->val);
|
||||
printf("alias %s=\"%s\"\n", aliases[i].name, aliases[i].val);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -48,26 +47,28 @@ int rc_alias(char **args) {
|
|||
|
||||
/* Check is exist */
|
||||
for (size_t i = 0; i < aliases_size; i++)
|
||||
if (!strcmp(args[0], aliases[i]->name))
|
||||
if (!strcmp(args[0], aliases[i].name))
|
||||
return 0;
|
||||
|
||||
aliases_size++;
|
||||
aliases = realloc(aliases, sizeof(ALIAS *) * (aliases_size + 1));
|
||||
aliases = realloc(aliases, sizeof(ALIAS) * aliases_size);
|
||||
if (aliases == NULL) {
|
||||
fprintf(stderr, "rc: realloc failed\n");
|
||||
exit_flag = 1;
|
||||
return 1;
|
||||
}
|
||||
|
||||
aliases[aliases_size] = malloc(sizeof(ALIAS));
|
||||
if (aliases[aliases_size] == NULL) {
|
||||
val++;
|
||||
aliases[aliases_size - 1].name = malloc(strlen(args[0]) + 1);
|
||||
aliases[aliases_size - 1].val = malloc(strlen(val) + 1);
|
||||
if (aliases[aliases_size - 1].name == NULL || aliases[aliases_size - 1].val == NULL) {
|
||||
fprintf(stderr, "rc: malloc failed\n");
|
||||
exit_flag = 1;
|
||||
return 1;
|
||||
}
|
||||
|
||||
aliases[aliases_size - 1]->name = args[0];
|
||||
aliases[aliases_size - 1]->val = val + 1;
|
||||
sprintf(aliases[aliases_size - 1].name, "%s", args[0]);
|
||||
sprintf(aliases[aliases_size - 1].val, "%s", val);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -96,13 +97,6 @@ int rc_cd(char **args) {
|
|||
}
|
||||
|
||||
/* Shell */
|
||||
void free_aliases(void) {
|
||||
for (size_t i = 0; i < aliases_size; i++)
|
||||
free(aliases[i]);
|
||||
|
||||
free(aliases);
|
||||
}
|
||||
|
||||
int execute(char **tok) {
|
||||
if (tok[0] == NULL)
|
||||
return 0;
|
||||
|
@ -112,9 +106,8 @@ int execute(char **tok) {
|
|||
return func[i](tok + 1);
|
||||
|
||||
for (size_t i = 0; i < aliases_size; i++)
|
||||
if (aliases[i] != NULL)
|
||||
if (!strcmp(tok[0], aliases[i]->name))
|
||||
tok[0] = aliases[i]->val;
|
||||
if (!strcmp(tok[0], aliases[i].name))
|
||||
tok[0] = aliases[i].val;
|
||||
|
||||
/* If its not builtin cmd */
|
||||
pid_t pid;
|
||||
|
@ -176,23 +169,23 @@ char *readline(FILE *fp, char *prompt) {
|
|||
return str;
|
||||
}
|
||||
|
||||
void catch_sig(int sig) {
|
||||
UNUSED(sig);
|
||||
|
||||
putchar('\n');
|
||||
return;
|
||||
}
|
||||
|
||||
int main(void) {
|
||||
signal(SIGINT, SIG_IGN);
|
||||
signal(SIGTSTP, SIG_IGN);
|
||||
signal(SIGINT, catch_sig);
|
||||
|
||||
/* Alias */
|
||||
aliases = malloc(sizeof(ALIAS *));
|
||||
aliases = malloc(sizeof(ALIAS));
|
||||
if (aliases == NULL) {
|
||||
fprintf(stderr, "rc: malloc failed\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
aliases[0] = malloc(sizeof(ALIAS));
|
||||
if (aliases[0] == NULL) {
|
||||
fprintf(stderr, "rc: malloc failed\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Prompt */
|
||||
char *prompt = RC_PS;
|
||||
if (!isatty(STDIN_FILENO))
|
||||
|
@ -220,7 +213,12 @@ int main(void) {
|
|||
free(str);
|
||||
}
|
||||
|
||||
free_aliases();
|
||||
for (size_t i = 0; i < aliases_size; i++) {
|
||||
free(aliases[i].name);
|
||||
free(aliases[i].val);
|
||||
}
|
||||
|
||||
free(aliases);
|
||||
putchar('\n');
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue