Пример #1
0
void			loop_remove_env(char **av, t_env *env)
{
	int			i;
	int			j;
	char		**env_var;

	i = 0;
	j = 0;
	while (av[i])
	{
		while (env->environ[j])
		{
			env_var = ft_strsplit(env->environ[j], '=');
			if (!ft_strcmp(env_var[0], av[i]))
			{
				remove_env(env->environ, j);
				j--;
			}
			j++;
			free_double_array(env_var);
		}
		j = 0;
		i++;
	}
}
Пример #2
0
static int vsetenv(struct verbs_environment *env, const char *name,
		   const char *value, int overwrite)
{
	struct verbs_env_item *cur;
	struct verbs_env_item *prev;
	int err = 0;
	int found = 0;

	pthread_mutex_lock(&env->mtx);
	for (prev = NULL, cur = env->head; cur; prev = cur, cur = cur->next) {
		if (!strcmp(cur->name, name)) {
			found = 1;
			if (!strcmp(cur->value, value))
				break;

			if (overwrite) {
				free(cur->value);
				cur->value = strdup(value);
				if (!cur->value) {
					remove_env(env, cur, prev);
					err = -1;
				}
			} else {
				errno = EEXIST;
				err = -1;
			}
			break;
		}
	}
	if (!found) {
		cur = calloc(1, sizeof(*cur));
		if (!cur)
			goto out;

		cur->name = strdup(name);
		if (!cur->name)
			goto out;

		cur->value = strdup(value);
		if (!cur->value)
			goto out;

		cur->next = env->head;
		env->head = cur;
	}

	pthread_mutex_unlock(&env->mtx);
	return err;

out:
	if (cur) {
		free(cur->name);
		free(cur);
	}

	pthread_mutex_unlock(&env->mtx);
	return -1;
}
Пример #3
0
Env * remove_env(Env * xs, String_ * s)
{
    if (xs -> Nil) {
        free_string(s);
        return xs;
    } else {
        if (compare_string(xs -> key, s)) {        // found
            Env * rest = xs -> Cons;
            free_string(xs -> key);
            free_string(xs -> val);
            free(xs);
            free_string(s);
            return rest;
        } else {
            xs -> Cons = remove_env(xs -> Cons, s);
            return xs;
        }
    }

}
Пример #4
0
static int			check_flags(char **av, int *flag)
{
	int			i;

	i = 1;
	if (av[i] && ft_strcmp(av[i], "-n"))
		return (i);
	while (av[i])
	{
		if (av[i] && !ft_strcmp(av[i], "-n"))
		{
			remove_env(av, i);
			*flag = 1;
		}
		if (av[i] && ft_strcmp(av[i], "-n") &&
			(!ft_strcmp(av[i], "--") || av[i][0] != ' '))
			return (i);
		i++;
	}
	return (i);
}