/* * File: paths.cc * * Copyright 2006-2009 Jorge Arellano Cid * * 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. */ #include #include #include #include "msg.h" #include "../dlib/dlib.h" #include "paths.hh" /* * Local data */ // Dillo works from an unmounted directory (/tmp) static char* oldWorkingDir = NULL; /* * Changes current working directory to /tmp and creates ~/.dillo * if not exists. */ void Paths::init(void) { char *path; struct stat st; dFree(oldWorkingDir); oldWorkingDir = dGetcwd(); chdir("/tmp"); path = dStrconcat(dGethomedir(), "/.dillo", NULL); if (stat(path, &st) == -1) { if (errno == ENOENT) { MSG("paths: creating directory %s.\n", path); if (mkdir(path, 0700) < 0) { MSG("paths: error creating directory %s: %s\n", path, dStrerror(errno)); } } else { MSG("Dillo: error reading %s: %s\n", path, dStrerror(errno)); } } dFree(path); } /* * Return the initial current working directory in a string. */ char *Paths::getOldWorkingDir(void) { return oldWorkingDir; } /* * Free memory */ void Paths::free(void) { dFree(oldWorkingDir); } /* * Examines the path for "rcFile" and assign its file pointer to "fp". */ FILE *Paths::getPrefsFP(const char *rcFile) { FILE *fp; char *path = dStrconcat(dGethomedir(), "/.dillo/", rcFile, NULL); if (!(fp = fopen(path, "r"))) { MSG("paths: Cannot open file '%s'\n", path); char *path2 = dStrconcat(PATHS_RC_SYS, rcFile, NULL); if (!(fp = fopen(path2, "r"))) { MSG("paths: Cannot open file '%s'\n",path2); MSG("paths: Using internal defaults...\n"); } else { MSG("paths: Using %s\n", path2); } dFree(path2); } dFree(path); return fp; }