Make settings file finding sequence more straightforward

Avoid unnecessary access() call and make code read more linearly.
This commit is contained in:
Hisham Muhammad 2018-02-18 20:42:17 -03:00
parent 03b2581745
commit f914617508
1 changed files with 19 additions and 16 deletions

View File

@ -382,10 +382,8 @@ Settings* Settings_new(int cpuCount) {
free(htopDir); free(htopDir);
free(configDir); free(configDir);
struct stat st; struct stat st;
if (lstat(legacyDotfile, &st) != 0) { int err = lstat(legacyDotfile, &st);
st.st_mode = 0; if (err || S_ISLNK(st.st_mode)) {
}
if (access(legacyDotfile, R_OK) != 0 || S_ISLNK(st.st_mode)) {
free(legacyDotfile); free(legacyDotfile);
legacyDotfile = NULL; legacyDotfile = NULL;
} }
@ -394,19 +392,26 @@ Settings* Settings_new(int cpuCount) {
this->colorScheme = 0; this->colorScheme = 0;
this->changed = false; this->changed = false;
this->delay = DEFAULT_DELAY; this->delay = DEFAULT_DELAY;
bool ok = Settings_read(this, legacyDotfile ? legacyDotfile : this->filename); bool ok = false;
if (ok) {
if (legacyDotfile) { if (legacyDotfile) {
ok = Settings_read(this, legacyDotfile);
if (ok) {
// Transition to new location and delete old configuration file // Transition to new location and delete old configuration file
if (Settings_write(this)) if (Settings_write(this))
unlink(legacyDotfile); unlink(legacyDotfile);
} }
} else { free(legacyDotfile);
}
if (!ok) {
ok = Settings_read(this, this->filename);
}
if (!ok) {
this->changed = true; this->changed = true;
// TODO: how to get SYSCONFDIR correctly through Autoconf? // TODO: how to get SYSCONFDIR correctly through Autoconf?
char* systemSettings = String_cat(SYSCONFDIR, "/htoprc"); char* systemSettings = String_cat(SYSCONFDIR, "/htoprc");
ok = Settings_read(this, systemSettings); ok = Settings_read(this, systemSettings);
free(systemSettings); free(systemSettings);
}
if (!ok) { if (!ok) {
Settings_defaultMeters(this); Settings_defaultMeters(this);
this->hideKernelThreads = true; this->hideKernelThreads = true;
@ -414,8 +419,6 @@ Settings* Settings_new(int cpuCount) {
this->highlightThreads = true; this->highlightThreads = true;
this->headerMargin = true; this->headerMargin = true;
} }
}
free(legacyDotfile);
return this; return this;
} }