summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgarhve <git@garhve.com>2023-01-11 09:34:14 +0800
committergarhve <git@garhve.com>2023-01-11 09:34:14 +0800
commita5ef3263fbf5b02c69ed9f26225f1d424e355c9f (patch)
treef164c8bd57dac50f73da23d3baeed68f83a25805
parentbcc303880f7078d612207571e196697a0d0b35bf (diff)
tree program is usable now
-rw-r--r--c/tree/basic.c29
-rw-r--r--c/tree/main.c9
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);