summaryrefslogtreecommitdiff
path: root/apps/settings.c
diff options
context:
space:
mode:
authorJonathan Gordon <rockbox@jdgordon.info>2007-01-29 12:32:56 +0000
committerJonathan Gordon <rockbox@jdgordon.info>2007-01-29 12:32:56 +0000
commitbc60af1dafe4f223cca8a8b4fe58e6b537a419c4 (patch)
tree357265154c6ce51e32084c762d7ed8edc924c3ff /apps/settings.c
parent12f3769adb19c884d465a35e656a5de2835be771 (diff)
downloadrockbox-bc60af1dafe4f223cca8a8b4fe58e6b537a419c4.zip
rockbox-bc60af1dafe4f223cca8a8b4fe58e6b537a419c4.tar.gz
rockbox-bc60af1dafe4f223cca8a8b4fe58e6b537a419c4.tar.bz2
rockbox-bc60af1dafe4f223cca8a8b4fe58e6b537a419c4.tar.xz
fix bool settings which don't use "off,on" for their config values. Neatens up the read/write code a bit also
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@12141 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/settings.c')
-rw-r--r--apps/settings.c108
1 files changed, 63 insertions, 45 deletions
diff --git a/apps/settings.c b/apps/settings.c
index 302ea58..ed104d9 100644
--- a/apps/settings.c
+++ b/apps/settings.c
@@ -259,6 +259,29 @@ static int hex_to_rgb(const char* hex)
return 0;
}
#endif
+static bool cfg_int_to_string(int setting_id, int val, char* buf)
+{
+ const char* start = settings[setting_id].cfg_vals;
+ char* end = NULL;
+ int count = 0;
+ while (count < val)
+ {
+ start = strchr(start,',');
+ if (!start)
+ return false;
+ count++;
+ start++;
+ }
+ end = strchr(start,',');
+ if (end == NULL)
+ strcpy(buf,start);
+ else
+ {
+ strncpy(buf, start, end-start);
+ buf[end-start] = '\0';
+ }
+ return true;
+}
bool settings_write_config(char* filename)
{
@@ -274,6 +297,7 @@ bool settings_write_config(char* filename)
{
if (settings[i].cfg_name == NULL)
continue;
+ value[0] = '\0';
switch (settings[i].flags&F_T_MASK)
{
case F_T_INT:
@@ -295,36 +319,12 @@ bool settings_write_config(char* filename)
}
else
{
- const char *s;
- const char *end;
- int val = 0;
-
- end = s = settings[i].cfg_vals;
-
- do
- {
- while (*end != 0 && *end != ',')
- {
- end++;
- }
-
- if (val == *(int*)settings[i].setting)
- {
- strncpy(value, s, end - s);
- value[end - s] = 0;
- break;
- }
- else
- {
- s = end + 1;
- val++;
- }
- }
- while (*end++);
+ cfg_int_to_string(i,*(int*)settings[i].setting,value);
}
break;
case F_T_BOOL:
- strcpy(value,*(bool*)settings[i].setting == true?"on":"off");
+ cfg_int_to_string(i,
+ *(bool*)settings[i].setting==false?0:1,value);
break;
case F_T_CHARPTR:
case F_T_UCHARPTR:
@@ -343,7 +343,6 @@ bool settings_write_config(char* filename)
} /* switch () */
if (value[0])
fdprintf(fd,"%s: %s\r\n",settings[i].cfg_name,value);
- value[0] = '\0';
} /* for(...) */
close(fd);
return true;
@@ -717,6 +716,36 @@ void set_file(char* filename, char* setting, int maxlen)
settings_save();
}
+static bool cfg_string_to_int(int setting_id, int* out, char* str)
+{
+ const char* start = settings[setting_id].cfg_vals;
+ char* end = NULL;
+ char temp[MAX_PATH];
+ int count = 0;
+ while (1)
+ {
+ end = strchr(start, ',');
+ if (!end)
+ {
+ if (!strcmp(str, start))
+ {
+ *out = count;
+ return true;
+ }
+ else return false;
+ }
+ strncpy(temp, start, end-start);
+ temp[end-start] = '\0';
+ if (!strcmp(str, temp))
+ {
+ *out = count;
+ return true;
+ }
+ start = end +1;
+ count++;
+ }
+ return false;
+}
bool settings_load_config(const char* file, bool apply)
{
@@ -754,27 +783,16 @@ bool settings_load_config(const char* file, bool apply)
}
else
{
- char *s,*end;
- char vals[MAX_PATH];
- int val = 0;
- strncpy(vals,settings[i].cfg_vals,MAX_PATH);
- s = strtok_r(vals,",",&end);
- while (s)
- {
- if (!strcmp(value,s))
- {
- *(int*)settings[i].setting = val;
- break;
- }
- val++;
- s = strtok_r(NULL,",",&end);
- }
+ cfg_string_to_int(i,(int*)settings[i].setting,value);
}
break;
case F_T_BOOL:
- *(bool*)settings[i].setting =
- !strncmp(value,"off",3)?false:true;
+ {
+ int temp;
+ if (cfg_string_to_int(i,&temp,value))
+ *(bool*)settings[i].setting = (temp==0?false:true);
break;
+ }
case F_T_CHARPTR:
case F_T_UCHARPTR:
{