-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathchangedir.c
More file actions
87 lines (86 loc) · 2.07 KB
/
changedir.c
File metadata and controls
87 lines (86 loc) · 2.07 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
#include "headers.h"
#include "changedir.h"
#include "pinfo.h"
ll sz3 = 1e4;
void cd(char *argument)
{
int fl = 0;
char *to_change_dir = (char *)malloc(sz3 * sizeof(char));
char *var = (char *)malloc(sz3 * sizeof(char));
ll k, i;
var = strtok(argument, " \t");
char *to_change_dir_absolute = (char *)malloc(sz3 * sizeof(char));
k = 0;
if (var != NULL)
{
strcpy(to_change_dir, var);
k = strlen(to_change_dir);
var = strtok(NULL, " \t");
if (var != NULL)
{
printf("\x1B[1;31mEnter 1 argument at max!!!\n\x1B[0m");
prestat = 'f';
return;
}
else
{
if (strcmp(to_change_dir, "-") == 0)
{
strcpy(to_change_dir, dirprev);
fl = 1;
}
}
}
else
{
to_change_dir[0] = '~';
to_change_dir[1] = '\0';
}
if (to_change_dir != NULL && to_change_dir[0] == '~')
{
strcpy(to_change_dir_absolute, home);
ll var = strlen(to_change_dir_absolute);
i = 1;
while (i < k)
{
to_change_dir_absolute[var + i - 1] = to_change_dir[i];
i++;
}
strcpy(to_change_dir, to_change_dir_absolute);
}
if (to_change_dir == NULL)
{
strcpy(to_change_dir, home);
}
ll flag = 0;
flag = chdir(to_change_dir); // 0 if success
if (flag == -1)
{
perror("\x1B[1;31mError \x1B[0m");
prestat = 'f';
}
else
{
strcpy(dirprev, dirnow);
char *cwdir = (char *)malloc(1000 * sizeof(char));
getcwd(cwdir, 1000 - 5);
if (cwdir != NULL)
{
strcpy(dirnow, cwdir);
}
if (fl == 1)
{
if (cwdir == NULL)
{
printf("\x1B[1;31mError getting the directory path\n\x1B[0m");
prestat = 'f';
return;
}
else
{
modify2(cwdir);
printf("%s\n", cwdir);
}
}
}
}