-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathcd_execute.c
More file actions
115 lines (105 loc) · 1.89 KB
/
cd_execute.c
File metadata and controls
115 lines (105 loc) · 1.89 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
115
#include "shell.h"
/**
* cd_exec - execute
* @env: environment
* @curr: cwd
* @directory: path changer
* @s: string
* @num: number
* Return: 0 or 2
*/
int cd_exec(list_t **env, char *directory, char *curr, char *s, int num)
{
int j = 0;
if (access(directory, F_OK) == 0)
{
cd_setenv(env, "OLDPWD", curr);
free(curr);
chdir(directory);
curr = NULL;
curr = getcwd(curr, 0);
cd_setenv(env, "PWD", curr);
free(curr);
}
else
{
_cd_to(s, num, env);
free(curr);
j = 2;
}
return (j);
}
/**
* ch_cd - change directory
* @s: string
* @num: number
* @env: environment
* Return: 0 or 2
*/
int ch_cd(char **s, list_t **env, int num)
{
char *direct = NULL;
char *curr = NULL;
int exit_st = 0;
curr = getcwd(curr, 0);
if (s[1] != NULL)
{
if (s[1][0] == '~')
{
direct = h_getenv("HOME", env);
direct = concat_str(direct, s[1]);
}
else if (s[1][0] == '-')
{
if (s[1][1] == '\0')
direct = h_getenv("OLDPWD", env);
}
else
{
if (s[1][0] != '/')
{
direct = getcwd(direct, 0);
direct = _strcat(direct, "/");
direct = _strcat(direct, s[1]);
}
else
direct = _strdup(s[1]);
}
exit_st = cd_exec(env, curr, direct, s[1], num);
free(direct);
}
else
cd_home(env, curr);
sh_free_double_ptr(s);
return (exit_st);
}
/**
* _cd_to - print error
* @s: string
* @cmd: typed command
* @env: environment
*/
void _cd_to(char *s, int cmd, list_t **env)
{
int sum = 0;
char *hsh = NULL, *number;
hsh = h_getenv("_", env);
while (hsh[sum] != '\0')
sum++;
write(STDOUT_FILENO, hsh, sum);
free(hsh);
write(STDOUT_FILENO, ": ", 2);
number = int_string(cmd);
sum = 0;
while (number[sum] != '\0')
sum++;
write(STDOUT_FILENO, number, sum);
free(number);
write(STDOUT_FILENO, ": ", 2);
write(STDOUT_FILENO, "cd: can't cd ", 14);
sum = 0;
while (s[sum] != '\0')
sum++;
write(STDOUT_FILENO, s, sum);
write(STDOUT_FILENO, "\n", 1);
}