maxishell
Implementation of a shell for Linux-like systems
Loading...
Searching...
No Matches
exit.c File Reference
#include "shell.h"
#include "libft.h"
#include <stdlib.h>
#include <stdio.h>
#include "env.h"
#include "exit_status.h"
#include "tokens.h"
Include dependency graph for exit.c:

Go to the source code of this file.

Functions

void clear_history_file (void)
 
void handle_numeric_error (t_ms_data *data, const char *arg)
 
void handle_too_many_args_error (t_ms_data *data)
 
void handle_exit (t_ms_data *data, int status)
 
int builtin_exit (t_ms_data *data)
 

Function Documentation

◆ builtin_exit()

int builtin_exit ( t_ms_data data)

Definition at line 62 of file exit.c.

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 handle_exit(t_ms_data *data, int status)
Definition exit.c:48
void handle_too_many_args_error(t_ms_data *data)
Definition exit.c:42
void handle_numeric_error(t_ms_data *data, const char *arg)
Definition exit.c:33
int ft_isnumber(char *str)
int ft_atoi(const char *str)
char ** args
Definition shell.h:23

References s_ms_data::args, ft_atoi(), ft_isnumber(), handle_exit(), handle_numeric_error(), and handle_too_many_args_error().

Referenced by execute().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ clear_history_file()

void clear_history_file ( void  )

Definition at line 28 of file exit.c.

29{
30 remove(HISTORY_PATH);
31}
#define HISTORY_PATH
Definition tokens.h:27

References HISTORY_PATH.

Referenced by handle_exit(), main(), and main_loop().

Here is the caller graph for this function:

◆ handle_exit()

void handle_exit ( t_ms_data data,
int  status 
)

Definition at line 48 of file exit.c.

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}
void set_shell_var(t_env **shell_var, const char *key, const char *value)
void clear_history_file(void)
Definition exit.c:28
char * ft_itoa(int n)
Definition ft_itoa.c:40
void ft_putendl_fd(char *s, int fd)
int exit_status
Definition shell.h:30
t_env * shell_variables
Definition shell.h:25
void free_ms_data(t_ms_data *data)
Definition clean.c:51

References clear_history_file(), s_ms_data::exit_status, free_ms_data(), ft_itoa(), ft_putendl_fd(), set_shell_var(), and s_ms_data::shell_variables.

Referenced by builtin_exit().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ handle_numeric_error()

void handle_numeric_error ( t_ms_data data,
const char *  arg 
)

Definition at line 33 of file exit.c.

34{
35 char *temp_str;
36
37 temp_str = ft_strjoin("exit: ", arg);
39 exit(NUMERIC_REQUIRED);
40}
#define NUMERIC_REQUIRED
Definition exit_status.h:21
void exit_status_handler(t_ms_data *data, int status_code, char *err_arg)
Definition exit_status.c:25
char * ft_strjoin(char const *s1, char const *s2)
Definition ft_strjoin.c:23

References exit_status_handler(), ft_strjoin(), and NUMERIC_REQUIRED.

Referenced by builtin_exit().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ handle_too_many_args_error()

void handle_too_many_args_error ( t_ms_data data)

Definition at line 42 of file exit.c.

43{
45 exit(TOO_MANY_ARGS);
46}
#define TOO_MANY_ARGS
Definition exit_status.h:22

References exit_status_handler(), and TOO_MANY_ARGS.

Referenced by builtin_exit().

Here is the call graph for this function:
Here is the caller graph for this function: