-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathinit.c
88 lines (76 loc) · 1.92 KB
/
init.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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#include "header.h"
#define FLAGUSAGE "usage: ls [-atlrR] [file ...]"
extern flags g_flag;
void setFunctions(void)
{
makeFileString = (g_flag.l) ? fileLongMake : fileShortMake;
if (g_flag.r && g_flag.t) // Dispatch table for functions?
compare = byTimeRev;
else if (g_flag.r)
compare = byNameRev;
else if (g_flag.t)
compare = byTime;
else
compare = byName;
}
static void parseFlag(char *arg)
{
int n;
n = 0;
while(arg[++n])
{
if (arg[n] == 'a')
g_flag.a = TRUE;
else if (arg[n] == 't')
g_flag.t = TRUE;
else if (arg[n] == 'r')
g_flag.r = TRUE;
else if (arg[n] == 'R')
g_flag.R = TRUE;
else if (arg[n] == 'l')
g_flag.l = TRUE;
else {
printf("ls: illegal option -- %c\n%s", arg[n], FLAGUSAGE);
exit(EXIT_FAILURE);
}
}
}
char **parseArgs(char **args)
{
int n;
n = 0;
while(args[++n])
{
if (args[n][0] == '-' && nc_strlen(args[n]) > 1)
parseFlag(args[n]);
else
return(&args[n]);
}
args[0][0] = '.';
args[0][1] = '\0';
args[1] = NULL;
return args;
}
static void initArgsStruct(seperated_arguments *tmp)
{
tmp->trash = makeListHead();
tmp->files = makeListHead();
tmp->dirs = makeListHead();
}
seperated_arguments separateArgs(char **argv)
{
seperated_arguments splitArgs;
struct stat statInfo;
initArgsStruct(&splitArgs);
while(*argv)
{
if ((lstat(*argv, &statInfo)) < 0)
lstAddSorted(splitArgs.trash, newNode(strdup(*argv)), stringByName);
else if (S_ISDIR(statInfo.st_mode))
addToListSorted(splitArgs.dirs, makeInfoStruct(NULL, *argv));
else
addToListSorted(splitArgs.files, makeInfoStruct(NULL, *argv));
argv++;
}
return splitArgs;
}