summaryrefslogtreecommitdiffabout
path: root/src
Unidiff
Diffstat (limited to 'src') (more/less context) (show whitespace changes)
-rw-r--r--src/eyekinfig.cc24
1 files changed, 13 insertions, 11 deletions
diff --git a/src/eyekinfig.cc b/src/eyekinfig.cc
index 56c74a7..6dde7b2 100644
--- a/src/eyekinfig.cc
+++ b/src/eyekinfig.cc
@@ -5,8 +5,8 @@
5 5
6#include "config.h" 6#include "config.h"
7 7
8eyekinfig_t::eyekinfig_t(const std::string& ma) 8eyekinfig_t::eyekinfig_t(const std::string& ma) : macaddress(ma) {
9 : macaddress(ma) { 9 try {
10 static cfg_opt_t opts[] = { 10 static cfg_opt_t opts[] = {
11 CFG_STR((char*)"targetdir",(char*)"/var/lib/" PACKAGE "/%s",CFGF_NONE), 11 CFG_STR((char*)"targetdir",(char*)"/var/lib/" PACKAGE "/%s",CFGF_NONE),
12 CFG_STR((char*)"uploadkey",(char*)"",CFGF_NONE), 12 CFG_STR((char*)"uploadkey",(char*)"",CFGF_NONE),
@@ -20,15 +20,17 @@ eyekinfig_t::eyekinfig_t(const std::string& ma)
20 if(!cfg) 20 if(!cfg)
21 throw std::runtime_error("failed to cfg_init()"); 21 throw std::runtime_error("failed to cfg_init()");
22 std::string::size_type ls = macaddress.rfind('/'); 22 std::string::size_type ls = macaddress.rfind('/');
23 if(cfg_parse(cfg,gnu::autosprintf( 23 std::string cf = gnu::autosprintf( EYEKIN_CONF_DIR "/%s.conf",
24 EYEKIN_CONF_DIR "/%s.conf", 24 macaddress.c_str()+((ls==std::string::npos)?0:ls+1) );
25 (ls==std::string::npos) 25 int r = cfg_parse(cfg,cf.c_str());
26 ? macaddress.c_str() 26 if(r != CFG_SUCCESS) {
27 : macaddress.substr(ls+1).c_str() 27 cfg_free(cfg); cfg=0;
28 )) ==CFG_PARSE_ERROR) { 28 if(CFG_FILE_ERROR) throw std::runtime_error(gnu::autosprintf("failed to open configuration file '%s'",cf.c_str()));
29 if(cfg) cfg_free(cfg); 29 throw std::runtime_error(gnu::autosprintf("failed to parse configuration file '%s'",cf.c_str()));
30 cfg=0; 30 }
31 throw std::runtime_error("failed to cfg_parse()"); 31 }catch(...) {
32 if(cfg) cfg_free(cfg), cfg=0;
33 throw;
32 } 34 }
33 } 35 }
34 36