/*** This file is part of avahi. avahi is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. avahi 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with avahi; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. ***/ #ifdef HAVE_CONFIG_H #include <config.h> #endif #include <assert.h> #include <limits.h> #include <stdlib.h> #include <errno.h> #include <string.h> #include "xdg-config.h" #ifndef PATH_MAX #define PATH_MAX 4096 #endif FILE *avahi_xdg_config_open(const char *filename) { FILE *f; const char *e, *d; char fn[PATH_MAX], *p = NULL, buf[2048], *s = NULL; assert(filename); if ((e = getenv("XDG_CONFIG_HOME")) && *e) snprintf(p = fn, sizeof(fn), "%s/%s", e, filename); else if ((e = getenv("HOME")) && *e) snprintf(p = fn, sizeof(fn), "%s/.config/%s", e, filename); if (p) { if ((f = fopen(p, "r"))) return f; else if (errno != ENOENT) return NULL; } if (!(d = getenv("XDG_CONFIG_DIRS")) || !*d) d = "/etc/xdg"; snprintf(buf, sizeof(buf), "%s", d); for (e = strtok_r(buf, ":", &s); e; e = strtok_r(NULL, ":", &s)) { snprintf(fn, sizeof(fn), "%s/%s", e, filename); if ((f = fopen(fn, "r"))) return f; } return NULL; }