示例#1
0
文件: alias.c 项目: Stifyz/42sh
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);
}
示例#2
0
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));
}
示例#3
0
文件: alias.c 项目: philpep/philsh
/* 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;
}
示例#4
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);
}