Import Debian changes 20180207-1
[hcoop/debian/mlton.git] / runtime / util / read_write.h
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 }