This commit is contained in:
Your Name 2023-11-25 14:39:01 +03:00
parent 4c8a383829
commit c51f739bea
3 changed files with 32 additions and 31 deletions

5
TODO
View File

@ -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)

View File

@ -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;
}

View File

@ -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;
}