summaryrefslogtreecommitdiff
path: root/c/tree
diff options
context:
space:
mode:
Diffstat (limited to 'c/tree')
-rw-r--r--c/tree/basic.c27
-rw-r--r--c/tree/main.c2
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");