int change_pwd(t_data *data, char *var) { char *tmp; int buffsize; char *pwd; tmp = NULL; if (ft_strcmp(var, "OLD") == 0) { buffsize = ft_strlen(get_var_env(data, "PWD=")) + 256; tmp = getcwd(tmp, buffsize); pwd = ft_strjoin("OLDPWD=", tmp); free(tmp); set_var_env(data, pwd); free(pwd); } else if (ft_strcmp(var, "PWD") == 0) { buffsize = ft_strlen(get_var_env(data, "PWD=")) + 256; tmp = getcwd(tmp, buffsize); pwd = ft_strjoin("PWD=", tmp); free(tmp); set_var_env(data, pwd); free(pwd); } return (0); }
void ft_change_part2(char *env_pwd, t_data *data) { char *path; path = ft_strjoin(env_pwd, get_var_env(data, "OLDPWD")); ft_putendl(get_var_env(data, "OLDPWD=")); change_pwd(data, "OLD"); chdir(path); }
static int test_path(char **tab, char **env) { int i; char *path_in_str; char **path_in_array; char *cmd; int a; if ((path_in_str = get_var_env(env, "PATH=")) == NULL) path_in_str = create_path(); path_in_array = my_str_to_wordtab_pattern(path_in_str, ":"); i = -1; while (path_in_array[++i]) { cmd = concat_str(path_in_array[i], tab[0], '/'); if ((a = execve(cmd, tab, env)) != -1) { free(cmd); free_tab(path_in_array); return (a); } free(cmd); } free_tab(path_in_array); return (cmd_not_found(tab)); }
char *find_path_exec(char *exec, t_gen *envp) { char *path; char **split; int i; i = -1; if ((path = get_var_env("PATH=", envp->env)) == NULL) return (NULL); split = ft_strsplit(path, ':'); while (split[++i]) { path = concat_path(split[i], exec); if ((access(path, F_OK) != -1) && ((envp->ret = check_access(path)) == 0)) break ; else { envp->ret = check_access(path); ft_strdel(&path); if (envp->ret == ENPERM) break ; } } free_split(&split); return (path); }
void cg_shlvl(t_cmd *cmd) { int i; i = ft_atoi(get_var_env("SHLVL", cmd->env)); i++; sh_setenv("SHLVL", ft_itoa(i), 1, cmd); }
void cg_oldpwd(t_cmd *cmd) { int i; i = 0; while (cmd->env[i]) { if (!ft_strncmp(cmd->env[i], "OLDPWD=", 7)) cmd->env[i] = ft_strjoin("OLDPWD=", get_var_env("PWD", cmd->env)); i++; } }
void check_right(char **path, char **args, t_data *data) { struct stat stats; if (stat(*path, &stats) == -1) { ft_putstr("cd: no such file or directory: "); ft_putendl(args[1]); *path = get_var_env(data, "PWD="); } else if ((stats.st_mode & S_IRUSR) == 0) { ft_putstr("cd: permission denied: "); ft_putendl(args[1]); *path = get_var_env(data, "PWD="); } else if ((stats.st_mode & S_IFDIR) == 0) { ft_putstr("cd: not a directory: "); ft_putendl(args[1]); *path = get_var_env(data, "PWD="); } }
void ft_changedirectory(t_data *data, char **args) { char *env_pwd; char *path; env_pwd = ft_strjoin(get_var_env(data, "PWD="), "/"); if (args[1] && ft_strcmp(args[1], "-") == 0) ft_change_part2(env_pwd, data); else if (args[1]) { path = ft_strjoin(env_pwd, args[1]); check_right(&path, args, data); change_pwd(data, "OLD"); path = (args[1][0] == '/' ? args[1] : path); chdir(path); } else { path = get_var_env(data, "HOME="); change_pwd(data, "OLD"); chdir(path); } free(env_pwd); }
int delete_cmd(t_data *data, int j) { int curent_line; char *term_name; int total_len; term_name = get_var_env(data,"TERM="); if (term_name == NULL) return (1); tgetent(NULL, term_name); total_len = ft_strlen(PROMPT) + j; curent_line = (total_len / (tgetnum("co") + 1)) + 1; ft_del_line(data, curent_line); while (j + ft_strlen(PROMPT) >= 1) { j--; tputs(tgetstr("le", NULL), 0, ft_outc); } return (j); }
char *check_and_get_path(char *var, t_gen *envp) { char *path; path = NULL; if (var[0] == '.') { path = ft_strdup(var + 2); if ((envp->ret = check_access(path)) != 0) return (NULL); } else if (var[0] == '/' || !(ft_strcmp("/", get_var_env("PWD=", envp->env)))) { path = ft_strdup(var); if ((envp->ret = check_access(path)) != 0) return (NULL); } else path = find_path_exec(var, envp); return (path); }