-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathls.c
65 lines (55 loc) · 1.71 KB
/
ls.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
#include "headers.h"
void ls(int argc, char** argv) {
optind = 0;
optarg = NULL;
optopt = 0;
int c;
int flag_a = 0, flag_l = 0, flag_error = 0;
while ((c = getopt(argc, argv, ":: a :: l ::")) != -1) {
switch(c) {
case 'a':
flag_a++;
break;
case 'l':
flag_l++;
break;
case '?':
flag_error++;
fprintf(stderr, "ls: Invalid option: '%c'\n", optopt);
break;
default:
fprintf(stderr, "ls: Usage: ls [-flags] [optional arguments]\n");
return;
}
}
if(flag_error) {
fprintf(stderr, "ls: Command execution failed due to incorrect flags. \n");
return;
}
// --------------------------------------------------------------------------------------------------------------
if(optind >= argc) {
read_details(curr_dir, flag_a, flag_l);
return;
}
char* temp = (char*) calloc(const_size, sizeof(char));
for(int i=optind; i<argc; i++) {
if(strcmp(argv[i], ".") == 0) {
printf(".:\n");
read_details(curr_dir, flag_a, flag_l);
}
else if(strcmp(argv[i], "..") == 0) {
sprintf(temp, "%s/%s", curr_dir, argv[i]);
printf("..:\n");
read_details(temp, flag_a, flag_l);
}
else if(argv[i][0] == '~') {
sprintf(temp, "%s/%s", root_dir, argv[i] + 1);
printf("%s:\n", argv[i]);
read_details(temp, flag_a, flag_l);
}
else {
printf("%s:\n", argv[i]);
read_details(argv[i], flag_a, flag_l);
}
}
}