diff options
| author | Albrecht Schlosser <albrechts.fltk@online.de> | 2022-02-03 20:46:13 +0100 |
|---|---|---|
| committer | Albrecht Schlosser <albrechts.fltk@online.de> | 2022-02-03 20:46:13 +0100 |
| commit | c483c4c5de8ffa732eac2a8710008a1c67a23955 (patch) | |
| tree | 87071d9d03f2d225b5b8869d4d7fdabaf84c6f74 /src/drivers | |
| parent | 80a22e97e8f61c4fb3cfd13dd4ee81c3a46c5884 (diff) | |
Fl_Preferences (X11): Fix detection of preferences directory
- Fix compiler warning [-Wmaybe-uninitialized] for variable home
- Reformat enum 'Root' for better readability
- Add new enum values CORE_SYSTEM_L and CORE_USER_L
- Improve documentation (deprecated and new enums)
- Initialize internal static variable 'filename' which could be used
uninitialized and thus return any previous value (type == MEMORY)
Diffstat (limited to 'src/drivers')
| -rw-r--r-- | src/drivers/X11/Fl_X11_System_Driver.cxx | 33 |
1 files changed, 19 insertions, 14 deletions
diff --git a/src/drivers/X11/Fl_X11_System_Driver.cxx b/src/drivers/X11/Fl_X11_System_Driver.cxx index 64cac3779..e62fdf8b8 100644 --- a/src/drivers/X11/Fl_X11_System_Driver.cxx +++ b/src/drivers/X11/Fl_X11_System_Driver.cxx @@ -455,32 +455,37 @@ void Fl_X11_System_Driver::newUUID(char *uuidBuffer) /* Note: `prefs` can be NULL! */ -char *Fl_X11_System_Driver::preference_rootnode(Fl_Preferences * /*prefs*/, Fl_Preferences::Root root, const char *vendor, +char *Fl_X11_System_Driver::preference_rootnode(Fl_Preferences * /*prefs*/, + Fl_Preferences::Root root, + const char *vendor, const char *application) { static char *filename = 0L; if (!filename) filename = (char*)::calloc(1, FL_PATH_MAX); - const char *home; - switch (root&Fl_Preferences::ROOT_MASK) { + const char *home = ""; + int pref_type = root & Fl_Preferences::ROOT_MASK; + switch (pref_type) { case Fl_Preferences::USER: home = getenv("HOME"); // make sure that $HOME is set to an existing directory - if ( (home==NULL) || (home[0]==0) || (::access(home, F_OK)==-1) ) { + if ((home == NULL) || (home[0] == 0) || (::access(home, F_OK) == -1)) { struct passwd *pw = getpwuid(getuid()); - home = pw->pw_dir; + if (pw) + home = pw->pw_dir; } - if ( (home==0L) || (home[0]==0) || (::access(home, F_OK)==-1) ) { + if ((home == 0L) || (home[0] == 0) || (::access(home, F_OK) == -1)) return NULL; - } else { - strlcpy(filename, home, FL_PATH_MAX); - if (filename[strlen(filename)-1] != '/') - strlcat(filename, "/", FL_PATH_MAX); - strlcat(filename, ".fltk/", FL_PATH_MAX); - } + strlcpy(filename, home, FL_PATH_MAX); + if (filename[strlen(filename) - 1] != '/') + strlcat(filename, "/", FL_PATH_MAX); + strlcat(filename, ".fltk/", FL_PATH_MAX); break; case Fl_Preferences::SYSTEM: strcpy(filename, "/etc/fltk/"); break; + default: // MEMORY + filename[0] = '\0'; // empty string + break; } // Make sure that the parameters are not NULL @@ -492,8 +497,8 @@ char *Fl_X11_System_Driver::preference_rootnode(Fl_Preferences * /*prefs*/, Fl_P snprintf(filename + strlen(filename), FL_PATH_MAX - strlen(filename), "%s/%s.prefs", vendor, application); - // If this is the SYSTEM path, we are done - if ((root&Fl_Preferences::ROOT_MASK)!=Fl_Preferences::USER) + // If this is not the USER path (i.e. SYSTEM or MEMORY), we are done + if ((pref_type) != Fl_Preferences::USER) return filename; // If the legacy file exists, we are also done |
