diff options
Diffstat (limited to 'src/util.c')
-rw-r--r-- | src/util.c | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/src/util.c b/src/util.c new file mode 100644 index 0000000..cd39c3f --- /dev/null +++ b/src/util.c @@ -0,0 +1,41 @@ +#include "util.h" +#include <unistd.h> /* for access() */ +#include <stdlib.h> /* for getenv() */ +#include <stdio.h> /* for sprintf(), fopen() */ + +/* Equivalent to fopen() but uses find_file() to find the path to the filename. */ +FILE *open_file(const char *filename, const char *mode) +{ + char *path; + + path = find_file(filename); + + if (!path) return NULL; + + return fopen(path,mode); +} + +/* Returns the full path to `filename` by searching the current working + * directory and the path specified by the environment variable SDDM_DATA. + * + * Returns a pointer to the full path on success or NULL if the file isn't + * found. */ +char *find_file(const char *filename) +{ + static char path[256]; + char *dir; + + /* First check in the current working directory. */ + sprintf(path, "%s", filename); + if (access(path, F_OK) == 0) return path; + + /* Now check in the directory specified by the environment variable + * SDDM_DATA. */ + dir = getenv("SDDM_DATA"); + if (dir) { + sprintf(path, "%s/%s", dir,filename); + if (access(path, F_OK) == 0) return path; + } + + return NULL; +} |