Fix issues when config text files contain utf8 bom.
							parent
							
								
									f62a2e4566
								
							
						
					
					
						commit
						0e72e995ee
					
				| 
						 | 
					@ -21,10 +21,22 @@
 | 
				
			||||||
#include <sstream>
 | 
					#include <sstream>
 | 
				
			||||||
#include <iterator>
 | 
					#include <iterator>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void consume_bom(std::ifstream &input)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    int bom[3];
 | 
				
			||||||
 | 
					    bom[0] = input.get();
 | 
				
			||||||
 | 
					    bom[1] = input.get();
 | 
				
			||||||
 | 
					    bom[2] = input.get();
 | 
				
			||||||
 | 
					    if (bom[0] != 0xEF || bom[1] != 0xBB || bom[2] != 0xBF) {
 | 
				
			||||||
 | 
					        input.seekg(0);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void load_custom_broadcasts(std::string broadcasts_filepath, std::set<uint32> &custom_broadcasts)
 | 
					static void load_custom_broadcasts(std::string broadcasts_filepath, std::set<uint32> &custom_broadcasts)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    std::ifstream broadcasts_file(broadcasts_filepath);
 | 
					 | 
				
			||||||
    PRINT_DEBUG("Broadcasts file path: %s\n", broadcasts_filepath.c_str());
 | 
					    PRINT_DEBUG("Broadcasts file path: %s\n", broadcasts_filepath.c_str());
 | 
				
			||||||
 | 
					    std::ifstream broadcasts_file(broadcasts_filepath);
 | 
				
			||||||
 | 
					    consume_bom(broadcasts_file);
 | 
				
			||||||
    if (broadcasts_file.is_open()) {
 | 
					    if (broadcasts_file.is_open()) {
 | 
				
			||||||
        std::string line;
 | 
					        std::string line;
 | 
				
			||||||
        while (std::getline(broadcasts_file, line)) {
 | 
					        while (std::getline(broadcasts_file, line)) {
 | 
				
			||||||
| 
						 | 
					@ -63,6 +75,7 @@ static void load_gamecontroller_settings(Settings *settings)
 | 
				
			||||||
        std::string controller_config_path = path + PATH_SEPARATOR + p;
 | 
					        std::string controller_config_path = path + PATH_SEPARATOR + p;
 | 
				
			||||||
        std::ifstream input( controller_config_path );
 | 
					        std::ifstream input( controller_config_path );
 | 
				
			||||||
        if (input.is_open()) {
 | 
					        if (input.is_open()) {
 | 
				
			||||||
 | 
					            consume_bom(input);
 | 
				
			||||||
            std::map<std::string, std::pair<std::set<std::string>, std::string>> button_pairs;
 | 
					            std::map<std::string, std::pair<std::set<std::string>, std::string>> button_pairs;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            for( std::string line; getline( input, line ); ) {
 | 
					            for( std::string line; getline( input, line ); ) {
 | 
				
			||||||
| 
						 | 
					@ -282,6 +295,7 @@ uint32 create_localstorage_settings(Settings **settings_client_out, Settings **s
 | 
				
			||||||
        std::string dlc_config_path = Local_Storage::get_game_settings_path() + "DLC.txt";
 | 
					        std::string dlc_config_path = Local_Storage::get_game_settings_path() + "DLC.txt";
 | 
				
			||||||
        std::ifstream input( dlc_config_path );
 | 
					        std::ifstream input( dlc_config_path );
 | 
				
			||||||
        if (input.is_open()) {
 | 
					        if (input.is_open()) {
 | 
				
			||||||
 | 
					            consume_bom(input);
 | 
				
			||||||
            settings_client->unlockAllDLC(false);
 | 
					            settings_client->unlockAllDLC(false);
 | 
				
			||||||
            settings_server->unlockAllDLC(false);
 | 
					            settings_server->unlockAllDLC(false);
 | 
				
			||||||
            PRINT_DEBUG("Locking all DLC\n");
 | 
					            PRINT_DEBUG("Locking all DLC\n");
 | 
				
			||||||
| 
						 | 
					@ -322,7 +336,9 @@ uint32 create_localstorage_settings(Settings **settings_client_out, Settings **s
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        std::string dlc_config_path = Local_Storage::get_game_settings_path() + "app_paths.txt";
 | 
					        std::string dlc_config_path = Local_Storage::get_game_settings_path() + "app_paths.txt";
 | 
				
			||||||
        std::ifstream input( dlc_config_path );
 | 
					        std::ifstream input( dlc_config_path );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (input.is_open()) {
 | 
					        if (input.is_open()) {
 | 
				
			||||||
 | 
					            consume_bom(input);
 | 
				
			||||||
            for( std::string line; getline( input, line ); ) {
 | 
					            for( std::string line; getline( input, line ); ) {
 | 
				
			||||||
                if (!line.empty() && line[line.length()-1] == '\n') {
 | 
					                if (!line.empty() && line[line.length()-1] == '\n') {
 | 
				
			||||||
                    line.pop_back();
 | 
					                    line.pop_back();
 | 
				
			||||||
| 
						 | 
					@ -356,6 +372,7 @@ uint32 create_localstorage_settings(Settings **settings_client_out, Settings **s
 | 
				
			||||||
        std::string dlc_config_path = Local_Storage::get_game_settings_path() + "leaderboards.txt";
 | 
					        std::string dlc_config_path = Local_Storage::get_game_settings_path() + "leaderboards.txt";
 | 
				
			||||||
        std::ifstream input( dlc_config_path );
 | 
					        std::ifstream input( dlc_config_path );
 | 
				
			||||||
        if (input.is_open()) {
 | 
					        if (input.is_open()) {
 | 
				
			||||||
 | 
					            consume_bom(input);
 | 
				
			||||||
            settings_client->setCreateUnknownLeaderboards(false);
 | 
					            settings_client->setCreateUnknownLeaderboards(false);
 | 
				
			||||||
            settings_server->setCreateUnknownLeaderboards(false);
 | 
					            settings_server->setCreateUnknownLeaderboards(false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -397,7 +414,7 @@ uint32 create_localstorage_settings(Settings **settings_client_out, Settings **s
 | 
				
			||||||
        std::string stats_config_path = Local_Storage::get_game_settings_path() + "stats.txt";
 | 
					        std::string stats_config_path = Local_Storage::get_game_settings_path() + "stats.txt";
 | 
				
			||||||
        std::ifstream input( stats_config_path );
 | 
					        std::ifstream input( stats_config_path );
 | 
				
			||||||
        if (input.is_open()) {
 | 
					        if (input.is_open()) {
 | 
				
			||||||
 | 
					            consume_bom(input);
 | 
				
			||||||
            for( std::string line; getline( input, line ); ) {
 | 
					            for( std::string line; getline( input, line ); ) {
 | 
				
			||||||
                if (!line.empty() && line[line.length()-1] == '\n') {
 | 
					                if (!line.empty() && line[line.length()-1] == '\n') {
 | 
				
			||||||
                    line.pop_back();
 | 
					                    line.pop_back();
 | 
				
			||||||
| 
						 | 
					@ -462,6 +479,7 @@ uint32 create_localstorage_settings(Settings **settings_client_out, Settings **s
 | 
				
			||||||
        std::string depots_config_path = Local_Storage::get_game_settings_path() + "depots.txt";
 | 
					        std::string depots_config_path = Local_Storage::get_game_settings_path() + "depots.txt";
 | 
				
			||||||
        std::ifstream input( depots_config_path );
 | 
					        std::ifstream input( depots_config_path );
 | 
				
			||||||
        if (input.is_open()) {
 | 
					        if (input.is_open()) {
 | 
				
			||||||
 | 
					            consume_bom(input);
 | 
				
			||||||
            for( std::string line; getline( input, line ); ) {
 | 
					            for( std::string line; getline( input, line ); ) {
 | 
				
			||||||
                if (!line.empty() && line[line.length()-1] == '\n') {
 | 
					                if (!line.empty() && line[line.length()-1] == '\n') {
 | 
				
			||||||
                    line.pop_back();
 | 
					                    line.pop_back();
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue