1
1
#include "io.h"
2
2
3
- /*
4
- On-disk FILE, uncompressed
5
- */
6
-
3
+ /*
4
+ On-disk FILE, uncompressed
5
+ */
7
6
8
7
void * new_file_source (char * fname , size_t buffer_size ) {
9
- file_source * fs = (file_source * ) malloc (sizeof (file_source ));
8
+ file_source * fs = (file_source * )malloc (sizeof (file_source ));
10
9
fs -> fp = fopen (fname , "rb" );
11
10
12
11
if (fs -> fp == NULL ) {
@@ -18,7 +17,7 @@ void *new_file_source(char *fname, size_t buffer_size) {
18
17
fs -> initial_file_pos = ftell (fs -> fp );
19
18
20
19
// Only allocate this heap memory if we are not memory-mapping the file
21
- fs -> buffer = (char * ) malloc ((buffer_size + 1 ) * sizeof (char ));
20
+ fs -> buffer = (char * ) malloc ((buffer_size + 1 ) * sizeof (char ));
22
21
23
22
if (fs -> buffer == NULL ) {
24
23
return NULL ;
@@ -27,33 +26,19 @@ void *new_file_source(char *fname, size_t buffer_size) {
27
26
memset (fs -> buffer , 0 , buffer_size + 1 );
28
27
fs -> buffer [buffer_size ] = '\0' ;
29
28
30
- return (void * ) fs ;
29
+ return (void * )fs ;
31
30
}
32
31
33
-
34
- // XXX handle on systems without the capability
35
-
36
-
37
- /*
38
- * void *new_file_buffer(FILE *f, int buffer_size)
39
- *
40
- * Allocate a new file_buffer.
41
- * Returns NULL if the memory allocation fails or if the call to mmap fails.
42
- *
43
- * buffer_size is ignored.
44
- */
45
-
46
-
47
- void * new_rd_source (PyObject * obj ) {
48
- rd_source * rds = (rd_source * ) malloc (sizeof (rd_source ));
32
+ void * new_rd_source (PyObject * obj ) {
33
+ rd_source * rds = (rd_source * )malloc (sizeof (rd_source ));
49
34
50
35
/* hold on to this object */
51
36
Py_INCREF (obj );
52
37
rds -> obj = obj ;
53
38
rds -> buffer = NULL ;
54
39
rds -> position = 0 ;
55
40
56
- return (void * ) rds ;
41
+ return (void * ) rds ;
57
42
}
58
43
59
44
/*
@@ -63,9 +48,7 @@ void* new_rd_source(PyObject *obj) {
63
48
*/
64
49
65
50
int del_file_source (void * fs ) {
66
- // fseek(FS(fs)->fp, FS(fs)->initial_file_pos, SEEK_SET);
67
- if (fs == NULL )
68
- return 0 ;
51
+ if (fs == NULL ) return 0 ;
69
52
70
53
/* allocated on the heap */
71
54
free (FS (fs )-> buffer );
@@ -89,27 +72,23 @@ int del_rd_source(void *rds) {
89
72
90
73
*/
91
74
92
-
93
- void * buffer_file_bytes (void * source , size_t nbytes ,
94
- size_t * bytes_read , int * status ) {
75
+ void * buffer_file_bytes (void * source , size_t nbytes , size_t * bytes_read ,
76
+ int * status ) {
95
77
file_source * src = FS (source );
96
78
97
- * bytes_read = fread ((void * ) src -> buffer , sizeof (char ), nbytes ,
98
- src -> fp );
79
+ * bytes_read = fread ((void * )src -> buffer , sizeof (char ), nbytes , src -> fp );
99
80
100
81
if (* bytes_read == 0 ) {
101
82
* status = REACHED_EOF ;
102
83
} else {
103
84
* status = 0 ;
104
85
}
105
86
106
- return (void * ) src -> buffer ;
107
-
87
+ return (void * )src -> buffer ;
108
88
}
109
89
110
-
111
- void * buffer_rd_bytes (void * source , size_t nbytes ,
112
- size_t * bytes_read , int * status ) {
90
+ void * buffer_rd_bytes (void * source , size_t nbytes , size_t * bytes_read ,
91
+ int * status ) {
113
92
PyGILState_STATE state ;
114
93
PyObject * result , * func , * args , * tmp ;
115
94
@@ -125,21 +104,18 @@ void* buffer_rd_bytes(void *source, size_t nbytes,
125
104
args = Py_BuildValue ("(i)" , nbytes );
126
105
127
106
func = PyObject_GetAttrString (src -> obj , "read" );
128
- /* printf("%s\n", PyBytes_AsString(PyObject_Repr(func))); */
129
107
130
108
/* TODO: does this release the GIL? */
131
109
result = PyObject_CallObject (func , args );
132
110
Py_XDECREF (args );
133
111
Py_XDECREF (func );
134
112
135
- /* PyObject_Print(PyObject_Type(result), stdout, 0); */
136
113
if (result == NULL ) {
137
114
PyGILState_Release (state );
138
115
* bytes_read = 0 ;
139
116
* status = CALLING_READ_FAILED ;
140
117
return NULL ;
141
- }
142
- else if (!PyBytes_Check (result )) {
118
+ } else if (!PyBytes_Check (result )) {
143
119
tmp = PyUnicode_AsUTF8String (result );
144
120
Py_XDECREF (result );
145
121
result = tmp ;
@@ -154,8 +130,7 @@ void* buffer_rd_bytes(void *source, size_t nbytes,
154
130
155
131
/* hang on to the Python object */
156
132
src -> buffer = result ;
157
- retval = (void * ) PyBytes_AsString (result );
158
-
133
+ retval = (void * )PyBytes_AsString (result );
159
134
160
135
PyGILState_Release (state );
161
136
@@ -165,42 +140,38 @@ void* buffer_rd_bytes(void *source, size_t nbytes,
165
140
return retval ;
166
141
}
167
142
168
-
169
143
#ifdef HAVE_MMAP
170
144
171
- #include <sys/stat.h>
172
145
#include <sys/mman.h>
146
+ #include <sys/stat.h>
173
147
174
- void * new_mmap (char * fname )
175
- {
148
+ void * new_mmap (char * fname ) {
176
149
struct stat buf ;
177
150
int fd ;
178
151
memory_map * mm ;
179
- /* off_t position; */
180
152
off_t filesize ;
181
153
182
- mm = (memory_map * ) malloc (sizeof (memory_map ));
154
+ mm = (memory_map * )malloc (sizeof (memory_map ));
183
155
mm -> fp = fopen (fname , "rb" );
184
156
185
157
fd = fileno (mm -> fp );
186
158
if (fstat (fd , & buf ) == -1 ) {
187
159
fprintf (stderr , "new_file_buffer: fstat() failed. errno =%d\n" , errno );
188
160
return NULL ;
189
161
}
190
- filesize = buf .st_size ; /* XXX This might be 32 bits. */
191
-
162
+ filesize = buf .st_size ; /* XXX This might be 32 bits. */
192
163
193
164
if (mm == NULL ) {
194
165
/* XXX Eventually remove this print statement. */
195
166
fprintf (stderr , "new_file_buffer: malloc() failed.\n" );
196
167
return NULL ;
197
168
}
198
- mm -> size = (off_t ) filesize ;
169
+ mm -> size = (off_t )filesize ;
199
170
mm -> line_number = 0 ;
200
171
201
172
mm -> fileno = fd ;
202
173
mm -> position = ftell (mm -> fp );
203
- mm -> last_pos = (off_t ) filesize ;
174
+ mm -> last_pos = (off_t )filesize ;
204
175
205
176
mm -> memmap = mmap (NULL , filesize , PROT_READ , MAP_SHARED , fd , 0 );
206
177
if (mm -> memmap == NULL ) {
@@ -210,30 +181,20 @@ void *new_mmap(char *fname)
210
181
mm = NULL ;
211
182
}
212
183
213
- return (void * ) mm ;
184
+ return (void * ) mm ;
214
185
}
215
186
216
-
217
- int del_mmap (void * src )
218
- {
187
+ int del_mmap (void * src ) {
219
188
munmap (MM (src )-> memmap , MM (src )-> size );
220
189
221
190
fclose (MM (src )-> fp );
222
-
223
- /*
224
- * With a memory mapped file, there is no need to do
225
- * anything if restore == RESTORE_INITIAL.
226
- */
227
- /* if (restore == RESTORE_FINAL) { */
228
- /* fseek(FB(fb)->file, FB(fb)->current_pos, SEEK_SET); */
229
- /* } */
230
191
free (src );
231
192
232
193
return 0 ;
233
194
}
234
195
235
- void * buffer_mmap_bytes (void * source , size_t nbytes ,
236
- size_t * bytes_read , int * status ) {
196
+ void * buffer_mmap_bytes (void * source , size_t nbytes , size_t * bytes_read ,
197
+ int * status ) {
237
198
void * retval ;
238
199
memory_map * src = MM (source );
239
200
@@ -264,19 +225,15 @@ void* buffer_mmap_bytes(void *source, size_t nbytes,
264
225
265
226
/* kludgy */
266
227
267
- void * new_mmap (char * fname ) {
268
- return NULL ;
269
- }
228
+ void * new_mmap (char * fname ) { return NULL ; }
270
229
271
- int del_mmap (void * src ) {
272
- return 0 ;
273
- }
230
+ int del_mmap (void * src ) { return 0 ; }
274
231
275
232
/* don't use this! */
276
233
277
- void * buffer_mmap_bytes (void * source , size_t nbytes ,
278
- size_t * bytes_read , int * status ) {
279
- return NULL ;
234
+ void * buffer_mmap_bytes (void * source , size_t nbytes , size_t * bytes_read ,
235
+ int * status ) {
236
+ return NULL ;
280
237
}
281
238
282
239
#endif
0 commit comments