static int move_to_env(t_env *environ, char *env, char *av) { char *oldpwd; char *pwd; char buffer[256]; char *cat; char *tmp; cat = NULL; tmp = NULL; pwd = NULL; if (!ft_strcmp(env, "OLDPWD") && ft_strlen(av) > 0) { tmp = ft_strsub(av, 1, ft_strlen(av)); cat = ft_strdup(tmp); av = ft_strdup(tmp); } oldpwd = getcwd(buffer, 256); pwd = return_env(environ->environ, env); if (!pwd) { cant_move_home(); move_old_and_pwd(environ, oldpwd, pwd); free_elements(pwd, cat, tmp, NULL); return (1); } ft_memdel((void**)&tmp); ft_memdel((void**)&av); return (move_to_env_suite(environ, cat, pwd, oldpwd)); }
void ft_sig_tstp(int x) { t_env *env; env = return_env(); (void)x; if (env->pid > 0) { start(); } }
void ft_sig_segv(int x) { t_env *env; env = return_env(); if (x == SIGSEGV) ft_putstr("ft_sh : segmentation fault\n"); if (env->pid > 0) exit (0); start(); }
void replace_tilde(char **origin, int *index, char **environ) { char *ret; char *var; int var_len; if (!(var = return_env(environ, "HOME"))) var = "\0"; var_len = ft_strlen(var); ret = ft_strnew(var_len + ft_strlen(*origin)); *((*origin) + (*index)) = 0; ft_strcpy(ret, *origin); ft_strcpy(ret + (*index), var); ft_strcpy(ret + (*index) + var_len, *origin + (*index) + 1); free(*origin); *index += var_len - 1; *origin = ret; if (var_len) free(var); }