+/*
+ * Checks if there is a file at the given path (expanding ~) and returns the
+ * full path if so or NULL if there is no file.
+ *
+ */
+char *file_exists(const char *path) {
+ static glob_t globbuf;
+ struct stat buf;
+ char *full_path = NULL;
+
+ if (glob(path, GLOB_NOCHECK | GLOB_TILDE, NULL, &globbuf) < 0)
+ return NULL;
+
+ full_path = (globbuf.gl_pathc > 0 ? globbuf.gl_pathv[0] : path);
+
+ if (stat(full_path, &buf) < 0)
+ return NULL;
+
+ return full_path;
+}
+