Add create_dir_node test

This commit is contained in:
Nathan Fisher 2023-09-13 16:41:59 -04:00
parent 37d0668a2f
commit 3cc22ed428
3 changed files with 40 additions and 22 deletions

View file

@ -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);

View file

@ -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 }'

17
test/create_dir_node.c Normal file
View file

@ -0,0 +1,17 @@
#include <assert.h>
#include <stdio.h>
#include <string.h>
#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);
}