@@ -2332,34 +2332,78 @@ CHD_EXPORT const chd_header *chd_get_header(chd_file *chd)
23322332 chd_read_header - read CHD header data
23332333 from file into the pointed struct
23342334-------------------------------------------------*/
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 )
23362337{
23372338 chd_error err = CHDERR_NONE ;
23382339 chd_file chd ;
23392340
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 ;
23432344
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 ;
23482346
23492347 /* attempt to read the header */
23502348 err = header_read (& chd , header );
23512349 if (err != CHDERR_NONE )
2352- EARLY_EXIT ( err ) ;
2350+ return err ;
23532351
23542352 /* validate the header */
2355- err = header_validate (header );
2356- if (err != CHDERR_NONE )
2357- EARLY_EXIT (err );
2353+ return header_validate (header );
2354+ }
23582355
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 ;
23622372
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 );
23632407 return err ;
23642408}
23652409
0 commit comments