author | andyq <andyq> | 2003-01-21 20:37:00 (UTC) |
---|---|---|
committer | andyq <andyq> | 2003-01-21 20:37:00 (UTC) |
commit | 0a6563fcc2f49857c581d9def24407a3a4ef526c (patch) (unidiff) | |
tree | f1b82a4bd7582ef2cb722cffb87eecff1e1f96e6 /noncore/games/sfcave-sdl/settings.cpp | |
parent | 50b5915b48fc5cbacf23e4d2b75d7a266f141a4a (diff) | |
download | opie-0a6563fcc2f49857c581d9def24407a3a4ef526c.zip opie-0a6563fcc2f49857c581d9def24407a3a4ef526c.tar.gz opie-0a6563fcc2f49857c581d9def24407a3a4ef526c.tar.bz2 |
Clean up of code - fixed memory leaks (most of them) and added new custom config menu
Diffstat (limited to 'noncore/games/sfcave-sdl/settings.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r-- | noncore/games/sfcave-sdl/settings.cpp | 98 |
1 files changed, 48 insertions, 50 deletions
diff --git a/noncore/games/sfcave-sdl/settings.cpp b/noncore/games/sfcave-sdl/settings.cpp index 914c4ec..20cce4f 100644 --- a/noncore/games/sfcave-sdl/settings.cpp +++ b/noncore/games/sfcave-sdl/settings.cpp | |||
@@ -5,6 +5,8 @@ | |||
5 | 5 | ||
6 | #include "settings.h" | 6 | #include "settings.h" |
7 | 7 | ||
8 | // Defined in util.h | ||
9 | string getHomeDir(); | ||
8 | 10 | ||
9 | #define DEFAULT_DIR "." | 11 | #define DEFAULT_DIR "." |
10 | #define DEFAULT_FILE "Settings.cfg" | 12 | #define DEFAULT_FILE "Settings.cfg" |
@@ -16,15 +18,8 @@ Settings::Settings( char * env_file, char * env_dir ) | |||
16 | // Store the correct environment directory | 18 | // Store the correct environment directory |
17 | if (env_dir == NULL) | 19 | if (env_dir == NULL) |
18 | { | 20 | { |
19 | char * homeDir = getenv( "HOME" );; | 21 | envFile = getHomeDir(); |
20 | 22 | envFile.append("/"); | |
21 | if ( homeDir ) | ||
22 | { | ||
23 | envFile.append(homeDir); | ||
24 | envFile.append("/"); | ||
25 | } | ||
26 | else | ||
27 | printf( "Environment var HOME not set!\n" ); | ||
28 | 23 | ||
29 | envFile.append(DEFAULT_DIR); | 24 | envFile.append(DEFAULT_DIR); |
30 | } | 25 | } |
@@ -42,15 +37,8 @@ Settings::Settings( char * env_file, char * env_dir ) | |||
42 | 37 | ||
43 | Settings::Settings() | 38 | Settings::Settings() |
44 | { | 39 | { |
45 | char * homeDir = getenv("HOME"); | 40 | envFile = getHomeDir(); |
46 | 41 | envFile.append("/"); | |
47 | if ( homeDir) | ||
48 | { | ||
49 | envFile.append(homeDir); | ||
50 | envFile.append("/"); | ||
51 | } | ||
52 | else | ||
53 | printf( "Environment var HOME not set!\n" ); | ||
54 | 42 | ||
55 | envFile.append(DEFAULT_DIR); | 43 | envFile.append(DEFAULT_DIR); |
56 | envFile.append("/"); | 44 | envFile.append("/"); |
@@ -110,6 +98,18 @@ bool Settings::readSetting(const string key_str,unsigned long& result) | |||
110 | return false; | 98 | return false; |
111 | } | 99 | } |
112 | 100 | ||
101 | bool Settings::readSetting(const string key_str,double& result) | ||
102 | { | ||
103 | string Buffer; | ||
104 | if (readSetting(key_str,Buffer)) | ||
105 | { | ||
106 | result = atof( Buffer.c_str() ); | ||
107 | return true; | ||
108 | } | ||
109 | else | ||
110 | return false; | ||
111 | } | ||
112 | |||
113 | bool Settings::readSetting(const string key_str,bool& result) | 113 | bool Settings::readSetting(const string key_str,bool& result) |
114 | { | 114 | { |
115 | string Buffer; | 115 | string Buffer; |
@@ -159,6 +159,14 @@ void Settings::writeSetting(const string key_str,const bool value) | |||
159 | value ?writeSetting(key_str,string("true")) :writeSetting(key_str,string("false")); | 159 | value ?writeSetting(key_str,string("true")) :writeSetting(key_str,string("false")); |
160 | } | 160 | } |
161 | 161 | ||
162 | void Settings::writeSetting(const string key_str,const double value) | ||
163 | { | ||
164 | char Buffer[30]; | ||
165 | |||
166 | sprintf(Buffer,"%lf",value); | ||
167 | writeSetting(key_str,string(Buffer)); | ||
168 | } | ||
169 | |||
162 | void Settings::writeSetting(const string key_str,const int value) | 170 | void Settings::writeSetting(const string key_str,const int value) |
163 | { | 171 | { |
164 | char Buffer[30]; | 172 | char Buffer[30]; |
@@ -195,41 +203,34 @@ void Settings::writeSetting(const string key_str,const string value) | |||
195 | { | 203 | { |
196 | // This function will write a value for the key key_str. If the key_str | 204 | // This function will write a value for the key key_str. If the key_str |
197 | // already exists then it will be overwritten. | 205 | // already exists then it will be overwritten. |
198 | |||
199 | std::vector<string> FileEntries; | ||
200 | FILE *fd=NULL,*ftemp=NULL; | 206 | FILE *fd=NULL,*ftemp=NULL; |
201 | char * dir_str; | ||
202 | char * dir_ptr; | ||
203 | char buf[MAX_LINE_SIZE]; | 207 | char buf[MAX_LINE_SIZE]; |
204 | char tempname[12]; | ||
205 | 208 | ||
206 | dir_str = strdup(envFile.c_str()); | 209 | string tmp = getHomeDir() + "/tmpsfcave.dat"; |
207 | printf( "dir = %s, file - %s\n", dir_str, envFile.c_str() ); | 210 | |
208 | if (dir_str) | 211 | // if file exists we need to save contents |
212 | fd = fopen( envFile.c_str(), "r" ); | ||
213 | ftemp = fopen( tmp.c_str(), "w" ); | ||
214 | if ( fd != NULL && ftemp != NULL ) | ||
209 | { | 215 | { |
210 | // remove file from the directory string | 216 | while (fgets(buf, MAX_LINE_SIZE-1, fd)) |
211 | dir_ptr = strrchr(dir_str, (int)'/'); | ||
212 | if (dir_ptr) | ||
213 | { | 217 | { |
214 | *dir_ptr = 0; | 218 | if ( strncmp( buf, key_str.c_str(), key_str.size() ) != 0 ) |
215 | 219 | fprintf( ftemp, "%s", buf ); | |
216 | // make the directory path if it does not exist | 220 | } |
217 | // mkdir(dir_str, 777 ); | 221 | fclose(fd); |
222 | } | ||
218 | 223 | ||
219 | // if file exists we need to save contents | 224 | if ( ftemp != NULL ) |
220 | if ((fd = fopen(envFile.c_str(), "r")) != NULL) | 225 | { |
221 | { | 226 | fprintf(ftemp, "%s\t%s\n", key_str.c_str(),value.c_str()); |
222 | while (fgets(buf, MAX_LINE_SIZE-1, fd)) | 227 | fclose( ftemp ); |
223 | FileEntries.push_back(string(buf)); | ||
224 | fclose(fd); | ||
225 | } | ||
226 | 228 | ||
227 | char *home = getenv( "HOME" ); | 229 | remove(envFile.c_str()); |
228 | string tmp; | 230 | rename( tmp.c_str(), envFile.c_str() ); |
229 | if ( home ) | 231 | } |
230 | tmp = home + string( "/" ) + "tmpsfcave.dat"; | 232 | /* |
231 | else | 233 | string tmp = getHomeDir() + "/tmpsfcave.dat"; |
232 | tmp = "./tmpsfcave.dat"; | ||
233 | strcpy(tempname,tmp.c_str() ); | 234 | strcpy(tempname,tmp.c_str() ); |
234 | printf( "tmp - %s\n", tempname ); | 235 | printf( "tmp - %s\n", tempname ); |
235 | if ((ftemp = fopen(tempname,"w")) != NULL) | 236 | if ((ftemp = fopen(tempname,"w")) != NULL) |
@@ -254,10 +255,6 @@ void Settings::writeSetting(const string key_str,const string value) | |||
254 | fprintf(ftemp, "%s\t%s\n", key_str.c_str(),value.c_str()); | 255 | fprintf(ftemp, "%s\t%s\n", key_str.c_str(),value.c_str()); |
255 | fflush(ftemp); | 256 | fflush(ftemp); |
256 | fclose(ftemp); | 257 | fclose(ftemp); |
257 | |||
258 | remove(envFile.c_str()); | ||
259 | |||
260 | rename( tempname, envFile.c_str() ); | ||
261 | } | 258 | } |
262 | else | 259 | else |
263 | printf( "Can't open file %s\n", envFile.c_str() ); | 260 | printf( "Can't open file %s\n", envFile.c_str() ); |
@@ -265,6 +262,7 @@ void Settings::writeSetting(const string key_str,const string value) | |||
265 | 262 | ||
266 | delete dir_str; | 263 | delete dir_str; |
267 | } | 264 | } |
265 | */ | ||
268 | } | 266 | } |
269 | 267 | ||
270 | void Settings::deleteFile(void) | 268 | void Settings::deleteFile(void) |