Mercurial > hg > dmlib
annotate src/dmfile.c @ 1315:7687412f9aef
Fix jssmod sample conversion flags storing .. urgh.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Sun, 20 Aug 2017 01:54:54 +0300 |
parents | e06abfde6c39 |
children | c543f5ae92d5 |
rev | line source |
---|---|
0 | 1 /* |
2 * DMLib | |
414
c452a459e552
Clear up the file descriptions.
Matti Hamalainen <ccr@tnsp.org>
parents:
405
diff
changeset
|
3 * -- Standard I/O (stdio) file write/read endianess helpers |
0 | 4 * Programmed and designed by Matti 'ccr' Hamalainen |
5 * (C) Copyright 2011 Tecnic Software productions (TNSP) | |
6 */ | |
7 #include "dmfile.h" | |
8 | |
9 | |
405
d0257d0004f6
Implement dm_{read,write}_byte() and constify.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
10 BOOL dm_fread_str(FILE *f, void *buf, const size_t len) |
0 | 11 { |
12 return fread(buf, len, 1, f) == 1; | |
13 } | |
14 | |
15 | |
405
d0257d0004f6
Implement dm_{read,write}_byte() and constify.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
16 BOOL dm_fread_byte(FILE *f, Uint8 *val) |
d0257d0004f6
Implement dm_{read,write}_byte() and constify.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
17 { |
438
c1f6def0c1da
Adjust dm_fread_byte() and dm_fwrite_byte() stdio helper functions to match
Matti Hamalainen <ccr@tnsp.org>
parents:
414
diff
changeset
|
18 int tmp = fgetc(f); |
c1f6def0c1da
Adjust dm_fread_byte() and dm_fwrite_byte() stdio helper functions to match
Matti Hamalainen <ccr@tnsp.org>
parents:
414
diff
changeset
|
19 *val = tmp; |
c1f6def0c1da
Adjust dm_fread_byte() and dm_fwrite_byte() stdio helper functions to match
Matti Hamalainen <ccr@tnsp.org>
parents:
414
diff
changeset
|
20 return tmp != EOF; |
405
d0257d0004f6
Implement dm_{read,write}_byte() and constify.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
21 } |
d0257d0004f6
Implement dm_{read,write}_byte() and constify.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
22 |
d0257d0004f6
Implement dm_{read,write}_byte() and constify.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
23 |
0 | 24 #define DM_DEFINE_FFUNC(xname, xtype, xmacro) \ |
25 BOOL dm_fread_ ## xname (FILE *f, xtype *v) { \ | |
26 xtype result; \ | |
27 if (fread(&result, sizeof( xtype ), 1, f) != 1) \ | |
28 return FALSE; \ | |
29 *v = DM_ ## xmacro ## _TO_NATIVE (result); \ | |
30 return TRUE; \ | |
31 } | |
32 | |
33 #include "dmfiletmpl.h" | |
34 | |
35 #undef DM_DEFINE_FFUNC | |
36 | |
405
d0257d0004f6
Implement dm_{read,write}_byte() and constify.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
37 |
d0257d0004f6
Implement dm_{read,write}_byte() and constify.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
38 BOOL dm_fwrite_str(FILE *f, const void *buf, const size_t len) |
0 | 39 { |
40 return fwrite(buf, len, 1, f) == 1; | |
41 } | |
42 | |
43 | |
405
d0257d0004f6
Implement dm_{read,write}_byte() and constify.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
44 BOOL dm_fwrite_byte(FILE *f, const Uint8 val) |
d0257d0004f6
Implement dm_{read,write}_byte() and constify.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
45 { |
438
c1f6def0c1da
Adjust dm_fread_byte() and dm_fwrite_byte() stdio helper functions to match
Matti Hamalainen <ccr@tnsp.org>
parents:
414
diff
changeset
|
46 return fputc(val, f) == val; |
405
d0257d0004f6
Implement dm_{read,write}_byte() and constify.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
47 } |
d0257d0004f6
Implement dm_{read,write}_byte() and constify.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
48 |
d0257d0004f6
Implement dm_{read,write}_byte() and constify.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
49 |
0 | 50 #define DM_DEFINE_FFUNC(xname, xtype, xmacro) \ |
405
d0257d0004f6
Implement dm_{read,write}_byte() and constify.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
51 BOOL dm_fwrite_ ## xname (FILE *f, const xtype v) { \ |
0 | 52 xtype result = DM_NATIVE_TO_ ## xmacro (v); \ |
789 | 53 return fwrite(&result, sizeof( xtype ), 1, f) == 1; \ |
0 | 54 } |
55 | |
56 #include "dmfiletmpl.h" | |
57 | |
58 #undef DM_DEFINE_FFUNC | |
567
b2b461829c61
Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents:
438
diff
changeset
|
59 |
b2b461829c61
Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents:
438
diff
changeset
|
60 |
b2b461829c61
Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents:
438
diff
changeset
|
61 #define BUF_SIZE_INITIAL (16*1024) |
b2b461829c61
Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents:
438
diff
changeset
|
62 #define BUF_SIZE_GROW (4*1024) |
b2b461829c61
Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents:
438
diff
changeset
|
63 |
b2b461829c61
Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents:
438
diff
changeset
|
64 int dmReadDataFile(FILE *inFile, const char *filename, Uint8 **pbuf, size_t *pbufSize) |
b2b461829c61
Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents:
438
diff
changeset
|
65 { |
b2b461829c61
Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents:
438
diff
changeset
|
66 FILE *f; |
b2b461829c61
Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents:
438
diff
changeset
|
67 int res = DMERR_OK; |
b2b461829c61
Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents:
438
diff
changeset
|
68 Uint8 *dataBuf = NULL; |
b2b461829c61
Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents:
438
diff
changeset
|
69 size_t readSize, dataSize, dataRead, dataPos; |
1102
e06abfde6c39
Cosmetics pass: Remove excess whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents:
1087
diff
changeset
|
70 |
567
b2b461829c61
Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents:
438
diff
changeset
|
71 if (inFile != NULL) |
b2b461829c61
Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents:
438
diff
changeset
|
72 f = inFile; |
b2b461829c61
Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents:
438
diff
changeset
|
73 else |
b2b461829c61
Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents:
438
diff
changeset
|
74 if (filename != NULL) |
b2b461829c61
Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents:
438
diff
changeset
|
75 { |
b2b461829c61
Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents:
438
diff
changeset
|
76 if ((f = fopen(filename, "rb")) == NULL) |
b2b461829c61
Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents:
438
diff
changeset
|
77 { |
958
985225a93aeb
Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents:
812
diff
changeset
|
78 return dmError(DMERR_FOPEN, |
985225a93aeb
Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents:
812
diff
changeset
|
79 "Could not open '%s' for reading.\n", filename); |
567
b2b461829c61
Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents:
438
diff
changeset
|
80 } |
b2b461829c61
Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents:
438
diff
changeset
|
81 } |
b2b461829c61
Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents:
438
diff
changeset
|
82 else |
b2b461829c61
Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents:
438
diff
changeset
|
83 { |
958
985225a93aeb
Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents:
812
diff
changeset
|
84 return dmError(DMERR_NULLPTR, |
985225a93aeb
Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents:
812
diff
changeset
|
85 "NULL filename and stream pointers.\n"); |
567
b2b461829c61
Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents:
438
diff
changeset
|
86 } |
b2b461829c61
Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents:
438
diff
changeset
|
87 |
b2b461829c61
Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents:
438
diff
changeset
|
88 // Allocate initial data buffer |
b2b461829c61
Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents:
438
diff
changeset
|
89 readSize = dataSize = BUF_SIZE_INITIAL; |
b2b461829c61
Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents:
438
diff
changeset
|
90 if ((dataBuf = dmMalloc(dataSize)) == NULL) |
b2b461829c61
Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents:
438
diff
changeset
|
91 { |
958
985225a93aeb
Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents:
812
diff
changeset
|
92 res = dmError(DMERR_MALLOC, |
985225a93aeb
Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents:
812
diff
changeset
|
93 "Error allocating memory for data, %d bytes.\n", dataSize); |
567
b2b461829c61
Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents:
438
diff
changeset
|
94 goto error; |
b2b461829c61
Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents:
438
diff
changeset
|
95 } |
b2b461829c61
Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents:
438
diff
changeset
|
96 |
b2b461829c61
Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents:
438
diff
changeset
|
97 dataPos = 0; |
b2b461829c61
Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents:
438
diff
changeset
|
98 dataRead = 0; |
b2b461829c61
Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents:
438
diff
changeset
|
99 |
b2b461829c61
Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents:
438
diff
changeset
|
100 while (!feof(f) && !ferror(f)) |
b2b461829c61
Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents:
438
diff
changeset
|
101 { |
b2b461829c61
Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents:
438
diff
changeset
|
102 size_t read = fread(dataBuf + dataPos, 1, readSize, f); |
b2b461829c61
Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents:
438
diff
changeset
|
103 dataPos += read; |
b2b461829c61
Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents:
438
diff
changeset
|
104 dataRead += read; |
b2b461829c61
Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents:
438
diff
changeset
|
105 |
b2b461829c61
Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents:
438
diff
changeset
|
106 if (dataRead >= dataSize) |
b2b461829c61
Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents:
438
diff
changeset
|
107 { |
b2b461829c61
Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents:
438
diff
changeset
|
108 readSize = BUF_SIZE_GROW; |
b2b461829c61
Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents:
438
diff
changeset
|
109 dataSize += BUF_SIZE_GROW; |
b2b461829c61
Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents:
438
diff
changeset
|
110 if ((dataBuf = dmRealloc(dataBuf, dataSize)) == NULL) |
b2b461829c61
Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents:
438
diff
changeset
|
111 { |
958
985225a93aeb
Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents:
812
diff
changeset
|
112 res = dmError(DMERR_MALLOC, |
985225a93aeb
Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents:
812
diff
changeset
|
113 "Error reallocating memory for data, %d bytes.\n", |
985225a93aeb
Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents:
812
diff
changeset
|
114 dataSize); |
567
b2b461829c61
Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents:
438
diff
changeset
|
115 goto error; |
b2b461829c61
Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents:
438
diff
changeset
|
116 } |
b2b461829c61
Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents:
438
diff
changeset
|
117 } |
b2b461829c61
Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents:
438
diff
changeset
|
118 else |
b2b461829c61
Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents:
438
diff
changeset
|
119 break; |
b2b461829c61
Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents:
438
diff
changeset
|
120 } |
b2b461829c61
Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents:
438
diff
changeset
|
121 |
b2b461829c61
Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents:
438
diff
changeset
|
122 *pbufSize = dataRead; |
b2b461829c61
Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents:
438
diff
changeset
|
123 *pbuf = dataBuf; |
b2b461829c61
Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents:
438
diff
changeset
|
124 |
b2b461829c61
Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents:
438
diff
changeset
|
125 error: |
b2b461829c61
Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents:
438
diff
changeset
|
126 if (f != inFile) |
b2b461829c61
Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents:
438
diff
changeset
|
127 fclose(f); |
1102
e06abfde6c39
Cosmetics pass: Remove excess whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents:
1087
diff
changeset
|
128 |
567
b2b461829c61
Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents:
438
diff
changeset
|
129 return res; |
b2b461829c61
Move utility function dmReadDataFile() to dmfile module instead.
Matti Hamalainen <ccr@tnsp.org>
parents:
438
diff
changeset
|
130 } |