/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* minishell.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: kcolin +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/02/06 13:44:06 by kcolin #+# #+# */ /* Updated: 2025/02/19 17:02:17 by khais ### ########.fr */ /* */ /* ************************************************************************** */ // stdio must be included before readline #include #include #include #include #include #include #include "libft.h" /* ** remove one '\n' from the end of the string, if it exists */ static char *strip_newline(char *str) { size_t last_char_idx; if (str == NULL) return (NULL); last_char_idx = ft_strlen(str) - 1; if (str[last_char_idx] == '\n') str[last_char_idx] = '\0'; return (str); } /* ** get a command line using readline. ** ** returned buffer must be freed by caller. ** will add command to history if appropriate. */ static char *get_command(void) { char *line; if (isatty(STDIN_FILENO)) line = readline("$ "); else line = strip_newline(get_next_line(STDIN_FILENO)); if (line != NULL && line[0] != '\0') add_history(line); return (line); } int main(int argc, char *argv[], char **envp) { char *line; (void)argc; (void)argv; (void)envp; line = get_command(); while (line != NULL) { ft_printf("%s\n", line); free(line); line = get_command(); } return (0); }