summaryrefslogtreecommitdiff
path: root/binfile.c
diff options
context:
space:
mode:
Diffstat (limited to 'binfile.c')
-rw-r--r--binfile.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/binfile.c b/binfile.c
new file mode 100644
index 0000000..8a45084
--- /dev/null
+++ b/binfile.c
@@ -0,0 +1,31 @@
+#define BINFILE_PORTABLE 1
+
+static inline void write_u8(FILE *fp, U8 u8) {
+ putc(u8, fp);
+}
+
+/*
+ note: a bit of testing seems to reveal that the portable versions for u16/32 are faster than fwrite
+ (but this is not the case for u64).
+ */
+
+static inline void write_u16(FILE *fp, U16 u16) {
+ putc(u16 & 0xFF, fp);
+ putc(u16 >> 8, fp);
+}
+
+static inline void write_u32(FILE *fp, U32 u32) {
+ write_u16(fp, u32 & 0xFFFF);
+ write_u16(fp, (U16)(u32 >> 16));
+}
+
+static void write_u64(FILE *fp, U64 u64) {
+#if BINFILE_PORTABLE
+ write_u32(fp, u64 & 0xFFFFFFFF);
+ write_u32(fp, (U32)(u64 >> 32));
+#else
+ fwrite(&u64, sizeof u64, 1, fp);
+#endif
+}
+
+