@@ -184,16 +184,11 @@ NP_DECL(EFILE*) np_fopen(const char* file, const char* mode) {
184
184
return e ;
185
185
}
186
186
187
- NP_DECL (int ) np_open (const char * file , int flags , va_list args ) {
188
187
#ifdef _WIN32
189
- int mode = 0 ;
188
+ NP_DECL ( int ) np_open ( const char * file , int flags , int mode )) {
190
189
#else
191
- mode_t mode = 0 ;
190
+ NP_DECL ( int ) np_open ( const char * file , int flags , mode_t mode ) {
192
191
#endif
193
- if (flags & O_CREAT ) {
194
- mode = va_arg (args , int );
195
- }
196
-
197
192
char absolute_path [PATH_MAX ] = {};
198
193
np_get_absolute_path (file , absolute_path , PATH_MAX );
199
194
char execfolder [PATH_MAX ] = {}, executable [PATH_MAX ];
@@ -259,12 +254,7 @@ NP_DECL(EFILE*) np_wfopen(const wchar_t *wfile, const wchar_t *mode) {
259
254
return e ;
260
255
}
261
256
262
- NP_DECL (int ) np_wopen (const wchar_t * wfile , int flags , va_list args ) {
263
- int mode = 0 ;
264
- if (flags & O_CREAT ) {
265
- mode = va_arg (args , int );
266
- }
267
-
257
+ NP_DECL (int ) np_wopen (const wchar_t * wfile , int flags , int mode ) {
268
258
char file [PATH_MAX ] = {};
269
259
wcstombs ((char * )& file , wfile , PATH_MAX );
270
260
@@ -336,6 +326,18 @@ NP_DECL(int) np_close(int fd) {
336
326
return 0 ;
337
327
}
338
328
329
+ NP_DECL (EFILE * ) np_tmpfile () {
330
+ FILE * f = tmpfile ();
331
+ if (f == NULL )
332
+ return NULL ;
333
+
334
+ EFILE * e = (EFILE * )malloc (sizeof * e );
335
+ e -> handle_type = EHANDLE_NATIVE ;
336
+ e -> f = f ;
337
+
338
+ return e ;
339
+ }
340
+
339
341
NP_DECL (bool ) np_feof (void * e ) {
340
342
if (NP_FOREIGN_PTR ) {
341
343
return feof ((FILE * )e );
@@ -434,7 +436,7 @@ NP_DECL(ssize_t) np_pread(int fd, void *buf, size_t count, off_t offset) {
434
436
return count ;
435
437
}
436
438
437
- NP_DECL (int ) np_fgetpos (void * e , epos_t * pos ) {
439
+ NP_DECL (int ) np_fgetpos (void * e , fpos_t * pos ) {
438
440
if (NP_FOREIGN_PTR ) {
439
441
return fgetpos ((FILE * )e , pos );
440
442
}
@@ -448,7 +450,14 @@ NP_DECL(int) np_fgetpos(void* e, epos_t* pos) {
448
450
return 1 ;
449
451
}
450
452
451
- * pos = (epos_t )(((EFILE * )e )-> end - ((EFILE * )e )-> pos );
453
+ #ifdef __linux__
454
+ fpos_t temp = {};
455
+ temp .__pos = ((EFILE * )e )-> end - ((EFILE * )e )-> pos ;
456
+ memcpy (pos , & temp , sizeof (fpos_t ));
457
+ #else
458
+ * pos = (fpos_t )(((EFILE * )e )-> end - ((EFILE * )e )-> pos );
459
+ #endif
460
+
452
461
return 0 ;
453
462
454
463
}
@@ -575,12 +584,20 @@ NP_DECL(int) np_fseeko64(void *e, int64_t offset, int origin) {
575
584
return np_fseek_priv (e , offset , origin );
576
585
}
577
586
578
- NP_DECL (int ) np_fscanf (void * e , const char * format , va_list args ) {
587
+ NP_DECL (int ) np_fscanf (void * e , const char * format , ... ) {
579
588
if (NP_FOREIGN_PTR ) {
580
- return vfscanf (((FILE * )e ), format , args );
589
+ va_list args ;
590
+ va_start (args , format );
591
+ int result = vfscanf (((FILE * )e ), format , args );
592
+ va_end (args );
593
+ return result ;
581
594
}
582
595
if (((EFILE * )e )-> handle_type != EHANDLE_VIRTUAL ) {
583
- return vfscanf (((EFILE * )e )-> f , format , args );
596
+ va_list args ;
597
+ va_start (args , format );
598
+ int result = vfscanf (((EFILE * )e )-> f , format , args );
599
+ va_end (args );
600
+ return result ;
584
601
}
585
602
return 0 ;
586
603
}
@@ -622,6 +639,15 @@ NP_DECL(int) np_fprintf(void *e, const char *format, ...) {
622
639
}
623
640
return 0 ;
624
641
}
642
+ NP_DECL (int ) np_vfprintf (void * e , const char * format , va_list args ) {
643
+ if (NP_FOREIGN_PTR ) {
644
+ return vfprintf ((FILE * )e , format , args );
645
+ }
646
+ if (((EFILE * )e )-> handle_type != EHANDLE_VIRTUAL ) {
647
+ return vfprintf (((EFILE * )e )-> f , format , args );
648
+ }
649
+ return 0 ;
650
+ }
625
651
626
652
NP_DECL (size_t ) np_fwrite (const void * ptr , size_t size , size_t count , void * e ) {
627
653
if (NP_FOREIGN_PTR ) {
0 commit comments