diff options
Diffstat (limited to 'fileutils.c')
| -rw-r--r-- | fileutils.c | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/fileutils.c b/fileutils.c new file mode 100644 index 0000000..a9d9efc --- /dev/null +++ b/fileutils.c @@ -0,0 +1,72 @@ +#include "fileutils.h" + +bool fwrite_word16le(FILE* fp, uint16_t x) { + uint8_t buf[2]; + buf[0] = x & 0xff; + buf[1] = (x >> 8) & 0xff; + int r = fwrite(buf, 1, 2, fp); + if (r != 2) return false; + return true; +} + +bool fwrite_word32le(FILE* fp, uint32_t x) { + bool ret = false; + uint16_t buf[2]; + + buf[0] = x & 0xffff; + buf[1] = (x >> 16) & 0xffff; + ret = fwrite_word16le(fp, buf[0]); + if (!ret) return ret; + ret = fwrite_word16le(fp, buf[1]); + if (!ret) return ret; + return true; +} + +bool fwrite_word16be(FILE* fp, uint16_t x) { + uint8_t buf[2]; + buf[1] = x & 0xff; + buf[0] = (x >> 8) & 0xff; + int r = fwrite(buf, 1, 2, fp); + if (r != 2) return false; + return true; +} + +bool fwrite_word32be(FILE* fp, uint32_t x) { + bool ret = false; + uint16_t buf[2]; + + buf[1] = x & 0xffff; + buf[0] = (x >> 16) & 0xffff; + ret = fwrite_word16be(fp, buf[0]); + if (!ret) return ret; + ret = fwrite_word16be(fp, buf[1]); + if (!ret) return ret; + return true; +} + +bool fwrite_word24le(FILE* fp, uint32_t x) { + uint8_t buf[3]; + buf[0] = x & 0xff; + buf[1] = (x >> 8) & 0xff; + buf[2] = (x >> 16) & 0xff; + int r = fwrite(buf, 1, 3, fp); + if (r != 3) return false; + return true; +} + +bool fwrite_word24be(FILE* fp, uint32_t x) { + uint8_t buf[3]; + buf[2] = x & 0xff; + buf[1] = (x >> 8) & 0xff; + buf[0] = (x >> 16) & 0xff; + int r = fwrite(buf, 1, 3, fp); + if (r != 3) return false; + return true; +} + +bool fwrite_char(FILE* fp, uint8_t x) { + uint8_t buf[1]; + buf[0] = x; + int ret = fwrite(buf, 1, 1, fp); + return ret == 1; +}
\ No newline at end of file |
