Handling search of config file in multiple directories, additional debug messages
[vlp.git] / src / global / vlp / ConfigurationFinder.cpp
1 #include <string>
2 #include <fstream>
3
4 #include <stdio.h>
5
6 #include "ConfigurationFinder.h"
7 #include "config.h"
8 #include "exception/ConfigFileNotFound.h"
9
10 namespace loglan {
11 namespace vlp {
12
13 ConfigurationFinder::ConfigurationFinder()
14 {
15 }
16
17 std::string ConfigurationFinder::findConfig(std::string filename)
18 {
19         for (std::string dir : searchDirs) {
20                 std::ifstream infile(dir + filename);
21                 if (infile.good()) {
22                         return dir + filename;
23                 }
24         }
25
26         throw exception::ConfigFileNotFound();
27 }
28
29 /**
30  * Gets path to system-wide settings directory
31  *
32  * @return directory of user settings
33  */
34 std::string ConfigurationFinder::getSystemConfigurationDir()
35 {
36         std::string dir(SYSCONFDIR);
37
38         dir += VLP_CONFIG_PATH_SEPARATOR;
39         dir += "loglan";
40         dir += VLP_CONFIG_PATH_SEPARATOR;
41
42         return dir;
43 }
44
45
46 void ConfigurationFinder::addSearchDir(std::string dir)
47 {
48         searchDirs.push_back(dir);
49 }
50
51 void ConfigurationFinder::initSearchDirs()
52 {
53         searchDirs.clear();
54
55         addSearchDir("./");
56         addSearchDir(getUserConfigurationDir());
57         addSearchDir(getSystemConfigurationDir());
58 }
59
60 }
61 }