| 1 | /* Copyright (C) 2012 Matthew Fluet. |
| 2 | * Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh |
| 3 | * Jagannathan, and Stephen Weeks. |
| 4 | * Copyright (C) 1997-2000 NEC Research Institute. |
| 5 | * |
| 6 | * MLton is released under a BSD-style license. |
| 7 | * See the file MLton-LICENSE for details. |
| 8 | */ |
| 9 | |
| 10 | static inline char readChar (FILE *f) { |
| 11 | char res; |
| 12 | fread_safe (&res, sizeof(char), 1, f); |
| 13 | return res; |
| 14 | } |
| 15 | |
| 16 | static inline size_t readSize (FILE *f) { |
| 17 | size_t res; |
| 18 | fread_safe (&res, sizeof(size_t), 1, f); |
| 19 | return res; |
| 20 | } |
| 21 | |
| 22 | static inline uint32_t readUint32 (FILE *f) { |
| 23 | uint32_t res; |
| 24 | fread_safe (&res, sizeof(uint32_t), 1, f); |
| 25 | return res; |
| 26 | } |
| 27 | |
| 28 | static inline uintptr_t readUintptr (FILE *f) { |
| 29 | uintptr_t res; |
| 30 | fread_safe (&res, sizeof(uintptr_t), 1, f); |
| 31 | return res; |
| 32 | } |
| 33 | |
| 34 | static inline void writeChar (FILE *f, char c) { |
| 35 | fwrite_safe (&c, sizeof(char), 1, f); |
| 36 | } |
| 37 | |
| 38 | static inline void writeSize (FILE *f, size_t z) { |
| 39 | fwrite_safe (&z, sizeof(size_t), 1, f); |
| 40 | } |
| 41 | |
| 42 | static inline void writeUint32 (FILE *f, uint32_t u) { |
| 43 | fwrite_safe (&u, sizeof(uint32_t), 1, f); |
| 44 | } |
| 45 | |
| 46 | static inline void writeUintptr (FILE *f, uintptr_t u) { |
| 47 | fwrite_safe (&u, sizeof(uintptr_t), 1, f); |
| 48 | } |
| 49 | |
| 50 | static inline void writeString (FILE *f, const char* s) { |
| 51 | fwrite_safe (s, 1, strlen(s), f); |
| 52 | } |
| 53 | |
| 54 | #define BUF_SIZE 64 |
| 55 | static inline void writeUint32U (FILE *f, uint32_t u) { |
| 56 | static char buf[BUF_SIZE]; |
| 57 | |
| 58 | snprintf (buf, BUF_SIZE, "%"PRIu32, u); |
| 59 | writeString (f, buf); |
| 60 | } |
| 61 | |
| 62 | static inline void writeUintmaxU (FILE *f, uintmax_t u) { |
| 63 | static char buf[BUF_SIZE]; |
| 64 | |
| 65 | snprintf (buf, BUF_SIZE, "%"PRIuMAX, u); |
| 66 | writeString (f, buf); |
| 67 | } |
| 68 | |
| 69 | static inline void writeUint32X (FILE *f, uint32_t u) { |
| 70 | static char buf[BUF_SIZE]; |
| 71 | |
| 72 | snprintf (buf, BUF_SIZE, "0x%08"PRIx32, u); |
| 73 | writeString (f, buf); |
| 74 | } |
| 75 | |
| 76 | static inline void writeUintmaxX (FILE *f, uintmax_t u) { |
| 77 | static char buf[BUF_SIZE]; |
| 78 | |
| 79 | snprintf (buf, BUF_SIZE, "0x%0*"PRIxMAX, (int)(2 * sizeof(uintmax_t)), u); |
| 80 | writeString (f, buf); |
| 81 | } |
| 82 | #undef BUF_SIZE |
| 83 | |
| 84 | static inline void writeNewline (FILE *f) { |
| 85 | writeString (f, "\n"); |
| 86 | } |
| 87 | |
| 88 | static inline void writeStringWithNewline (FILE *f, const char* s) { |
| 89 | writeString (f, s); |
| 90 | writeNewline (f); |
| 91 | } |