change to exe dir on startup and add some extra guards around boost program option parsing.
This commit is contained in:
		
							parent
							
								
									e87bdb8a95
								
							
						
					
					
						commit
						a18497ca7b
					
				
					 2 changed files with 27 additions and 21 deletions
				
			
		| 
						 | 
				
			
			@ -21,11 +21,10 @@
 | 
			
		|||
 | 
			
		||||
#include "config.h"
 | 
			
		||||
 | 
			
		||||
#include <SDL2/SDL_filesystem.h>
 | 
			
		||||
 | 
			
		||||
#include <boost/program_options/options_description.hpp>
 | 
			
		||||
#include <boost/program_options/parsers.hpp>
 | 
			
		||||
#include <boost/program_options/variables_map.hpp>
 | 
			
		||||
 | 
			
		||||
#include <fstream>
 | 
			
		||||
 | 
			
		||||
#include "debugwriter.h"
 | 
			
		||||
| 
						 | 
				
			
			@ -48,13 +47,7 @@ Config::Config()
 | 
			
		|||
      solidFonts(false),
 | 
			
		||||
      gameFolder("."),
 | 
			
		||||
      allowSymlinks(false)
 | 
			
		||||
{
 | 
			
		||||
    char *dataDir = SDL_GetBasePath();
 | 
			
		||||
    if (dataDir) {
 | 
			
		||||
        gameFolder = dataDir;
 | 
			
		||||
        SDL_free(dataDir);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
{ }
 | 
			
		||||
 | 
			
		||||
void Config::read()
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -74,6 +67,9 @@ void Config::read()
 | 
			
		|||
    PO_DESC(allowSymlinks, bool) \
 | 
			
		||||
    PO_DESC(customScript, std::string)
 | 
			
		||||
 | 
			
		||||
// Not gonna take your shit boost
 | 
			
		||||
#define GUARD_ALL( exp ) try { exp } catch(...) {}
 | 
			
		||||
 | 
			
		||||
#define PO_DESC(key, type) (#key, po::value< type >()->default_value(key))
 | 
			
		||||
 | 
			
		||||
	po::options_description podesc;
 | 
			
		||||
| 
						 | 
				
			
			@ -86,13 +82,14 @@ void Config::read()
 | 
			
		|||
	confFile.open("mkxp.conf");
 | 
			
		||||
 | 
			
		||||
	po::variables_map vm;
 | 
			
		||||
	po::store(po::parse_config_file(confFile, podesc, true), vm);
 | 
			
		||||
	po::notify(vm);
 | 
			
		||||
 | 
			
		||||
	if (confFile) {
 | 
			
		||||
		GUARD_ALL( po::store(po::parse_config_file(confFile, podesc, true), vm); )
 | 
			
		||||
		po::notify(vm);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	confFile.close();
 | 
			
		||||
 | 
			
		||||
// Not gonna take your shit boost
 | 
			
		||||
#define GUARD_ALL( exp ) try { exp } catch(...) {}
 | 
			
		||||
 | 
			
		||||
#undef PO_DESC
 | 
			
		||||
#define PO_DESC(key, type) GUARD_ALL( key = vm[#key].as< type >(); )
 | 
			
		||||
| 
						 | 
				
			
			@ -128,7 +125,7 @@ void Config::readGameINI()
 | 
			
		|||
	iniFile.open((iniPath).c_str());
 | 
			
		||||
 | 
			
		||||
	po::variables_map vm;
 | 
			
		||||
	po::store(po::parse_config_file(iniFile, podesc, true), vm);
 | 
			
		||||
	GUARD_ALL( po::store(po::parse_config_file(iniFile, podesc, true), vm); )
 | 
			
		||||
	po::notify(vm);
 | 
			
		||||
 | 
			
		||||
	iniFile.close();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										23
									
								
								src/main.cpp
									
										
									
									
									
								
							
							
						
						
									
										23
									
								
								src/main.cpp
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -232,18 +232,27 @@ int rgssThreadFun(void *userdata)
 | 
			
		|||
 | 
			
		||||
int main(int, char *argv[])
 | 
			
		||||
{
 | 
			
		||||
	// initialize SDL first
 | 
			
		||||
	if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_JOYSTICK) < 0)
 | 
			
		||||
	{
 | 
			
		||||
		Debug() << "Error initializing SDL:" << SDL_GetError();
 | 
			
		||||
		
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// set working directory
 | 
			
		||||
	char *dataDir = SDL_GetBasePath();
 | 
			
		||||
	if (dataDir) {
 | 
			
		||||
		chdir(dataDir);
 | 
			
		||||
		SDL_free(dataDir);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// now we load the config
 | 
			
		||||
	Config conf;
 | 
			
		||||
 | 
			
		||||
	conf.read();
 | 
			
		||||
	conf.readGameINI();
 | 
			
		||||
 | 
			
		||||
	if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_JOYSTICK) < 0)
 | 
			
		||||
	{
 | 
			
		||||
		Debug() << "Error initializing SDL:" << SDL_GetError();
 | 
			
		||||
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	int imgFlags = IMG_INIT_PNG | IMG_INIT_JPG;
 | 
			
		||||
	if (IMG_Init(imgFlags) != imgFlags)
 | 
			
		||||
	{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue