diff options
author | garhve <git@garhve.com> | 2023-01-03 19:05:48 +0800 |
---|---|---|
committer | garhve <git@garhve.com> | 2023-01-03 19:05:48 +0800 |
commit | faa108dc5c84f5c4aecee35a2f490eeedc85cb0d (patch) | |
tree | 30193abd2dceb21aab9a536f786f959dedd018f1 /c | |
parent | 0e89468188b9d347495dad5b98af137e5f477432 (diff) |
add files
Diffstat (limited to 'c')
-rw-r--r-- | c/tree/basic.c | 27 | ||||
-rw-r--r-- | c/tree/main.c | 2 |
2 files changed, 18 insertions, 11 deletions
diff --git a/c/tree/basic.c b/c/tree/basic.c index aa95497..99bb23f 100644 --- a/c/tree/basic.c +++ b/c/tree/basic.c @@ -7,6 +7,7 @@ #include "tree.h" +// error and init and empty function void error(const char * str) { perror(str); @@ -48,27 +49,34 @@ void allocText(char ** text, const char * str, size_t len) *text = (char *) calloc (len, sizeof(char)); if (!*text) error("newly allocation failed"); - memmove(*text,str,len+1); + memmove(*text,str,len); } } -nodes * addnodes(const char * d_name, int level) +size_t strsize(const char * str) +{ + size_t new = 0; + while ( *(str+new) != '\0') + new++; + return new; +} + +nodes * addnodes(const char * d_name, size_t level) { nodes * new = (nodes *) calloc (1,sizeof(nodes)); if (!new) error("allocation for new node failed"); - new->len = strlen(d_name); + new->len = strsize(d_name); new->level = level; new->fod = checkdir(d_name); - allocText(&new->text, d_name, new->len); - allocText(&new->text, '\0', 1); + allocText(&new->text, d_name, new->len+1); return new; } -void addreg(regfile * head, const char * d_name, int level) +void addreg(regfile * head, const char * d_name, size_t level) { regfile * new = head; @@ -82,7 +90,7 @@ void addreg(regfile * head, const char * d_name, int level) new->next->next = NULL; } -void extractContent(regfile * head, const char * parent, int level) +void extractContent(regfile * head, const char * parent, size_t level) { DIR * d = opendir(parent); struct dirent * dir; @@ -93,14 +101,13 @@ void extractContent(regfile * head, const char * parent, int level) while ((dir = readdir(d))) { if (dir->d_name[1] == '.' || (dir->d_name[0] == '.' && dir->d_name[1] == '\0')) continue; - addreg(head, dir->d_name, 0); + addreg(head, dir->d_name, level); } + closedir(d); } void getfile(regfile * head, const char * parent) { init(head); - extractContent(head, parent, 0); } - diff --git a/c/tree/main.c b/c/tree/main.c index b4b3374..073167e 100644 --- a/c/tree/main.c +++ b/c/tree/main.c @@ -11,7 +11,7 @@ void printChild(const regfile * head) regfile * scan = head->next; while (scan != NULL) { - printf("%s\tlevel: %d\tname length: %u\tfile or dir: ",scan->node->text, + 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"); |