diff --git a/Makefile b/Makefile index b1ffdef..498cb32 100644 --- a/Makefile +++ b/Makefile @@ -79,4 +79,4 @@ clean: rm -rf *.a *.so src/*.o $(MAKE) -C test clean -.PHONY: all clean install +.PHONY: all clean install test diff --git a/include/bytes.h b/include/bytes.h index 320b3a6..23f687b 100644 --- a/include/bytes.h +++ b/include/bytes.h @@ -39,9 +39,9 @@ int load_u16(FILE *stream, u16 *num); int store_u16(FILE *stream, u16 *num); -int load_u32(FILE *stream, u32 num); -int store_u32(FILE *stream, u32 num); -int load_u64(FILE *stream, u64 num); -int store_u64(FILE *stream, u64 num); +int load_u32(FILE *stream, u32 *num); +int store_u32(FILE *stream, u32 *num); +int load_u64(FILE *stream, u64 *num); +int store_u64(FILE *stream, u64 *num); #endif diff --git a/src/bytes.c b/src/bytes.c index b465ddc..06f3899 100644 --- a/src/bytes.c +++ b/src/bytes.c @@ -46,84 +46,84 @@ int store_u16(FILE *stream, u16 *num) { return fwrite(&num->bytes, 1, 2, stream); } -int load_u32(FILE *stream, u32 num) { - return fread(num.bytes, 1, 4, stream); +int load_u32(FILE *stream, u32 *num) { + return fread(&num->bytes, 1, 4, stream); } -int store_u32(FILE *stream, u32 num) { - return fwrite(num.bytes, 1, 4, stream); +int store_u32(FILE *stream, u32 *num) { + return fwrite(&num->bytes, 1, 4, stream); } -int load_u64(FILE *stream, u64 num) { - return fread(num.bytes, 1, 8, stream); +int load_u64(FILE *stream, u64 *num) { + return fread(&num->bytes, 1, 8, stream); } -int store_u64(FILE *stream, u64 num) { - return fwrite(num.bytes, 1, 8, stream); +int store_u64(FILE *stream, u64 *num) { + return fwrite(&num->bytes, 1, 8, stream); } #else -int load_u16(FILE *stream, u16 num) { +int load_u16(FILE *stream, u16 *num) { u8 buf[2]; int res = fread(buf, 1, 2, stream); if (res != 2) return res; - num.bytes[0] = buf[1]; - num.bytes[1] = buf[0]; + num->bytes[0] = buf[1]; + num->bytes[1] = buf[0]; return res; } -int store_u16(FILE * stream, u16 num) { +int store_u16(FILE * stream, u16 *num) { u8 buf[2]; - buf[0] = num.bytes[1]; - buf[1] = num.bytes[0]; + buf[0] = num->bytes[1]; + buf[1] = num->bytes[0]; return fwrite(buf, 1, 2, stream); } -int load_u32(FILE *stream, u32 num) { +int load_u32(FILE *stream, u32 *num) { u8 buf[4]; int res = fread(buf, 1, 4, stream); if (res != 4) return res; - num.bytes[0] = buf[3]; - num.bytes[1] = buf[2]; - num.bytes[2] = buf[1]; - num.bytes[3] = buf[0]; + num->bytes[0] = buf[3]; + num->bytes[1] = buf[2]; + num->bytes[2] = buf[1]; + num->bytes[3] = buf[0]; } -int store_u32(FILE *stream, u32 num) { +int store_u32(FILE *stream, u32 *num) { u8 buf[4]; - buf[0] = num.bytes[3]; - buf[1] = num.bytes[2]; - buf[2] = num.bytes[1]; - buf[3] = num.bytes[0]; + buf[0] = num->bytes[3]; + buf[1] = num->bytes[2]; + buf[2] = num->bytes[1]; + buf[3] = num->bytes[0]; return fwrite(buf, 1, 2, stream); } -int load_u64(FILE *stream, u64 num) { +int load_u64(FILE *stream, u64 *num) { u8 buf[8]; int res = fread(buf, 1, 8, stream); if (res != 8) return res; - num.bytes[0] = buf[7]; - num.bytes[1] = buf[6]; - num.bytes[2] = buf[5]; - num.bytes[3] = buf[4]; - num.bytes[4] = buf[3]; - num.bytes[5] = buf[2]; - num.bytes[6] = buf[1]; - num.bytes[7] = buf[0]; + num->bytes[0] = buf[7]; + num->bytes[1] = buf[6]; + num->bytes[2] = buf[5]; + num->bytes[3] = buf[4]; + num->bytes[4] = buf[3]; + num->bytes[5] = buf[2]; + num->bytes[6] = buf[1]; + num->bytes[7] = buf[0]; } -int store_u64(FILE *stream, u64 num) { +int store_u64(FILE *stream, u64 *num) { u8 buf[8]; - buf[0] = num.bytes[7]; - buf[1] = num.bytes[6]; - buf[2] = num.bytes[5]; - buf[3] = num.bytes[4]; - buf[4] = num.bytes[3]; - buf[5] = num.butes[2]; - buf[6] = num.bytes[1]; - buf[7] = num.bytes[0]; + buf[0] = num->bytes[7]; + buf[1] = num->bytes[6]; + buf[2] = num->bytes[5]; + buf[3] = num->bytes[4]; + buf[4] = num->bytes[3]; + buf[5] = num->butes[2]; + buf[6] = num->bytes[1]; + buf[7] = num->bytes[0]; return fwrite(buf, 1, 2, stream); } #endif diff --git a/src/haggis.c b/src/haggis.c index 99a3b09..73df9f3 100644 --- a/src/haggis.c +++ b/src/haggis.c @@ -331,7 +331,7 @@ void haggis_file_deinit(haggis_file *f) { } int haggis_store_file(FILE *stream, haggis_file *file) { - if (store_u64(stream, file->len) != 8) + if (store_u64(stream, &file->len) != 8) return 1; if (haggis_store_cksum(stream, &file->cksum) != 0) return 1; @@ -342,7 +342,7 @@ int haggis_store_file(FILE *stream, haggis_file *file) { } int haggis_load_file(FILE *stream, haggis_file *f) { - if (load_u64(stream, f->len) != 8) + if (load_u64(stream, &f->len) != 8) return 1; if (haggis_load_cksum(stream, &f->cksum) != 0) return 1; @@ -636,13 +636,13 @@ int haggis_load_node(FILE *stream, haggis_node *node) { res = haggis_load_filename(stream, &node->name); if (res) return res; - res = load_u32(stream, node->uid); + res = load_u32(stream, &node->uid); if (res != 4) return 2; - res = load_u32(stream, node->gid); + res = load_u32(stream, &node->gid); if (res != 4) return 2; - res = load_u64(stream, node->mtime); + res = load_u64(stream, &node->mtime); if (res != 8) return 2; res = load_u16(stream, &mode); @@ -662,9 +662,9 @@ int haggis_store_node(FILE *stream, haggis_node *node) { if (haggis_store_filename(stream, &node->name) != (size_t)(node->name.len.val) + 2) return 2; - if (store_u32(stream, node->uid) != 4) return 2; - if (store_u32(stream, node->gid) != 4) return 2; - if (store_u64(stream, node->mtime) != 8) return 2; + if (store_u32(stream, &node->uid) != 4) return 2; + if (store_u32(stream, &node->gid) != 4) return 2; + if (store_u64(stream, &node->mtime) != 8) return 2; mode = haggis_derive_mode(node->mode, &node->filetype); if (store_u16(stream, &mode) != 2) return 2; return haggis_store_filetype(stream, &node->filetype); diff --git a/test/Makefile b/test/Makefile index d90d555..8f8e92b 100644 --- a/test/Makefile +++ b/test/Makefile @@ -36,6 +36,10 @@ LIBS += -lmd tests += store_u16 tests += load_u16 +tests += store_u32 +tests += load_u32 +tests += store_u64 +tests += load_u64 tests += store_header tests += check_header tests += store_device @@ -50,7 +54,7 @@ tests += init_file_md5 tests += init_file_sha1 tests += init_file_sha256 tests += store_file_md5 -#tests += load_file_md5 +tests += load_file_md5 total != echo $(tests) | wc -w | awk '{ print $$1 }' .PHONY: test diff --git a/test/load_file_md5 b/test/load_file_md5 deleted file mode 100755 index 627f1ba..0000000 Binary files a/test/load_file_md5 and /dev/null differ diff --git a/test/load_file_md5.c b/test/load_file_md5.c index 66ea029..f24cff3 100644 --- a/test/load_file_md5.c +++ b/test/load_file_md5.c @@ -12,5 +12,5 @@ int main() { fd = fopen(f, "r"); res = haggis_load_file(fd, &hf); fclose(fd); - return 1; + return res; } diff --git a/test/load_md5.c b/test/load_md5.c index 0892356..98fb275 100644 --- a/test/load_md5.c +++ b/test/load_md5.c @@ -15,4 +15,5 @@ int main() { for (i = 0; i < 16; i++) { assert(cksum.sum.md5[i] == (uint8_t)i); } + fclose(f); } diff --git a/test/load_sha1.c b/test/load_sha1.c index fcfbe77..d98e3ef 100644 --- a/test/load_sha1.c +++ b/test/load_sha1.c @@ -15,5 +15,6 @@ int main() { for (i = 0; i < 20; i++) { assert(cksum.sum.sha1[i] == (uint8_t)i); } + fclose(f); } diff --git a/test/load_sha256.c b/test/load_sha256.c index b2c2c17..6a35380 100644 --- a/test/load_sha256.c +++ b/test/load_sha256.c @@ -15,6 +15,6 @@ int main() { for (i = 0; i < 32; i++) { assert(cksum.sum.sha1[i] == (uint8_t)i); } + fclose(f); } - diff --git a/test/load_u32.c b/test/load_u32.c new file mode 100644 index 0000000..1e272e0 --- /dev/null +++ b/test/load_u32.c @@ -0,0 +1,16 @@ +#include "bytes.h" +#include "haggis_private.h" +#include +#include + +int main() { + u32 n; + FILE *fd; + + n.val = 0; + fd = fopen("output/u32", "r"); + assert(load_u32(fd, &n) == 4); + assert(n.val == 123456); + fclose(fd); +} + diff --git a/test/load_u64.c b/test/load_u64.c new file mode 100644 index 0000000..c075158 --- /dev/null +++ b/test/load_u64.c @@ -0,0 +1,16 @@ +#include "bytes.h" +#include "haggis_private.h" +#include +#include + +int main() { + u64 n; + FILE *fd; + + n.val = 0; + fd = fopen("output/u64", "r"); + assert(load_u64(fd, &n) == 8); + assert(n.val == 1234567890); + fclose(fd); +} + diff --git a/test/store_device.c b/test/store_device.c index 0406e0e..bd3a62b 100644 --- a/test/store_device.c +++ b/test/store_device.c @@ -10,6 +10,7 @@ int main() { dev.minor.val = 69; f = fopen("output/device", "w"); ret = haggis_store_device(f, &dev); + fflush(f); fclose(f); return ret; } diff --git a/test/store_file_md5.c b/test/store_file_md5.c index 4fa1efd..c8ca693 100644 --- a/test/store_file_md5.c +++ b/test/store_file_md5.c @@ -11,6 +11,7 @@ int main() { assert(haggis_file_init(f, &hf, md5) == 0); fd = fopen("output/store_file_md5", "w"); assert(haggis_store_file(fd, &hf) == 0); + fflush(fd); fclose(fd); return 0; } diff --git a/test/store_header.c b/test/store_header.c index 580a8c1..6f89810 100644 --- a/test/store_header.c +++ b/test/store_header.c @@ -7,6 +7,7 @@ int main() { f = fopen("output/header", "w"); ret = haggis_store_header(f); + fflush(f); fclose(f); return ret; } diff --git a/test/store_u32.c b/test/store_u32.c new file mode 100644 index 0000000..6000757 --- /dev/null +++ b/test/store_u32.c @@ -0,0 +1,17 @@ +#include "bytes.h" +#include "haggis_private.h" +#include +#include +#include + +int main() { + u32 n; + FILE *fd; + + n.val = 123456; + fd = fopen("output/u32", "w"); + assert(store_u32(fd, &n) == 4); + fflush(fd); + fclose(fd); +} + diff --git a/test/store_u64.c b/test/store_u64.c new file mode 100644 index 0000000..af72acd --- /dev/null +++ b/test/store_u64.c @@ -0,0 +1,17 @@ +#include "bytes.h" +#include "haggis_private.h" +#include +#include +#include + +int main() { + u64 n; + FILE *fd; + + n.val = 1234567890; + fd = fopen("output/u64", "w"); + assert(store_u64(fd, &n) == 8); + fflush(fd); + fclose(fd); +} +