try and be more robust on profile.cfg load.

SVN revision: 45014
This commit is contained in:
Carsten Haitzler 2010-01-10 16:25:26 +00:00
parent 07ccfbae03
commit bbd8bddc1e
2 changed files with 62 additions and 25 deletions

View File

@ -49,6 +49,43 @@ static E_Config_DD *_e_config_syscon_action_edd = NULL;
EAPI int E_EVENT_CONFIG_ICON_THEME = 0;
EAPI int E_EVENT_CONFIG_MODE_CHANGED = 0;
static char *
_e_config_profile_name_get(Eet_File *ef)
{
/* profile config exists */
char *data, *s = NULL;
int data_len = 0;
data = eet_read(ef, "config", &data_len);
if ((data) && (data_len > 0))
{
int ok = 1;
for (s = data; s < (data + data_len); s++)
{
// if profile is not all ascii (valid printable ascii - no
// control codes etc.) or it contains a '/' (invalid as its a
// directory delimiter) - then it's invalid
if ((*s < ' ') || (*s > '~') || (*s == '/'))
{
ok = 0;
break;
}
}
if (ok)
{
s = malloc(data_len + 1);
if (s)
{
memcpy(s, data, data_len);
s[data_len] = 0;
}
}
free(data);
}
return s;
}
/* externally accessible functions */
EAPI int
e_config_init(void)
@ -68,7 +105,13 @@ e_config_init(void)
/* try user profile config */
e_user_dir_concat_static(buf, "config/profile.cfg");
ef = eet_open(buf, EET_FILE_MODE_READ);
if (!ef)
if (ef)
{
_e_config_profile = _e_config_profile_name_get(ef);
eet_close(ef);
ef = NULL;
}
if (!_e_config_profile)
{
int i;
@ -76,35 +119,28 @@ e_config_init(void)
{
e_user_dir_snprintf(buf, sizeof(buf), "config/profile.%i.cfg", i);
ef = eet_open(buf, EET_FILE_MODE_READ);
if (ef) break;
if (ef)
{
_e_config_profile = _e_config_profile_name_get(ef);
eet_close(ef);
ef = NULL;
if (_e_config_profile) break;
}
}
if (!ef)
if (!_e_config_profile)
{
/* use system if no user profile config */
e_prefix_data_concat_static(buf, "data/config/profile.cfg");
ef = eet_open(buf, EET_FILE_MODE_READ);
}
}
if (ef)
{
/* profile config exists */
char *data;
int data_len = 0;
data = eet_read(ef, "config", &data_len);
if ((data) && (data_len > 0))
{
_e_config_profile = malloc(data_len + 1);
if (_e_config_profile)
{
memcpy(_e_config_profile, data, data_len);
_e_config_profile[data_len] = 0;
}
free(data);
}
eet_close(ef);
}
else
if (ef)
{
_e_config_profile = _e_config_profile_name_get(ef);
eet_close(ef);
ef = NULL;
}
if (!_e_config_profile)
{
/* no profile config - try other means */
char *link = NULL;
@ -1438,7 +1474,7 @@ e_config_domain_save(const char *domain, E_Config_DD *edd, const void *data)
ret = ecore_file_mv(buf2, buf);
if (!ret)
{
printf("*** Error saving profile. ***");
printf("*** Error saving config. ***");
}
}
ecore_file_unlink(buf2);

View File

@ -6,12 +6,13 @@
#Xephyr :1 -noreset -ac -br -dpi 186 -screen 480x272x16 &
#Xephyr :1 -noreset -ac -br -dpi 181 -screen 320x320x16 &
#Xephyr :1 -noreset -ac -br -dpi 183 -screen 320x480x16 -host-cursor &
Xephyr :1 -noreset -ac -br -dpi 183 -screen 480x320x16 -host-cursor &
#Xephyr :1 -noreset -ac -br -dpi 183 -screen 480x320x16 -host-cursor &
#Xephyr :1 -noreset -ac -br -dpi 183 -screen 480x800x16 &
#Xephyr :1 -noreset -ac -br -dpi 183 -screen 800x480x16 &
#Xephyr :1 -noreset -ac -br -dpi 284 -screen 480x640x16 &
#Xephyr :1 -noreset -ac -br -dpi 284 -screen 640x480x16 -host-cursor &
Xephyr :1 -noreset -ac -br -dpi 284 -screen 480x800 -host-cursor &
#Xephyr :1 -noreset -ac -br -dpi 284 -screen 480x640 &
#Xephyr :1 -noreset -ac -br -dpi 284 -screen 640x480 &
#Xephyr :1 -noreset -ac -br -dpi 181 -screen 320x320 &