/* Copyright (c) 2019, Anthony Latorre * * This program is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation, either version 3 of the License, or (at your option) * any later version. * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * You should have received a copy of the GNU General Public License along with * this program. If not, see . */ #include "util.h" #include /* for access() */ #include /* for getenv() */ #include /* 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 variables SDDM_DATA and * DQXX_DIR. * * 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; } /* Now check in the directory specified by the environment variable * DQXX_DIR. */ dir = getenv("DQXX_DIR"); if (dir) { sprintf(path, "%s/%s", dir,filename); if (access(path, F_OK) == 0) return path; } return NULL; }