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/tree/basic.c | |
parent | 0e89468188b9d347495dad5b98af137e5f477432 (diff) |
add files
Diffstat (limited to 'c/tree/basic.c')
-rw-r--r-- | c/tree/basic.c | 27 |
1 files changed, 17 insertions, 10 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); } - |