maxishell
Implementation of a shell for Linux-like systems
Loading...
Searching...
No Matches
exit.c
Go to the documentation of this file.
1/* ************************************************************************** */
2/* */
3/* ::: :::::::: */
4/* exit.c :+: :+: :+: */
5/* +:+ +:+ +:+ */
6/* By: dmdemirk <dmdemirk@student.42london.c +#+ +:+ +#+ */
7/* +#+#+#+#+#+ +#+ */
8/* Created: 2024/06/03 16:32:42 by dmdemirk #+# #+# */
9/* Updated: 2024/09/09 13:10:47 by dmdemirk ### ########.fr */
10/* */
11/* ************************************************************************** */
12
13#include "shell.h"
14#include "libft.h"
15#include <stdlib.h>
16#include <stdio.h>
17#include "env.h"
18#include "exit_status.h"
19#include "tokens.h"
20
21/*
22Functionality:
23- Exit the shell
24- Free the environment
25- Exit with the exit status
26 */
27
29{
30 remove(HISTORY_PATH);
31}
32
33void handle_numeric_error(t_ms_data *data, const char *arg)
34{
35 char *temp_str;
36
37 temp_str = ft_strjoin("exit: ", arg);
39 exit(NUMERIC_REQUIRED);
40}
41
47
48void handle_exit(t_ms_data *data, int status)
49{
50 char *exit_status_str;
51
52 ft_putendl_fd("exit", STDOUT_FILENO);
53 data->exit_status = status;
54 exit_status_str = ft_itoa(data->exit_status);
55 set_shell_var(&data->shell_variables, "?", exit_status_str);
56 free(exit_status_str);
58 free_ms_data(data);
59 exit(status);
60}
61
63{
64 int number;
65
66 number = 0;
67 if (data->args[1])
68 {
69 if (ft_isnumber(data->args[1]) == 0)
70 handle_numeric_error(data, data->args[1]);
71 else if (data->args[2])
73 else
74 {
75 number = ft_atoi(data->args[1]);
76 handle_exit(data, number);
77 }
78 }
79 else
80 handle_exit(data, 0);
81 return (0);
82}
void set_shell_var(t_env **shell_var, const char *key, const char *value)
void handle_exit(t_ms_data *data, int status)
Definition exit.c:48
int builtin_exit(t_ms_data *data)
Definition exit.c:62
void handle_too_many_args_error(t_ms_data *data)
Definition exit.c:42
void clear_history_file(void)
Definition exit.c:28
void handle_numeric_error(t_ms_data *data, const char *arg)
Definition exit.c:33
#define NUMERIC_REQUIRED
Definition exit_status.h:21
#define TOO_MANY_ARGS
Definition exit_status.h:22
int ft_isnumber(char *str)
void exit_status_handler(t_ms_data *data, int status_code, char *err_arg)
Definition exit_status.c:25
char * ft_itoa(int n)
Definition ft_itoa.c:40
char * ft_strjoin(char const *s1, char const *s2)
Definition ft_strjoin.c:23
void ft_putendl_fd(char *s, int fd)
int ft_atoi(const char *str)
int exit_status
Definition shell.h:30
t_env * shell_variables
Definition shell.h:25
char ** args
Definition shell.h:23
#define HISTORY_PATH
Definition tokens.h:27
void free_ms_data(t_ms_data *data)
Definition clean.c:51