-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathexit_shell.c
70 lines (65 loc) · 1.83 KB
/
exit_shell.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#include "main.h"
/**
* exit_shell - shell exit function
* @prompt_count: keeps count of prompt loop
* @exe: executable file name
* @arg_count: custom argument count
* @arg_vector: custom argument vector
* @line_buffer: line_buffer parameter
* @line_buffer_dup: line buffer duplicate parameter
*/
void exit_shell(int prompt_count, char *exe, int arg_count, char **arg_vector,
char *line_buffer, char *line_buffer_dup)
{
int exit_status = 0;
int i = 0;
/* duplicate and tokenise the line_buffer arguments */
dup_args(line_buffer, &line_buffer_dup);
tok_args(line_buffer, line_buffer_dup, &arg_count, &arg_vector);
/* Check if there is a status parameter */
if ((arg_count > 1) && (arg_vector[1] != NULL))
{
while (arg_vector[1][i] != '\0')
{
if (_isdigit(arg_vector[1][i]) == 0) /* is an alpha */
{
exit_err(exe, prompt_count, arg_vector,
line_buffer, line_buffer_dup);
}
i++;
}
exit_status = _atoi(arg_vector[1]); /* convert to int */
if (exit_status < 0)
{
exit_err(exe, prompt_count, arg_vector, line_buffer, line_buffer_dup);
}
else
{
free_mem(arg_vector, line_buffer, line_buffer_dup);
exit(exit_status);
}
}
else
{
free_mem(arg_vector, line_buffer, line_buffer_dup);
exit(exit_status);
}
}
/**
* exit_err - path err catch function
* @exe: executable file name
* @prompt_count: keeps count of prompt loop
* @arg_vector: custom argument vector
* @line_buffer: line_buffer parameter to be freed on failure
* @line_buffer_dup: line_buffer_dup parameter to be freed on failure
* Return: Success (0)
*/
int exit_err(char *exe, int prompt_count,
char **arg_vector, char *line_buffer, char *line_buffer_dup)
{
_printf("%s: %d: %s: Illegal number: %s\n",
exe, prompt_count, arg_vector[0], arg_vector[1]);
free_mem(arg_vector, line_buffer, line_buffer_dup);
exit(2);
return (0);
}