diff options
author | garhve <git@garhve.com> | 2023-01-11 09:34:14 +0800 |
---|---|---|
committer | garhve <git@garhve.com> | 2023-01-11 09:34:14 +0800 |
commit | a5ef3263fbf5b02c69ed9f26225f1d424e355c9f (patch) | |
tree | f164c8bd57dac50f73da23d3baeed68f83a25805 /c | |
parent | bcc303880f7078d612207571e196697a0d0b35bf (diff) |
tree program is usable now
Diffstat (limited to 'c')
-rw-r--r-- | c/tree/basic.c | 29 | ||||
-rw-r--r-- | c/tree/main.c | 9 |
2 files changed, 26 insertions, 12 deletions
diff --git a/c/tree/basic.c b/c/tree/basic.c index 99bb23f..f5ea53f 100644 --- a/c/tree/basic.c +++ b/c/tree/basic.c @@ -18,8 +18,6 @@ void init(regfile * head) { head->node = NULL; head->next = NULL; - - printf("Initialize done!\n"); } void empty(regfile * head) @@ -61,6 +59,18 @@ size_t strsize(const char * str) return new; } +char * concat(const char * first, const char * second) +{ + size_t len1 = strsize(first); + size_t len2 = strsize(second); + char * text = (char *) calloc (len1+len2+2, sizeof(char)); // 1 for '\0', 1 for '/' + memcpy(text,first,len1); + memcpy(text+len1,"/",1); + memcpy(text+len1+1,second,len2+1); + + return text; +} + nodes * addnodes(const char * d_name, size_t level) { nodes * new = (nodes *) calloc (1,sizeof(nodes)); @@ -99,9 +109,17 @@ void extractContent(regfile * head, const char * parent, size_t level) error("failed to open directory\n"); while ((dir = readdir(d))) { - if (dir->d_name[1] == '.' || (dir->d_name[0] == '.' && dir->d_name[1] == '\0')) + char * text = concat(parent,dir->d_name); + + if ((dir->d_name[0] == '.' && dir->d_name[1] == '.') || (dir->d_name[0] == '.' && dir->d_name[1] == '\0')) continue; - addreg(head, dir->d_name, level); + if (checkdir(text) == false) { + addreg(head, text, level); + } else { + addreg(head, text, level); + extractContent(head,text,level+1); + } + free(text); } closedir(d); } @@ -109,5 +127,6 @@ void extractContent(regfile * head, const char * parent, size_t level) void getfile(regfile * head, const char * parent) { init(head); - extractContent(head, parent, 0); + addreg(head,parent,0); + extractContent(head, parent, 1); } diff --git a/c/tree/main.c b/c/tree/main.c index 073167e..0926555 100644 --- a/c/tree/main.c +++ b/c/tree/main.c @@ -11,12 +11,7 @@ void printChild(const regfile * head) regfile * scan = head->next; while (scan != NULL) { - printf("%s\tlevel: %d\tname length: %lu\tfile or dir: ",scan->node->text, - scan->node->level, scan->node->len); - if (scan->node->fod) - printf("dir\n"); - else - printf("file\n"); + printf("%s\n",scan->node->text); scan = scan->next; } } @@ -25,7 +20,7 @@ int main() { regfile head; - getfile(&head,"."); + getfile(&head,".."); printChild(&head); |