@@ -2332,34 +2332,78 @@ CHD_EXPORT const chd_header *chd_get_header(chd_file *chd)
2332
2332
chd_read_header - read CHD header data
2333
2333
from file into the pointed struct
2334
2334
-------------------------------------------------*/
2335
- CHD_EXPORT chd_error chd_read_header (const char * filename , chd_header * header )
2335
+
2336
+ CHD_EXPORT chd_error chd_read_header_core_file (core_file * file , chd_header * header )
2336
2337
{
2337
2338
chd_error err = CHDERR_NONE ;
2338
2339
chd_file chd ;
2339
2340
2340
- /* punt if NULL */
2341
- if (filename == NULL || header == NULL )
2342
- EARLY_EXIT ( err = CHDERR_INVALID_PARAMETER ) ;
2341
+ /* verify parameters */
2342
+ if (file == NULL || header == NULL )
2343
+ return CHDERR_INVALID_PARAMETER ;
2343
2344
2344
- /* open the file */
2345
- chd .file = core_stdio_fopen (filename );
2346
- if (chd .file == NULL )
2347
- EARLY_EXIT (err = CHDERR_FILE_NOT_FOUND );
2345
+ chd .file = file ;
2348
2346
2349
2347
/* attempt to read the header */
2350
2348
err = header_read (& chd , header );
2351
2349
if (err != CHDERR_NONE )
2352
- EARLY_EXIT ( err ) ;
2350
+ return err ;
2353
2351
2354
2352
/* validate the header */
2355
- err = header_validate (header );
2356
- if (err != CHDERR_NONE )
2357
- EARLY_EXIT (err );
2353
+ return header_validate (header );
2354
+ }
2358
2355
2359
- cleanup :
2360
- if (chd .file != NULL )
2361
- core_fclose (chd .file );
2356
+ /*-------------------------------------------------
2357
+ chd_read_header - read CHD header data
2358
+ from file into the pointed struct
2359
+ -------------------------------------------------*/
2360
+
2361
+ CHD_EXPORT chd_error chd_read_header_file (FILE * file , chd_header * header )
2362
+ {
2363
+ chd_error err ;
2364
+ core_file * stream = malloc (sizeof (core_file ));
2365
+ if (!stream )
2366
+ return CHDERR_OUT_OF_MEMORY ;
2367
+ stream -> argp = file ;
2368
+ stream -> fsize = core_stdio_fsize ;
2369
+ stream -> fread = core_stdio_fread ;
2370
+ stream -> fclose = core_stdio_fclose_nonowner ;
2371
+ stream -> fseek = core_stdio_fseek ;
2362
2372
2373
+ err = chd_read_header_core_file (stream , header );
2374
+ core_fclose (stream );
2375
+ return err ;
2376
+ }
2377
+
2378
+ /*-------------------------------------------------
2379
+ chd_read_header - read CHD header data
2380
+ from file into the pointed struct
2381
+ -------------------------------------------------*/
2382
+
2383
+ CHD_EXPORT chd_error chd_read_header (const char * filename , chd_header * header )
2384
+ {
2385
+ chd_error err ;
2386
+ core_file * file = NULL ;
2387
+
2388
+ if (filename == NULL )
2389
+ {
2390
+ err = CHDERR_INVALID_PARAMETER ;
2391
+ goto cleanup ;
2392
+ }
2393
+
2394
+ /* open the file */
2395
+ file = core_stdio_fopen (filename );
2396
+ if (file == 0 )
2397
+ {
2398
+ err = CHDERR_FILE_NOT_FOUND ;
2399
+ goto cleanup ;
2400
+ }
2401
+
2402
+ err = chd_read_header_core_file (file , header );
2403
+
2404
+ cleanup :
2405
+ if (file != NULL )
2406
+ core_fclose (file );
2363
2407
return err ;
2364
2408
}
2365
2409
0 commit comments