aboutsummaryrefslogtreecommitdiff
path: root/src/util.c
diff options
context:
space:
mode:
authortlatorre <tlatorre@uchicago.edu>2019-03-07 14:43:51 -0600
committertlatorre <tlatorre@uchicago.edu>2019-03-07 14:43:51 -0600
commita96111c8026d47147708796091ec7bef216aefd8 (patch)
tree07a31d0bffeb24e85e3d3eee9105ed019a40f13c /src/util.c
parentf68ab9ebbcab088f0f4ab60a2397eb471998ae74 (diff)
downloadsddm-a96111c8026d47147708796091ec7bef216aefd8.tar.gz
sddm-a96111c8026d47147708796091ec7bef216aefd8.tar.bz2
sddm-a96111c8026d47147708796091ec7bef216aefd8.zip
update code to allow you to run the fit outside of the src directory
To enable the fitter to run outside of the src directory, I created a new function open_file() which works exactly like fopen() except that it searches for the file in both the current working directory and the path specified by an environment variable.
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;
+}