mirror of
https://github.com/labwc/labwc.git
synced 2026-03-05 01:40:24 -05:00
session: sort directory entries in environment.d
This commit is contained in:
parent
8096df19ba
commit
b4f3ffc27e
2 changed files with 21 additions and 17 deletions
|
|
@ -43,11 +43,10 @@ specify keyboard layout settings and cursor size/theme here; see environment
|
||||||
variable section below for details. Within an XDG Base Directory, a file named
|
variable section below for details. Within an XDG Base Directory, a file named
|
||||||
"environment" will be parsed first, followed by any file matching the glob
|
"environment" will be parsed first, followed by any file matching the glob
|
||||||
"environment.d/\*.env". Files within the environment.d directory are parsed in
|
"environment.d/\*.env". Files within the environment.d directory are parsed in
|
||||||
an arbitrary order; any variables that must be set in a particular sequence
|
alphabetical order. Unless the --merge-config option is specified, labwc will
|
||||||
should be set within the same file. Unless the --merge-config option is
|
consider a particular XDG Base Directory to have provided an environment file if
|
||||||
specified, labwc will consider a particular XDG Base Directory to have provided
|
that directory contains either the "environment" file or at least one
|
||||||
an environment file if that directory contains either the "environment"
|
"environment.d/\*.env" file.
|
||||||
file or at least one "environment.d/\*.env" file.
|
|
||||||
|
|
||||||
Note: environment files are treated differently by Openbox, which will simply
|
Note: environment files are treated differently by Openbox, which will simply
|
||||||
source the file as a valid shell script before running the window manager. Files
|
source the file as a valid shell script before running the window manager. Files
|
||||||
|
|
|
||||||
|
|
@ -86,11 +86,6 @@ strdup_env_path_validate(const char *prefix, struct dirent *dirent)
|
||||||
{
|
{
|
||||||
assert(prefix);
|
assert(prefix);
|
||||||
|
|
||||||
/* Valid environment files always end in '.env' */
|
|
||||||
if (!str_endswith(dirent->d_name, ".env")) {
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
char *full_path = strdup_printf("%s/%s", prefix, dirent->d_name);
|
char *full_path = strdup_printf("%s/%s", prefix, dirent->d_name);
|
||||||
if (!full_path) {
|
if (!full_path) {
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
@ -106,16 +101,25 @@ strdup_env_path_validate(const char *prefix, struct dirent *dirent)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
env_file_filter(const struct dirent *dirent)
|
||||||
|
{
|
||||||
|
/* Valid environment files always end in '.env' */
|
||||||
|
return str_endswith(dirent->d_name, ".env");
|
||||||
|
}
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
read_environment_dir(const char *path_prefix)
|
read_environment_dir(const char *path_prefix)
|
||||||
{
|
{
|
||||||
bool success = false;
|
bool success = false;
|
||||||
char *path = strdup_printf("%s.d", path_prefix);
|
char *path = strdup_printf("%s.d", path_prefix);
|
||||||
|
|
||||||
errno = 0;
|
struct dirent **dirlist = NULL;
|
||||||
DIR *envdir = opendir(path);
|
|
||||||
|
|
||||||
if (!envdir) {
|
errno = 0;
|
||||||
|
int num_entries = scandir(path, &dirlist, env_file_filter, alphasort);
|
||||||
|
|
||||||
|
if (num_entries < 0) {
|
||||||
if (errno != ENOENT) {
|
if (errno != ENOENT) {
|
||||||
const char *err_msg = strerror(errno);
|
const char *err_msg = strerror(errno);
|
||||||
wlr_log(WLR_INFO,
|
wlr_log(WLR_INFO,
|
||||||
|
|
@ -126,9 +130,10 @@ read_environment_dir(const char *path_prefix)
|
||||||
goto env_dir_cleanup;
|
goto env_dir_cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct dirent *dirent;
|
for (int i = 0; i < num_entries; i++) {
|
||||||
while ((dirent = readdir(envdir)) != NULL) {
|
char *env_file_path = strdup_env_path_validate(path, dirlist[i]);
|
||||||
char *env_file_path = strdup_env_path_validate(path, dirent);
|
free(dirlist[i]);
|
||||||
|
|
||||||
if (!env_file_path) {
|
if (!env_file_path) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
@ -140,7 +145,7 @@ read_environment_dir(const char *path_prefix)
|
||||||
free(env_file_path);
|
free(env_file_path);
|
||||||
}
|
}
|
||||||
|
|
||||||
closedir(envdir);
|
free(dirlist);
|
||||||
|
|
||||||
env_dir_cleanup:
|
env_dir_cleanup:
|
||||||
free(path);
|
free(path);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue