Import Upstream version 20180207
[hcoop/debian/mlton.git] / runtime / util / read_write.h
CommitLineData
7f918cf1
CE
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
10static inline char readChar (FILE *f) {
11 char res;
12 fread_safe (&res, sizeof(char), 1, f);
13 return res;
14}
15
16static inline size_t readSize (FILE *f) {
17 size_t res;
18 fread_safe (&res, sizeof(size_t), 1, f);
19 return res;
20}
21
22static inline uint32_t readUint32 (FILE *f) {
23 uint32_t res;
24 fread_safe (&res, sizeof(uint32_t), 1, f);
25 return res;
26}
27
28static inline uintptr_t readUintptr (FILE *f) {
29 uintptr_t res;
30 fread_safe (&res, sizeof(uintptr_t), 1, f);
31 return res;
32}
33
34static inline void writeChar (FILE *f, char c) {
35 fwrite_safe (&c, sizeof(char), 1, f);
36}
37
38static inline void writeSize (FILE *f, size_t z) {
39 fwrite_safe (&z, sizeof(size_t), 1, f);
40}
41
42static inline void writeUint32 (FILE *f, uint32_t u) {
43 fwrite_safe (&u, sizeof(uint32_t), 1, f);
44}
45
46static inline void writeUintptr (FILE *f, uintptr_t u) {
47 fwrite_safe (&u, sizeof(uintptr_t), 1, f);
48}
49
50static inline void writeString (FILE *f, const char* s) {
51 fwrite_safe (s, 1, strlen(s), f);
52}
53
54#define BUF_SIZE 64
55static 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
62static 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
69static 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
76static 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
84static inline void writeNewline (FILE *f) {
85 writeString (f, "\n");
86}
87
88static inline void writeStringWithNewline (FILE *f, const char* s) {
89 writeString (f, s);
90 writeNewline (f);
91}