t_err alias_run(t_application *app, char **av) { t_alias *tmp; char *cmd; int i; i = 1; tmp = search_alias(app, av); if (app->coming_from && app->coming_from == tmp) return (print_error(ERROR_ALIAS_LOOP)); if (tmp != NULL) { cmd = my_strdup(tmp->cmd); while (av[i] != NULL) { cmd = my_strcatm(cmd, " "); cmd = my_strcatm(cmd, av[i]); i++; } app->coming_from = tmp; application_run_command(app, cmd); return (0); } return (-1); }
void update_alias(t_info *info, char *init, char *replace) { t_alias *alias; if ((alias = search_alias(info, init))) { free(alias->replace); alias->replace = ft_strdup(replace); } else add_alias(info, ft_strdup(init), ft_strdup(replace)); }
/* Fonction qui est appelée lors de la création d'un alias */ int alias(int argc, char **argv) { char *p; alias_ll *tmp; tmp = liste_alias; /* Manque d'arguments */ if (argc != 2) { fprintf(stderr, "philsh : Usage : alias [-L|name=\"command\"\n"); return ERR_ARG; } /* L'option -p permet d'afficher les alias de la session en cours */ if (!strcmp(argv[1], "-L")) { while(tmp != NULL) { printf("%s aliased to '%s'\n", tmp->name, tmp->cmd); tmp = tmp->next; } return 0; } /* Si la commande n'est pas de la forme alias machin=truc alors * c'est qu'on cherche à afficher un alias */ if (NULL == (p = strchr(argv[1], '='))) { if(NULL == (p = search_alias(liste_alias, argv[1]))) { fprintf(stderr,"philsh: %s is not a valid alias\n", argv[1]); return 1; } return printf("%s aliased to '%s'\n", argv[1], p); } /* On coupe la chaine au =, ainsi argv[1] = machin et p+1 = truc */ *p = '\0'; /* On teste si l'alias n'existe pas déjà */ while(tmp != NULL) { if (!strcmp(tmp->name, argv[1])) { /* Si l'alias existe, on le modifie à sa nouvelle valeur */ free(tmp->cmd); tmp->cmd = malloc(sizeof(char) * (1+strlen(p+1))); strcpy(tmp->cmd, p+1); return 0; } tmp = tmp->next; } /* L'alias n'existe pas ---> on le crée */ liste_alias = add_alias(liste_alias, argv[1], p+1); /* On rajoute l'alias dans la completion */ command_completion = add_file_completion(argv[1], 0, command_completion); return 0; }
static iconv_p iconv_search_alias(const char *tocode, const char *fromcode, char *ipath) { char *p; char *to_canonical, *from_canonical; size_t tolen, fromlen; iconv_p cv; int fd; struct stat64 statbuf; caddr_t addr; size_t buflen; fd = open(_ENCODING_ALIAS_PATH, O_RDONLY); if (fd == -1) { /* * if no alias file found, * errno will be set to EINVAL. */ errno = EINVAL; return ((iconv_p)-1); } if (fstat64(fd, &statbuf) == -1) { (void) close(fd); /* use errno set by fstat64 */ return ((iconv_p)-1); } buflen = (size_t)statbuf.st_size; addr = mmap(NULL, buflen, PROT_READ, MAP_SHARED, fd, 0); (void) close(fd); if (addr == MAP_FAILED) { /* use errno set by mmap */ return ((iconv_p)-1); } p = (char *)addr; tolen = search_alias(&p, buflen, tocode); if (tolen) { to_canonical = alloca(tolen + 1); (void) memcpy(to_canonical, p, tolen); to_canonical[tolen] = '\0'; } else { to_canonical = (char *)tocode; } p = (char *)addr; fromlen = search_alias(&p, buflen, fromcode); if (fromlen) { from_canonical = alloca(fromlen + 1); (void) memcpy(from_canonical, p, fromlen); from_canonical[fromlen] = '\0'; } else { from_canonical = (char *)fromcode; } (void) munmap(addr, buflen); if (tolen == 0 && fromlen == 0) { errno = EINVAL; return ((iconv_p)-1); } cv = iconv_open_all(to_canonical, from_canonical, ipath); /* errno set by iconv_open_all on error */ return (cv); }