aboutsummaryrefslogtreecommitdiff
path: root/src/util.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/util.c')
-rw-r--r--src/util.c41
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;
+}