size_t config_read_buffer(const char *name, unsigned char **out) { _cleanup_fclose_ FILE *file = NULL; unsigned char *buffer; size_t len, read; file = config_fopen(name, "r"); if (!file) { *out = NULL; return 0; } for (len = 0, buffer = xmalloc(8192); ; buffer = xrealloc(buffer, len + 8192)) { read = fread(buffer + len, 1, 8192, file); len += read; if (read != 8192) { if (ferror(file)) die_errno("fread(config-%s)", name); break; } } *out = buffer; return len; }
/*------------------------------------------------------------------------- Load the game configuration and optionally emulator settings from the game config file. Input: Filename Name of the game config file. Return: 1 if read successfully or zero. ---------------------------------------------------------------------------*/ Uint32 config_load_cue_file ( char *Filename ) { char File[256]; CONFIG_FILE Config; Uint32 i; strcpy ( neogeo_toc_file_name, Filename ); if ( config_fopen ( &Config, Filename ) ) { if ( config_find_section ( &Config, "Game Info" ) ) goto config_ok; config_fclose ( &Config ); } platform_remove_trailing_slash ( Filename ); platform_get_file_name ( Filename, File ); strcpy ( neogeo_toc_file_name, Filename ); strcat ( neogeo_toc_file_name, DIRECTORY_SEPARATOR_STRING ); strcat ( neogeo_toc_file_name, File ); strcat ( neogeo_toc_file_name, ".cfg" ); if ( !config_fopen ( &Config, neogeo_toc_file_name ) ) { fprintf ( stderr, "Can't open game configuration file. (%s)\n", neogeo_toc_file_name ); return 0; } if ( !config_find_section ( &Config, "Game Info" ) ) { fprintf ( stderr, "Syntax error in game cfg file, can't find section [Game Info]\n" ); config_fclose ( &Config ); return 0; } config_ok: if ( !config_read_string ( &Config, "Name", neogeo_game_name, 256 ) ) { fprintf ( stderr, "Syntax error in game cfg file, can't read variable 'Name'\n" ); config_fclose ( &Config ); return 0; } neogeo_cdrom_first_track = 1; if ( !config_read_integer ( &Config, "Tracks", &neogeo_cdrom_last_track ) ) { fprintf ( stderr, "Syntax error in game cfg file, can't read variable 'Tracks'\n" ); config_fclose ( &Config ); return 0; } if ( ( !neogeo_cdrom_last_track ) || ( neogeo_cdrom_last_track > 99 ) ) { fprintf ( stderr, "Syntax error in game cfg file, 'Tracks' must be between 1 & 99\n" ); config_fclose ( &Config ); return 0; } if ( !config_read_integer ( &Config, "Leadout", &neogeo_cdrom_toc[0].position ) ) { fprintf ( stderr, "Syntax error in game cfg file, can't read variable 'Leadout'\n" ); config_fclose ( &Config ); return 0; } config_read_integer_default ( &Config, "Fix_DoubleDragon", &Fix_DoubleDragon, 0 ); if ( !config_find_section ( &Config, "TOC" ) ) { fprintf ( stderr, "Syntax error in game cfg file, can't find section [TOC]\n" ); config_fclose ( &Config ); return 0; } for ( i = 1; i <= neogeo_cdrom_last_track; i++ ) { sprintf ( File, "%d", i ); if ( !config_find_subsection ( &Config, File ) ) { fprintf ( stderr, "Syntax error in game cfg file, can't find subsection %s\n", File ); config_fclose ( &Config ); return 0; } if ( !config_read_integer ( &Config, "Position", &neogeo_cdrom_toc[i].position ) ) { fprintf ( stderr, "Syntax error in game cfg file, can't read Position for track %d\n", i ); config_fclose ( &Config ); return 0; } if ( !config_read_string ( &Config, "Filename", &neogeo_cdrom_toc[i].filename[0], 256 ) ) { fprintf ( stderr, "Syntax error in game cfg file, can't read Filename for track %d\n", i ); config_fclose ( &Config ); return 0; } } config_load_settings ( &Config ); config_fclose ( &Config ); return 1; }