From 82f8fdc736509dffda54b177f422cde1816e4a1c Mon Sep 17 00:00:00 2001 From: Nathan Fisher Date: Fri, 28 Jul 2023 18:39:30 -0400 Subject: [PATCH] Use `typedef`'s for custom types to make code less cluttered --- include/bytes.h | 12 +++---- include/haggis.h | 93 +++++++++++++++++++++++++----------------------- src/bytes.c | 24 ++++++------- src/haggis.c | 54 +++++++++++++--------------- 4 files changed, 91 insertions(+), 92 deletions(-) diff --git a/include/bytes.h b/include/bytes.h index 0e58ee8..70d1d51 100644 --- a/include/bytes.h +++ b/include/bytes.h @@ -38,11 +38,11 @@ #include "haggis.h" -int load_u16(FILE *stream, union u16 num); -int store_u16(FILE *stream, union u16 num); -int load_u32(FILE *stream, union u32 num); -int store_u32(FILE *stream, union u32 num); -int load_u64(FILE *stream, union u64 num); -int store_u64(FILE *stream, union u64 num); +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); #endif diff --git a/include/haggis.h b/include/haggis.h index 2e25153..454b85c 100644 --- a/include/haggis.h +++ b/include/haggis.h @@ -38,56 +38,59 @@ typedef uint8_t u8; -union u16 { +union _u16 { uint16_t val; u8 bytes[2]; }; +typedef union _u16 u16; -union u32 { +union _u32 { uint32_t val; u8 bytes[4]; }; +typedef union _u32 u32; -union u64 { +union _u64 { uint64_t val; u8 bytes[8]; }; +typedef union _u64 u64; -struct haggis_device { - union u32 major; - union u32 minor; -}; +typedef struct { + u32 major; + u32 minor; +} haggis_device; -enum haggis_algorithm { +typedef enum { md5, sha1, sha256, skip, -}; +} haggis_algorithm; -union haggis_sum { +typedef union { u8 md5[16]; u8 sha1[20]; u8 sha256[32]; -}; +} haggis_sum; -struct haggis_checksum { - enum haggis_algorithm tag; - union haggis_sum *sum; -}; +typedef struct { + haggis_algorithm tag; + haggis_sum *sum; +} haggis_checksum; -struct haggis_file { - union u64 len; - struct haggis_checksum *cksum; +typedef struct { + u64 len; + haggis_checksum *cksum; u8 *data; -}; +} haggis_file; -struct haggis_filename { - union u16 len; +typedef struct { + u16 len; char *name; -}; +} haggis_filename; -enum haggis_typeflag { +typedef enum { normal, hardlink, softlink, @@ -96,31 +99,31 @@ enum haggis_typeflag { block, fifo, eof, -}; +} haggis_typeflag; -union haggis_ft { - struct haggis_file *file; - struct haggis_filename *target; - struct haggis_device *dev; -}; +typedef union { + haggis_file *file; + haggis_filename *target; + haggis_device *dev; +} haggis_ft; -struct haggis_filetype { - enum haggis_typeflag tag; - union haggis_ft *f_type; -}; +typedef struct { + haggis_typeflag tag; + haggis_ft *f_type; +} haggis_filetype; -struct haggis_node { - struct haggis_filename *name; - union u32 uid; - union u32 gid; - union u64 mtime; - union u16 mode; - struct haggis_filetype *filetype; -}; +typedef struct { + haggis_filename *name; + u32 uid; + u32 gid; + u64 mtime; + u16 mode; + haggis_filetype *filetype; +} haggis_node; -struct haggis_node* haggis_create_node(char *file); -int haggis_extract_node(FILE *stram, struct haggis_node *node); -int haggis_load_node(FILE *stream, struct haggis_node *node); -int haggis_store_node(FILE *stream, struct haggis_node *node); +haggis_node* haggis_create_node(char *file); +int haggis_extract_node(FILE *stram, haggis_node *node); +int haggis_load_node(FILE *stream, haggis_node *node); +int haggis_store_node(FILE *stream, haggis_node *node); #endif // !HAGGIS_H diff --git a/src/bytes.c b/src/bytes.c index f1ad7c5..af07dac 100644 --- a/src/bytes.c +++ b/src/bytes.c @@ -38,31 +38,31 @@ #include "haggis.h" #if __BYTE_ORDER__ == __LITTLE_ENDIAN -int load_u16(FILE *stream, union u16 num) { +int load_u16(FILE *stream, u16 num) { return fread(num.bytes, 1, 2, stream); } -int store_u16(FILE *stream, union u16 num) { +int store_u16(FILE *stream, u16 num) { return fwrite(num.bytes, 1, 2, stream); } -int load_u32(FILE *stream, union u32 num) { +int load_u32(FILE *stream, u32 num) { return fread(num.bytes, 1, 4, stream); } -int store_u32(FILE *stream, union u32 num) { +int store_u32(FILE *stream, u32 num) { return fwrite(num.bytes, 1, 4, stream); } -int load_u64(FILE *stream, union u64 num) { +int load_u64(FILE *stream, u64 num) { return fread(num.bytes, 1, 8, stream); } -int store_u64(FILE *stream, union u64 num) { +int store_u64(FILE *stream, u64 num) { return fwrite(num.bytes, 1, 8, stream); } #else -int load_u16(FILE *stream, union u16 num) { +int load_u16(FILE *stream, u16 num) { u8 buf[2]; int res = fread(buf, 1, 2, stream); if (res != 2) @@ -72,14 +72,14 @@ int load_u16(FILE *stream, union u16 num) { return res; } -int store_u16(FILE * stream, union u16 num) { +int store_u16(FILE * stream, u16 num) { u8 buf[2]; buf[0] = num.bytes[1]; buf[1] = num.bytes[0]; return fwrite(buf, 1, 2, stream); } -int load_u32(FILE *stream, union u32 num) { +int load_u32(FILE *stream, u32 num) { u8 buf[4]; int res = fread(buf, 1, 4, stream); if (res != 4) @@ -90,7 +90,7 @@ int load_u32(FILE *stream, union u32 num) { num.bytes[3] = buf[0]; } -int store_u32(FILE *stream, union u32 num) { +int store_u32(FILE *stream, u32 num) { u8 buf[4]; buf[0] = num.bytes[3]; buf[1] = num.bytes[2]; @@ -99,7 +99,7 @@ int store_u32(FILE *stream, union u32 num) { return fwrite(buf, 1, 2, stream); } -int load_u64(FILE *stream, union u64 num) { +int load_u64(FILE *stream, u64 num) { u8 buf[8]; int res = fread(buf, 1, 8, stream); if (res != 8) @@ -114,7 +114,7 @@ int load_u64(FILE *stream, union u64 num) { num.bytes[7] = buf[0]; } -int store_u64(FILE *stream, union u64 num) { +int store_u64(FILE *stream, u64 num) { u8 buf[8]; buf[0] = num.bytes[7]; buf[1] = num.bytes[6]; diff --git a/src/haggis.c b/src/haggis.c index 31e6974..ca9f73c 100644 --- a/src/haggis.c +++ b/src/haggis.c @@ -70,7 +70,7 @@ int haggis_check_header(FILE *stream) { return 1; } -int haggis_store_device(FILE *stream, struct haggis_device *dev) { +int haggis_store_device(FILE *stream, haggis_device *dev) { if (fwrite(dev->major.bytes, 1, 4, stream) != 4) return 1; if (fwrite(dev->minor.bytes, 1, 4, stream) != 4) @@ -78,7 +78,7 @@ int haggis_store_device(FILE *stream, struct haggis_device *dev) { return 0; } -int haggis_load_device(FILE *stream, union haggis_ft *ft) { +int haggis_load_device(FILE *stream, haggis_ft *ft) { if (fread(ft->dev->major.bytes, 1, 4, stream) != 4) return 1; if (fread(ft->dev->minor.bytes, 1, 4, stream) != 4) @@ -86,7 +86,7 @@ int haggis_load_device(FILE *stream, union haggis_ft *ft) { return 0; } -int haggis_store_cksum(FILE *stream, struct haggis_checksum *cksum) { +int haggis_store_cksum(FILE *stream, haggis_checksum *cksum) { u8 flag; switch (cksum->tag) { @@ -120,7 +120,7 @@ int haggis_store_cksum(FILE *stream, struct haggis_checksum *cksum) { return 0; } -int haggis_load_cksum(FILE *stream, struct haggis_checksum *cksum) { +int haggis_load_cksum(FILE *stream, haggis_checksum *cksum) { u8 flag; if (fread(&flag, 1, 1, stream) != 1) @@ -148,7 +148,7 @@ int haggis_load_cksum(FILE *stream, struct haggis_checksum *cksum) { return 0; } -int validate_md5(struct haggis_file *file) { +int validate_md5(haggis_file *file) { MD5_CTX ctx; u8 digest[16]; @@ -161,7 +161,7 @@ int validate_md5(struct haggis_file *file) { } #if defined(__FreeBSD__) || defined(__DragonFly__) -int validate_sha1(struct haggis_file *file) { +int validate_sha1(haggis_file *file) { SHA1_CTX ctx; u8 digest[20]; @@ -173,7 +173,7 @@ int validate_sha1(struct haggis_file *file) { return 0; } #elif defined(__linux__) || defined(__NetBSD__) || defined(__OpenBSD__) -int validate_sha1(struct haggis_file *file) { +int validate_sha1(haggis_file *file) { SHA1_CTX ctx; u8 digest[20]; @@ -187,7 +187,7 @@ int validate_sha1(struct haggis_file *file) { #endif /* if defined (__FreeBSD__) */ #if defined(__FreeBSD__) || defined(__DragonFly) || defined(__NetBSD__) -int validate_sha256(struct haggis_file *file) { +int validate_sha256(haggis_file *file) { SHA256_CTX ctx; u8 digest[32]; @@ -199,7 +199,7 @@ int validate_sha256(struct haggis_file *file) { return 0; } #elif defined(__linux__) || defined(__OpenBSD__) -int validate_sha256(struct haggis_file *file) { +int validate_sha256(haggis_file *file) { SHA2_CTX ctx; u8 digest[32]; @@ -212,7 +212,7 @@ int validate_sha256(struct haggis_file *file) { } #endif /* if defined (__FreeBSD__) */ -int haggis_validate_cksum(struct haggis_file *file) { +int haggis_validate_cksum(haggis_file *file) { switch (file->cksum->tag) { case md5: return validate_md5(file); @@ -226,7 +226,7 @@ int haggis_validate_cksum(struct haggis_file *file) { return 0; } -int haggis_store_file(FILE *stream, struct haggis_file *file) { +int haggis_store_file(FILE *stream, haggis_file *file) { if (store_u64(stream, file->len) != 8) return 1; if (haggis_store_cksum(stream, file->cksum) != 0) @@ -237,8 +237,8 @@ int haggis_store_file(FILE *stream, struct haggis_file *file) { return 0; } -int haggis_load_file(FILE *stream, union haggis_ft *ft) { - union u64 len; +int haggis_load_file(FILE *stream, haggis_ft *ft) { + u64 len; len.val = 0; if (load_u64(stream, len) != 8) @@ -260,7 +260,7 @@ int haggis_load_file(FILE *stream, union haggis_ft *ft) { return 0; } -int haggis_store_filetype(FILE *stream, struct haggis_filetype *filetype) { +int haggis_store_filetype(FILE *stream, haggis_filetype *filetype) { size_t len; u8 flag; int res; @@ -324,8 +324,8 @@ int haggis_store_filetype(FILE *stream, struct haggis_filetype *filetype) { return 0; } -int haggis_load_filename(FILE *stream, struct haggis_filename *n) { - union u16 len; +int haggis_load_filename(FILE *stream, haggis_filename *n) { + u16 len; char *name; len.val = 0; @@ -341,11 +341,7 @@ int haggis_load_filename(FILE *stream, struct haggis_filename *n) { return 0; } -int haggis_load_filetype( - FILE *stream, - enum haggis_typeflag tag, - struct haggis_filetype *file -) { +int haggis_load_filetype(FILE *stream, haggis_typeflag tag, haggis_filetype *file) { switch (tag) { case normal: file->tag = 0; @@ -375,27 +371,27 @@ int haggis_load_filetype( return 0; } -enum haggis_typeflag haggis_filetype_from_mode(union u16 mode) { +haggis_typeflag haggis_filetype_from_mode(u16 mode) { u8 mask = 07 << 5; int filetype = (int)((mode.bytes[0] & mask) >> 5); return filetype; } -struct haggis_node* haggis_create_node(char *file) { - struct haggis_node *node = malloc(sizeof(struct haggis_node)); +haggis_node* haggis_create_node(char *file) { + haggis_node *node = malloc(sizeof(haggis_node)); // todo return node; } -int haggis_extract_node(FILE *stram, struct haggis_node *node) { +int haggis_extract_node(FILE *stram, haggis_node *node) { // todo return 0; } -int haggis_load_node(FILE *stream, struct haggis_node *node) { +int haggis_load_node(FILE *stream, haggis_node *node) { int res; - union u16 mode; - enum haggis_typeflag tag; + u16 mode; + haggis_typeflag tag; mode.val = 0; res = haggis_load_filename(stream, node->name); @@ -422,7 +418,7 @@ int haggis_load_node(FILE *stream, struct haggis_node *node) { return 0; } -int haggis_store_node(FILE *stream, struct haggis_node *node) { +int haggis_store_node(FILE *stream, haggis_node *node) { // todo return 0; }