#include "acidlaunch.h" #include #include #include #include using std::strstream; char* prefsFileName(const char* name) { char* homedir = getenv("HOME"); char* rcfile; rcfile = new char[strlen(homedir) + strlen("/.acidlaunch/") + strlen(name) + 1]; sprintf(rcfile, "%s/.acidlaunch/%s", homedir, name); //printf("%s\n", rcfile); return rcfile; } AcidLaunchNode* readConfig(const string& name) { xmlDocPtr tree; xmlNodePtr root; AcidLaunchNode* config = NULL; char* filename = prefsFileName(name.c_str()); if(tree = xmlParseFile(filename)) { if(root = xmlDocGetRootElement(tree)) { if(!xmlStrcmp(root->name, (const xmlChar*)"acidlaunchconfig")) { config = new AcidLaunchNode(root); config->parseNodes(root); } } xmlFreeDoc(tree); } else { cerr << "Error reading prefs file!\n"; exit(10); } delete[] filename; return config; } /* check if ~/.acidlaunch exists, and if it doesn't, copy the default prefs dir over */ static const char* prefsfilenames[] = {"config.xml", "default.png"}; static const int numprefsfilenames = 2; #define SHAREDIR PREFIX "/share/acidlaunch/" bool createInitialConfig() { string prefsdir; struct stat filestat; prefsdir = getenv("HOME"); prefsdir+="/.acidlaunch"; //cout << PREFIX << endl << SHAREDIR << endl; /* check if dir exists - create it if it doesn't */ if(stat(prefsdir.c_str(), &filestat)) { if(mkdir(prefsdir.c_str(), 0700)) { cerr << "failed to create directory\n"; return false; } } /* check prefs files - copy over if they doesn't exist */ for(int i=0; i < numprefsfilenames; i++) { /* work out the filename */ char* prefsfile = prefsFileName(prefsfilenames[i]); /* check if it exists */ if(stat(prefsfile, &filestat)) { /* it doesn't - copy it over */ string command; command = "cp "; command+= SHAREDIR; command+= prefsfilenames[i]; command+= " "; command+= prefsfile; //cerr << command << endl; system(command.c_str()); } } return true; }