diff --git a/haggis.c b/haggis.c index b1b97b3..e033f60 100644 --- a/haggis.c +++ b/haggis.c @@ -520,31 +520,31 @@ void haggis_node_deinit(haggis_node *node) { } haggis_node* haggis_create_node(char *file, haggis_algorithm a, haggis_linkmap *map) { - struct stat *st = NULL; u16 mode; char *target; char pathbuf[PATH_MAX]; int res; size_t namlen; haggis_node *node; + struct stat st; node = calloc(1, sizeof(haggis_node)); if (node == NULL) return NULL; - if (stat(file, st) != 0) { + if (stat(file, &st) != 0) { free(node); return NULL; } - if (S_ISBLK(st->st_mode)) { + if (S_ISBLK(st.st_mode)) { node->filetype.tag = block; - } else if (S_ISCHR(st->st_mode)) { + } else if (S_ISCHR(st.st_mode)) { node->filetype.tag = character; - } else if (S_ISDIR(st->st_mode)) { + } else if (S_ISDIR(st.st_mode)) { node->filetype.tag = directory; - } else if (S_ISFIFO(st->st_mode)) { + } else if (S_ISFIFO(st.st_mode)) { node->filetype.tag = fifo; - } else if (S_ISLNK(st->st_mode)) { + } else if (S_ISLNK(st.st_mode)) { node->filetype.tag = softlink; - } else if (S_ISREG(st->st_mode)) { + } else if (S_ISREG(st.st_mode)) { node->filetype.tag = normal; } else { free(node); @@ -563,15 +563,15 @@ haggis_node* haggis_create_node(char *file, haggis_algorithm a, haggis_linkmap * return NULL; } node->name.len.val = (uint16_t)namlen; - node->uid.val = (uint32_t)st->st_uid; - node->gid.val = (uint32_t)st->st_gid; - node->mtime.val = (uint64_t)st->st_mtim.tv_sec; - mode.val = (uint16_t)(st->st_mode & 07777); + node->uid.val = (uint32_t)st.st_uid; + node->gid.val = (uint32_t)st.st_gid; + node->mtime.val = (uint64_t)st.st_mtim.tv_sec; + mode.val = (uint16_t)(st.st_mode & 07777); node->mode = mode; switch (node->filetype.tag) { case normal: - if (st->st_nlink > 1) { - target = haggis_linkmap_get_or_add(map, st->st_ino, file); + if (st.st_nlink > 1) { + target = haggis_linkmap_get_or_add(map, st.st_ino, file); if (target != NULL) { node->filetype.tag = hardlink; haggis_filename_init(target, &node->filetype.f_type.target); @@ -585,30 +585,30 @@ haggis_node* haggis_create_node(char *file, haggis_algorithm a, haggis_linkmap * } break; case block: - if (st->st_nlink > 1) { - target = haggis_linkmap_get_or_add(map, st->st_ino, file); + if (st.st_nlink > 1) { + target = haggis_linkmap_get_or_add(map, st.st_ino, file); if (target != NULL) { node->filetype.tag = hardlink; haggis_filename_init(target, &node->filetype.f_type.target); return node; } } - haggis_device_init(st->st_rdev, &node->filetype.f_type.dev); + haggis_device_init(st.st_rdev, &node->filetype.f_type.dev); break; case character: - if (st->st_nlink > 1) { - target = haggis_linkmap_get_or_add(map, st->st_ino, file); + if (st.st_nlink > 1) { + target = haggis_linkmap_get_or_add(map, st.st_ino, file); if (target != NULL) { node->filetype.tag = hardlink; haggis_filename_init(target, &node->filetype.f_type.target); return node; } } - haggis_device_init(st->st_rdev, &node->filetype.f_type.dev); + haggis_device_init(st.st_rdev, &node->filetype.f_type.dev); break; case fifo: - if (st->st_nlink > 1) { - target = haggis_linkmap_get_or_add(map, st->st_ino, file); + if (st.st_nlink > 1) { + target = haggis_linkmap_get_or_add(map, st.st_ino, file); if (target != NULL) { node->filetype.tag = hardlink; haggis_filename_init(target, &node->filetype.f_type.target); diff --git a/test/Makefile b/test/Makefile index f18f81a..522c5cf 100644 --- a/test/Makefile +++ b/test/Makefile @@ -65,6 +65,7 @@ tests += fnv1a_hash_inode tests += fnv1a_hash_str tests += linkmap_init tests += linkmap_put +tests += create_dir_node total != echo $(tests) | wc -w | awk '{ print $$1 }' diff --git a/test/create_dir_node.c b/test/create_dir_node.c new file mode 100644 index 0000000..be495d5 --- /dev/null +++ b/test/create_dir_node.c @@ -0,0 +1,17 @@ +#include +#include +#include + +#include "haggis.h" + +int main() { + haggis_linkmap *map; + haggis_node *node; + char *path = "output"; + + map = haggis_linkmap_init(); + assert(map != NULL); + node = haggis_create_node(path, sha256, map); + assert(node->filetype.tag == directory); + assert(memcmp(path, node->name.name, 6) == 0); +} \ No newline at end of file