int main(int argc, char **argv, char **env_table) { t_env *env; char *line; if (!(env = (t_env *)malloc(sizeof(t_env)))) return (-1); init_env(env, env_table); write(1, PROMPT, sizeof(PROMPT) - 1); while (get_next_line(1, &env->line) > 0) { if (*env->line) { env->command = get_called_command(env->line); if (!strcmp(env->command, "env")) builtin_env(env); else if (!strcmp(env->command, "setenv")) builtin_setenv(env); else if (!strcmp(env->command, "unsetenv")) builtin_unsetenv(env); else if (!strcmp(env->command, "exit")) builtin_exit(env); else unknown_command(env->command); } write(1, PROMPT, sizeof(PROMPT) - 1); } return (0); }
int set_pwd(char ***env, char *path) { char *final_pwd; char **command; int i; i = (strncmp(path, "~/", 2) == 0) ? 1 : 0; if (i == 1 || (strncmp(path, "~\0", 2) == 0)) { if (!(final_pwd = my_strdog(my_getenv(*env, "HOME"), "/"))) return (1); } else if (path[0] == '/') { if (!(final_pwd = strdup("/"))) return (-1); } else if (!(final_pwd = my_strdog(my_getenv(*env, "PWD"), "/"))) return (1); if (!(command = my_str_to_wordtab2(path, "/"))) return (1); final_pwd = set_pwd_loop(command, final_pwd, i); builtin_setenv(env, "PWD", final_pwd); free(final_pwd); return (1); }
int set_pwd() { char *wd = getcwd(NULL, 0); int ret; if (wd) { const char *setenv_argv[] = {"PWD", wd, NULL}; ret = builtin_setenv(ARRAY_SIZE(setenv_argv) - 1, setenv_argv); free(wd); } else { mysh_error("getcwd()"); ret = 1; } return ret; }
void update_pwd(t_link *link, char *new_pwd, char *input) { char *old_pwd; char *cmd[4]; old_pwd = get_pwd(); if (!chdir(new_pwd)) { cmd[0] = ""; cmd[1] = "PWD"; cmd[2] = new_pwd; cmd[3] = NULL; builtin_setenv(link, cmd); cmd[1] = "OLDPWD"; cmd[2] = old_pwd; builtin_setenv(link, cmd); } else { my_printf("42sh: cd: %s: No such file or directory\n", input); free(new_pwd); } free(old_pwd); }
int my_setenv(t_system *sys) { int tmp; char *path; int ac; ac = wordtab_len(sys->cmd->cmd); if (ac == 1) return (my_env(sys)); tmp = builtin_setenv(&(sys->env), sys->cmd->cmd[1], ac > 2 ? sys->cmd->cmd[2] : ""); path = my_getenv(sys->env, "PATH"); if (path) sys->path = my_str_to_wordtab(path, 0, 0); return (tmp); }
void increment_shlvl(char ***env) { int n; char **str; if (get_in_env(*env, "SHLVL")) { n = ft_atoi(get_in_env(*env, "SHLVL")); str = ft_memalloc(sizeof(char*) * 3); str[0] = ft_strdup("setenv"); str[1] = ft_strnew(20); str[1] = ft_strcat(str[1], "SHLVL="); str[1] = ft_strcat(str[1], ft_itoa(++n)); builtin_setenv(str, env); ft_tabfree(str); } }