Beispiel #1
0
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;
}
Beispiel #2
0
/*-------------------------------------------------------------------------

	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;
}