@@ -28,6 +28,7 @@ The full license is in the LICENSE file, distributed with this software.
28
28
void * new_file_source (char * fname , size_t buffer_size ) {
29
29
file_source * fs = (file_source * )malloc (sizeof (file_source ));
30
30
if (fs == NULL ) {
31
+ PyErr_NoMemory ();
31
32
return NULL ;
32
33
}
33
34
@@ -41,17 +42,20 @@ void *new_file_source(char *fname, size_t buffer_size) {
41
42
int required = MultiByteToWideChar (CP_UTF8 , 0 , fname , -1 , NULL , 0 );
42
43
if (required == 0 ) {
43
44
free (fs );
45
+ PyErr_SetFromWindowsErr (GetLastError ())
44
46
return NULL ;
45
47
}
46
48
wname = (wchar_t * )malloc (required * sizeof (wchar_t ));
47
49
if (wname == NULL ) {
48
50
free (fs );
51
+ PyErr_NoMemory ();
49
52
return NULL ;
50
53
}
51
54
if (MultiByteToWideChar (CP_UTF8 , 0 , fname , -1 , wname , required ) <
52
55
required ) {
53
56
free (wname );
54
57
free (fs );
58
+ PyErr_SetFromWindowsErr (GetLastError ())
55
59
return NULL ;
56
60
}
57
61
fs -> fd = _wopen (wname , O_RDONLY | O_BINARY );
@@ -62,6 +66,11 @@ void *new_file_source(char *fname, size_t buffer_size) {
62
66
#endif
63
67
if (fs -> fd == -1 ) {
64
68
free (fs );
69
+ #ifdef USE_WIN_UTF16
70
+ PyErr_SetFromWindowsErr (GetLastError ())
71
+ #else
72
+ PyErr_SetFromErrnoWithFilename (PyExc_OSError , fname );
73
+ #endif
65
74
return NULL ;
66
75
}
67
76
@@ -71,6 +80,7 @@ void *new_file_source(char *fname, size_t buffer_size) {
71
80
if (fs -> buffer == NULL ) {
72
81
close (fs -> fd );
73
82
free (fs );
83
+ PyErr_NoMemory ();
74
84
return NULL ;
75
85
}
76
86
@@ -83,6 +93,10 @@ void *new_file_source(char *fname, size_t buffer_size) {
83
93
void * new_rd_source (PyObject * obj ) {
84
94
rd_source * rds = (rd_source * )malloc (sizeof (rd_source ));
85
95
96
+ if (rds == NULL ) {
97
+ PyErr_NoMemory ();
98
+ return NULL ;
99
+ }
86
100
/* hold on to this object */
87
101
Py_INCREF (obj );
88
102
rds -> obj = obj ;
@@ -220,20 +234,18 @@ void *new_mmap(char *fname) {
220
234
221
235
mm = (memory_map * )malloc (sizeof (memory_map ));
222
236
if (mm == NULL ) {
223
- fprintf ( stderr , "new_file_buffer: malloc() failed.\n" );
224
- return ( NULL ) ;
237
+ PyErr_NoMemory ( );
238
+ return NULL ;
225
239
}
226
240
mm -> fd = open (fname , O_RDONLY | O_BINARY );
227
241
if (mm -> fd == -1 ) {
228
- fprintf (stderr , "new_file_buffer: open(%s) failed. errno =%d\n" ,
229
- fname , errno );
242
+ PyErr_SetFromErrnoWithFilename (PyExc_OSError , fname );
230
243
free (mm );
231
244
return NULL ;
232
245
}
233
246
234
247
if (fstat (mm -> fd , & stat ) == -1 ) {
235
- fprintf (stderr , "new_file_buffer: fstat() failed. errno =%d\n" ,
236
- errno );
248
+ PyErr_SetFromErrnoWithFilename (PyExc_OSError , fname );
237
249
close (mm -> fd );
238
250
free (mm );
239
251
return NULL ;
@@ -242,8 +254,7 @@ void *new_mmap(char *fname) {
242
254
243
255
mm -> memmap = mmap (NULL , filesize , PROT_READ , MAP_SHARED , mm -> fd , 0 );
244
256
if (mm -> memmap == MAP_FAILED ) {
245
- /* XXX Eventually remove this print statement. */
246
- fprintf (stderr , "new_file_buffer: mmap() failed.\n" );
257
+ PyErr_SetFromErrnoWithFilename (PyExc_OSError , fname );
247
258
close (mm -> fd );
248
259
free (mm );
249
260
return NULL ;
0 commit comments