author | Michael Krelin <hacker@klever.net> | 2012-01-20 21:36:25 (UTC) |
---|---|---|
committer | Michael Krelin <hacker@klever.net> | 2012-01-20 21:36:25 (UTC) |
commit | 8f8bdd258276b1a53100393d6e7557f078898e71 (patch) (side-by-side diff) | |
tree | ea2fed0a86506212d55598674854d0d736634475 | |
parent | 62d09cb2346588773a9e25ac9e9a942816b8581a (diff) | |
download | iii-8f8bdd258276b1a53100393d6e7557f078898e71.zip iii-8f8bdd258276b1a53100393d6e7557f078898e71.tar.gz iii-8f8bdd258276b1a53100393d6e7557f078898e71.tar.bz2 |
throw a fit if unable to parse config file
Signed-off-by: Michael Krelin <hacker@klever.net>
-rw-r--r-- | src/eyekinfig.cc | 24 |
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 @@ -1,67 +1,69 @@ #include <cassert> #include <stdexcept> #include <autosprintf.h> #include "eyekinfig.h" #include "config.h" -eyekinfig_t::eyekinfig_t(const std::string& ma) - : macaddress(ma) { +eyekinfig_t::eyekinfig_t(const std::string& ma) : macaddress(ma) { + try { static cfg_opt_t opts[] = { CFG_STR((char*)"targetdir",(char*)"/var/lib/" PACKAGE "/%s",CFGF_NONE), CFG_STR((char*)"uploadkey",(char*)"",CFGF_NONE), CFG_STR((char*)"on-start-session",(char*)"",CFGF_NONE), CFG_STR((char*)"on-upload-photo",(char*)"",CFGF_NONE), CFG_STR((char*)"on-mark-last-photo-in-roll",(char*)"",CFGF_NONE), CFG_INT((char*)"umask",022,CFGF_NONE), CFG_END() }; cfg = cfg_init(opts,CFGF_NONE); if(!cfg) throw std::runtime_error("failed to cfg_init()"); std::string::size_type ls = macaddress.rfind('/'); - if(cfg_parse(cfg,gnu::autosprintf( - EYEKIN_CONF_DIR "/%s.conf", - (ls==std::string::npos) - ? macaddress.c_str() - : macaddress.substr(ls+1).c_str() - )) ==CFG_PARSE_ERROR) { - if(cfg) cfg_free(cfg); - cfg=0; - throw std::runtime_error("failed to cfg_parse()"); + std::string cf = gnu::autosprintf( EYEKIN_CONF_DIR "/%s.conf", + macaddress.c_str()+((ls==std::string::npos)?0:ls+1) ); + int r = cfg_parse(cfg,cf.c_str()); + if(r != CFG_SUCCESS) { + cfg_free(cfg); cfg=0; + if(CFG_FILE_ERROR) throw std::runtime_error(gnu::autosprintf("failed to open configuration file '%s'",cf.c_str())); + throw std::runtime_error(gnu::autosprintf("failed to parse configuration file '%s'",cf.c_str())); } + }catch(...) { + if(cfg) cfg_free(cfg), cfg=0; + throw; } +} eyekinfig_t::~eyekinfig_t() { if(cfg) cfg_free(cfg); } std::string eyekinfig_t::get_targetdir() { assert(cfg); return gnu::autosprintf(cfg_getstr(cfg,"targetdir"),macaddress.c_str()); } std::string eyekinfig_t::get_upload_key() { assert(cfg); return cfg_getstr(cfg,"uploadkey"); } std::string eyekinfig_t::get_on_start_session() { assert(cfg); return cfg_getstr(cfg,"on-start-session"); } std::string eyekinfig_t::get_on_upload_photo() { assert(cfg); return cfg_getstr(cfg,"on-upload-photo"); } std::string eyekinfig_t::get_on_mark_last_photo_in_roll() { assert(cfg); return cfg_getstr(cfg,"on-mark-last-photo-in-roll"); } int eyekinfig_t::get_umask() { assert(cfg); return 0777&cfg_getint(cfg,"umask"); } |