Commit 3f62a2857c7aba284f1485b6e332c05103960100

Authored by Perry Werneck
1 parent 438e6222

Fixing problem with default configuration file.

Showing 2 changed files with 46 additions and 25 deletions   Show diff stats
src/pw3270/common/config.c
... ... @@ -29,7 +29,13 @@
29 29 *
30 30 */
31 31  
  32 + #define ENABLE_NLS
  33 + #define GETTEXT_PACKAGE PACKAGE_NAME
  34 +
  35 + #include <libintl.h>
  36 + #include <glib/gi18n.h>
32 37 #include <gtk/gtk.h>
  38 +
33 39 #include "common.h"
34 40 #include <stdarg.h>
35 41 #include <glib/gstdio.h>
... ... @@ -58,7 +64,6 @@
58 64 #else
59 65  
60 66 static GKeyFile * program_config = NULL;
61   - static const gchar * mask = "%s" G_DIR_SEPARATOR_S "%s.conf";
62 67  
63 68 #endif // HAVE_WIN_REGISTRY
64 69  
... ... @@ -192,51 +197,69 @@
192 197 g_get_user_config_dir,
193 198 g_get_user_data_dir,
194 199 g_get_home_dir,
195   -
196 200 };
197   - gchar *filename;
198   - int f;
199 201  
200   - const gchar * const *sysconfig;
  202 + size_t f;
  203 + g_autofree gchar * name = g_strconcat(g_get_application_name(),".conf",NULL);
201 204  
202   -#ifdef DEBUG
203   - filename = g_strdup_printf(mask,".",g_get_application_name());
204   - trace("Checking for %s",filename);
205   - if(g_file_test(filename,G_FILE_TEST_IS_REGULAR))
206   - return filename;
207   - g_free(filename);
208   -#endif
  205 + //
  206 + // First search the user data
  207 + //
209 208  
210 209 for(f=0;f<G_N_ELEMENTS(dir);f++)
211 210 {
212   - filename = g_strdup_printf(mask,dir[f](),g_get_application_name());
  211 + gchar *filename = g_build_filename(dir[f](),name,NULL);
  212 +
213 213 trace("Checking for %s",filename);
  214 +
214 215 if(g_file_test(filename,G_FILE_TEST_IS_REGULAR))
215 216 return filename;
216 217 g_free(filename);
  218 +
217 219 }
218 220  
219   - sysconfig = g_get_system_config_dirs();
220   - for(f=0;sysconfig[f];f++)
  221 +#ifdef DATADIR
  222 + //
  223 + // Search the application DATADIR
  224 + //
221 225 {
222   - filename = g_strdup_printf(mask,sysconfig[f],g_get_application_name());
  226 + gchar *filename = g_build_filename(G_STRINGIFY(DATADIR),name,NULL);
  227 +
223 228 trace("Checking for %s",filename);
  229 +
224 230 if(g_file_test(filename,G_FILE_TEST_IS_REGULAR))
225 231 return filename;
226 232 g_free(filename);
  233 +
227 234 }
  235 +#endif // DATADIR
  236 +
  237 + //
  238 + // Search the system folders
  239 + //
228 240  
229   - sysconfig = g_get_system_data_dirs();
  241 + const gchar * const * sysconfig = g_get_system_config_dirs();
230 242 for(f=0;sysconfig[f];f++)
231 243 {
232   - filename = g_strdup_printf("%s" G_DIR_SEPARATOR_S PACKAGE_NAME G_DIR_SEPARATOR_S "%s.conf",sysconfig[f],g_get_application_name());
  244 + gchar *filename = g_build_filename(sysconfig[f],name,NULL);
233 245 trace("Checking for %s",filename);
234 246 if(g_file_test(filename,G_FILE_TEST_IS_REGULAR))
235 247 return filename;
236 248 g_free(filename);
237 249 }
238 250  
239   - return g_strdup_printf(mask,g_get_user_config_dir(),g_get_application_name());
  251 + const gchar * const * sysdata = g_get_system_data_dirs();
  252 + for(f=0;sysdata[f];f++)
  253 + {
  254 + gchar *filename = g_build_filename(sysdata[f],name,NULL);
  255 + trace("Checking for %s",filename);
  256 + if(g_file_test(filename,G_FILE_TEST_IS_REGULAR))
  257 + return filename;
  258 + g_free(filename);
  259 + }
  260 +
  261 + return g_build_filename(g_get_user_config_dir(),name);
  262 +
240 263 }
241 264 #endif // #ifdef HAVE_WIN_REGISTRY
242 265  
... ... @@ -389,6 +412,7 @@ void configuration_init(void)
389 412  
390 413 if(filename)
391 414 {
  415 + g_message(_("Loading %s"),filename);
392 416 g_key_file_load_from_file(program_config,filename,G_KEY_FILE_NONE,NULL);
393 417 g_free(filename);
394 418 }
... ... @@ -530,19 +554,16 @@ void configuration_deinit(void)
530 554  
531 555 if(text)
532 556 {
533   - gchar *filename = g_strdup_printf(mask,g_get_user_config_dir(),g_get_application_name());
  557 + g_autofree gchar * name = g_strconcat(g_get_application_name(),".conf",NULL);
  558 + g_autofree gchar * filename = g_build_filename(g_get_user_config_dir(),name,NULL);
534 559  
535 560 trace("Saving configuration in \"%s\"",filename);
536 561  
537 562 g_mkdir_with_parents(g_get_user_config_dir(),S_IRUSR|S_IWUSR);
538   -
539 563 g_file_set_contents(filename,text,-1,NULL);
540 564  
541   - g_free(filename);
542   - g_free(text);
543 565 }
544 566  
545   -
546 567 g_key_file_free(program_config);
547 568 program_config = NULL;
548 569  
... ...
src/pw3270/main.c
... ... @@ -307,7 +307,7 @@ int main(int argc, char *argv[])
307 307 { "appname", 'a', 0, G_OPTION_ARG_STRING, &appname, N_( "Application name" ), PACKAGE_NAME },
308 308 { "datadir", 'd', 0, G_OPTION_ARG_CALLBACK, datadir, N_( "Path to application data files" ), NULL },
309 309 #endif // WIN32
310   - { "session", 's', 0, G_OPTION_ARG_STRING, &session_name, N_( "Session name" ), NULL },
  310 + { "session", 's', 0, G_OPTION_ARG_STRING, &session_name, N_( "Session name" ), PACKAGE_NAME },
311 311 { "host", 'h', 0, G_OPTION_ARG_STRING, &host, N_( "Host to connect"), host },
312 312 { "colors", 'c', 0, G_OPTION_ARG_CALLBACK, optcolors, N_( "Set reported colors (8/16)" ), "16" },
313 313 { "systype", 't', 0, G_OPTION_ARG_STRING, &systype, N_( "Host system type" ), "S390" },
... ...