if ( f ) {
gchar buf[4096];
- gchar *key, *val;
+ gchar *key = NULL;
+ gchar *val = NULL;
VikLayerTypedParamData *oldval, *newval;
while ( ! feof (f) ) {
if (fgets(buf,sizeof(buf),f) == NULL)
return FALSE;
}
-static void preferences_run_setparam ( gpointer notused, guint16 i, VikLayerParamData data, VikLayerParam *params )
+static void preferences_run_setparam ( gpointer notused, guint16 i, VikLayerParamData data, VikLayerParam *vlparams )
{
- if ( params[i].type == VIK_LAYER_PARAM_STRING_LIST )
+ // Don't change stored pointer values
+ if ( vlparams[i].type == VIK_LAYER_PARAM_PTR )
+ return;
+ if ( vlparams[i].type == VIK_LAYER_PARAM_STRING_LIST )
g_critical ( "Param strings not implemented in preferences"); //fake it
- g_hash_table_insert ( values, (gchar *)(params[i].name), vik_layer_typed_param_data_copy_from_data(params[i].type, data) );
+ g_hash_table_insert ( values, (gchar *)(vlparams[i].name), vik_layer_typed_param_data_copy_from_data(vlparams[i].type, data) );
}
/* Allow preferences to be manipulated externally */
-void a_preferences_run_setparam ( VikLayerParamData data, VikLayerParam *params )
+void a_preferences_run_setparam ( VikLayerParamData data, VikLayerParam *vlparams )
{
- preferences_run_setparam (NULL, 0, data, params);
+ preferences_run_setparam (NULL, 0, data, vlparams);
}
static VikLayerParamData preferences_run_getparam ( gpointer notused, guint16 i, gboolean notused2 )
{
gchar *fn = g_build_filename(a_get_viking_dir(), VIKING_PREFS_FILE, NULL);
- // TODO: error checking
FILE *f = g_fopen(fn, "w");
/* Since preferences files saves OSM login credentials,
* it'll be better to store it in secret.
*/
- g_chmod(fn, 0600);
+ if ( g_chmod(fn, 0600) != 0 )
+ g_warning ( "%s: Failed to set permissions on %s", __FUNCTION__, fn );
g_free ( fn );
if ( f ) {
for ( i = 0; i < params->len; i++ ) {
param = (VikLayerParam *) g_ptr_array_index(params,i);
val = (VikLayerTypedParamData *) g_hash_table_lookup ( values, param->name );
- g_assert ( val != NULL );
- file_write_layer_param ( f, param->name, val->type, val->data );
+ if ( val )
+ if ( val->type != VIK_LAYER_PARAM_PTR )
+ file_write_layer_param ( f, param->name, val->type, val->data );
}
fclose(f);
f = NULL;
void a_preferences_register(VikLayerParam *pref, VikLayerParamData defaultval, const gchar *group_key )
{
+ // All preferences should be registered before loading
+ if ( loaded )
+ g_critical ( "REGISTERING preference %s after LOADING from " VIKING_PREFS_FILE, pref->name );
/* copy value */
VikLayerParam *newpref = g_new(VikLayerParam,1);
*newpref = *pref;
VikLayerParamData *a_preferences_get(const gchar *key)
{
if ( ! loaded ) {
+ g_debug ( "%s: First time: %s\n", __FUNCTION__, key );
/* since we can't load the file in a_preferences_init (no params registered yet),
* do it once before we get the first key. */
preferences_load_from_file();