diff options
author | Magnus Holmgren <magnushol@gmail.com> | 2007-01-23 19:54:09 +0000 |
---|---|---|
committer | Magnus Holmgren <magnushol@gmail.com> | 2007-01-23 19:54:09 +0000 |
commit | c23f56559fb7faad6e426c131bc26764420580fe (patch) | |
tree | d42e00bc81c720b4551ac79710d75d6e736424b6 /apps | |
parent | 1b85f60ae0b0c1e24595e9551ce5eee10f15b182 (diff) | |
download | rockbox-c23f56559fb7faad6e426c131bc26764420580fe.tar.gz rockbox-c23f56559fb7faad6e426c131bc26764420580fe.zip |
Reduce stack usage in settings_write_config (by about 460 bytes). Should allow for a smaller ATA thread stack.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@12095 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps')
-rw-r--r-- | apps/settings.c | 31 |
1 files changed, 21 insertions, 10 deletions
diff --git a/apps/settings.c b/apps/settings.c index c7794e1015..1a7d159666 100644 --- a/apps/settings.c +++ b/apps/settings.c | |||
@@ -262,7 +262,7 @@ bool settings_write_config(char* filename) | |||
262 | { | 262 | { |
263 | int i; | 263 | int i; |
264 | int fd; | 264 | int fd; |
265 | char value[MAX_PATH]; | 265 | char value[MAX_FILENAME * 3]; /* More than enough for all current values */ |
266 | fd = open(filename,O_CREAT|O_TRUNC|O_WRONLY); | 266 | fd = open(filename,O_CREAT|O_TRUNC|O_WRONLY); |
267 | if (fd < 0) | 267 | if (fd < 0) |
268 | return false; | 268 | return false; |
@@ -287,27 +287,38 @@ bool settings_write_config(char* filename) | |||
287 | } | 287 | } |
288 | else | 288 | else |
289 | #endif | 289 | #endif |
290 | if (settings[i].cfg_vals == NULL) | 290 | if (settings[i].cfg_vals == NULL) |
291 | { | 291 | { |
292 | snprintf(value,MAX_PATH,"%d",*(int*)settings[i].setting); | 292 | snprintf(value,MAX_PATH,"%d",*(int*)settings[i].setting); |
293 | } | 293 | } |
294 | else | 294 | else |
295 | { | 295 | { |
296 | char *s,*end; | 296 | const char *s; |
297 | char vals[MAX_PATH]; | 297 | const char *end; |
298 | int val = 0; | 298 | int val = 0; |
299 | strncpy(vals,settings[i].cfg_vals,MAX_PATH); | 299 | |
300 | s = strtok_r(vals,",",&end); | 300 | end = s = settings[i].cfg_vals; |
301 | while (s) | 301 | |
302 | do | ||
302 | { | 303 | { |
304 | while (*end != 0 && *end != ',') | ||
305 | { | ||
306 | end++; | ||
307 | } | ||
308 | |||
303 | if (val == *(int*)settings[i].setting) | 309 | if (val == *(int*)settings[i].setting) |
304 | { | 310 | { |
305 | strncpy(value,s,MAX_PATH); | 311 | strncpy(value, s, end - s); |
312 | value[end - s] = 0; | ||
306 | break; | 313 | break; |
307 | } | 314 | } |
308 | val++; | 315 | else |
309 | s = strtok_r(NULL,",",&end); | 316 | { |
317 | s = end + 1; | ||
318 | val++; | ||
319 | } | ||
310 | } | 320 | } |
321 | while (*end++); | ||
311 | } | 322 | } |
312 | break; | 323 | break; |
313 | case F_T_BOOL: | 324 | case F_T_BOOL: |