void tr_sessionLoadSettings( tr_benc * d, const char * configDir, const char * appName ) { char * filename; tr_benc fileSettings; tr_benc sessionDefaults; tr_benc tmp; assert( tr_bencIsDict( d ) ); /* initializing the defaults: caller may have passed in some app-level defaults. * preserve those and use the session defaults to fill in any missing gaps. */ tr_bencInitDict( &sessionDefaults, 0 ); tr_sessionGetDefaultSettings( &sessionDefaults ); tr_bencMergeDicts( &sessionDefaults, d ); tmp = *d; *d = sessionDefaults; sessionDefaults = tmp; /* if caller didn't specify a config dir, use the default */ if( !configDir || !*configDir ) configDir = tr_getDefaultConfigDir( appName ); /* file settings override the defaults */ filename = tr_buildPath( configDir, "settings.json", NULL ); if( !tr_bencLoadJSONFile( filename, &fileSettings ) ) { tr_bencMergeDicts( d, &fileSettings ); tr_bencFree( &fileSettings ); } /* cleanup */ tr_bencFree( &sessionDefaults ); tr_free( filename ); }
static char const* getConfigDir(int argc, char const* const* argv) { int c; char const* configDir = NULL; char const* optarg; int const ind = tr_optind; while ((c = tr_getopt(getUsage(), argc, argv, options, &optarg)) != TR_OPT_DONE) { if (c == 'g') { configDir = optarg; break; } } tr_optind = ind; if (configDir == NULL) { configDir = tr_getDefaultConfigDir(MY_NAME); } return configDir; }
static const char* getConfigDir (int argc, const char ** argv) { int c; const char * configDir = NULL; const char * optarg; const int ind = tr_optind; while ((c = tr_getopt (getUsage (), argc, argv, options, &optarg))) { if (c == 'g') { configDir = optarg; break; } } tr_optind = ind; if (configDir == NULL) configDir = tr_getDefaultConfigDir (MY_NAME); return configDir; }