-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcommand_handlers.c
More file actions
114 lines (102 loc) · 2 KB
/
command_handlers.c
File metadata and controls
114 lines (102 loc) · 2 KB
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#include "main.h"
/**
*isBuildin - checks if cmd is building
*@data: shell data
*/
void isBuildin(shell_data *data)
{
if (_strcmp(data->input, "exit") == 0)
exitCommand(data);
else if (_strcmp(data->input, "cd") == 0)
cdCommand(data);
else if (_strcmp(data->input, "setenv") == 0)
setenvCommand(data);
else if (_strcmp(data->input, "unsetenv") == 0)
unsetenvCommand(data);
else
{
printError(data, "./shell", ": not found\n", 0);
free(data->args);
return;
}
}
/**
*cdCommand - handles cd
*@data: shell data
*/
void cdCommand(shell_data *data)
{
errno = E2BIG;
/*argument list too long*/
if (data->args[2] != NULL)
{
errorHandler(data);
freeInputArgsData(data, 1, 0, 1);
return;
}
if (cdHome(data) == 0)
return;
if (cdDirAbsolute(data) == 0)
return;
if (cdDirRelative(data) == 0)
return;
if (cdOldPwd(data) == 0)
return;
}
/**
*exitCommand - handles exit command
*@data:shell data
*/
void exitCommand(shell_data *data)
{
errno = E2BIG;
if (data->args[1] == NULL)
{
freeInputArgsData(data, 0, 0, 0);
free(data->oldpwd);
exit(data->status);
}
if (isNumber(data->args[1]) == 0)
{
printError(data, "shell", ": unrecognized argument\n", 127);
data->exitstring = 1;
freeInputArgsData(data, 1, 0, 1);
data->status = 2;
return;
}
data->status = atoi(data->args[1]);
if (data->args[2] != NULL)
{
errorHandler(data);
freeInputArgsData(data, 1, 0, 1);
return;
}
if (data->status < 0)
printError(data, "./shell", ": Illegal number\n", 255);
freeInputArgsData(data, 0, 0, 0);
free(data->oldpwd);
exit(data->status);
}
/**
*PrintEnv - prints environment
*@data:shell data
*/
void printEnv(shell_data *data)
{
int i = 0;
if (data->args[1] != NULL)
{
printError(data, "./shell", " No such file or directory\n", 127);
}
else if (strcmp(data->input, "env") == 0)
{
for (; data->_environ[i]; i++)
{
printString(data->_environ[i]);
printString("\n");
}
}
else
printError(data, "./shell", " command not found\n", 127);
free(data->args);
}