author | Michael Krelin <hacker@klever.net> | 2013-02-12 20:37:10 (UTC) |
---|---|---|
committer | Michael Krelin <hacker@klever.net> | 2013-02-12 20:37:10 (UTC) |
commit | 13fb4abba3fd3cac0d5cb25d3eccddc298220d41 (patch) (unidiff) | |
tree | 8a086ffef06f153e739674a5c8beab1db9388238 /src/iiid.cc | |
parent | b80844f51353339cfbb8b35a5585911cdb4301e2 (diff) | |
download | iii-13fb4abba3fd3cac0d5cb25d3eccddc298220d41.zip iii-13fb4abba3fd3cac0d5cb25d3eccddc298220d41.tar.gz iii-13fb4abba3fd3cac0d5cb25d3eccddc298220d41.tar.bz2 |
introduce throwable_exit for nicer stack unwinding
yes, I enjoy abusing features
Signed-off-by: Michael Krelin <hacker@klever.net>
-rw-r--r-- | src/iiid.cc | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/src/iiid.cc b/src/iiid.cc index d655fe3..b3dd3bf 100644 --- a/src/iiid.cc +++ b/src/iiid.cc | |||
@@ -44,54 +44,56 @@ int main(int argc,char **argv) try { | |||
44 | " (you're not likely to ever need it)\n" | 44 | " (you're not likely to ever need it)\n" |
45 | << std::endl << std::endl; | 45 | << std::endl << std::endl; |
46 | exit(0); | 46 | exit(0); |
47 | break; | 47 | break; |
48 | case 'V': | 48 | case 'V': |
49 | std::cerr << VERSION << std::endl; | 49 | std::cerr << VERSION << std::endl; |
50 | exit(0); | 50 | exit(0); |
51 | break; | 51 | break; |
52 | case 'L': | 52 | case 'L': |
53 | extern const char *COPYING; | 53 | extern const char *COPYING; |
54 | std::cerr << COPYING << std::endl; | 54 | std::cerr << COPYING << std::endl; |
55 | exit(0); | 55 | exit(0); |
56 | break; | 56 | break; |
57 | case 'p': | 57 | case 'p': |
58 | port = 0xffff&strtol(optarg,0,0); | 58 | port = 0xffff&strtol(optarg,0,0); |
59 | if(errno) { | 59 | if(errno) { |
60 | std::cerr << "Failed to parse port number" << std::endl; | 60 | std::cerr << "Failed to parse port number" << std::endl; |
61 | exit(1); | 61 | exit(1); |
62 | } | 62 | } |
63 | break; | 63 | break; |
64 | default: | 64 | default: |
65 | std::cerr << "Huh?" << std::endl; | 65 | std::cerr << "Huh?" << std::endl; |
66 | exit(1); | 66 | exit(1); |
67 | break; | 67 | break; |
68 | } | 68 | } |
69 | } | 69 | } |
70 | 70 | ||
71 | const char *ident = rindex(*argv,'/'); | 71 | const char *ident = rindex(*argv,'/'); |
72 | if(ident) | 72 | if(ident) |
73 | ++ident; | 73 | ++ident; |
74 | else | 74 | else |
75 | ident = *argv; | 75 | ident = *argv; |
76 | openlog(ident,LOG_PERROR|LOG_PID,LOG_DAEMON); | 76 | openlog(ident,LOG_PERROR|LOG_PID,LOG_DAEMON); |
77 | syslog(LOG_INFO,"Starting iii eye-fi manager"); | 77 | syslog(LOG_INFO,"Starting iii eye-fi manager"); |
78 | 78 | ||
79 | struct stat st; | 79 | struct stat st; |
80 | if(stat(EYEKIN_CONF_DIR,&st) || !S_ISDIR(st.st_mode)) | 80 | if(stat(EYEKIN_CONF_DIR,&st) || !S_ISDIR(st.st_mode)) |
81 | syslog(LOG_WARNING,"configuration directory '%s' does not exist or is not a directory",EYEKIN_CONF_DIR); | 81 | syslog(LOG_WARNING,"configuration directory '%s' does not exist or is not a directory",EYEKIN_CONF_DIR); |
82 | glob_t g; int rg = glob(EYEKIN_CONF_DIR"/????????????.conf",GLOB_NOSORT,NULL,&g); | 82 | glob_t g; int rg = glob(EYEKIN_CONF_DIR"/????????????.conf",GLOB_NOSORT,NULL,&g); |
83 | if(rg || !g.gl_pathc) | 83 | if(rg || !g.gl_pathc) |
84 | syslog(LOG_WARNING,"I see nothing resembling a card config in '%s'",EYEKIN_CONF_DIR); | 84 | syslog(LOG_WARNING,"I see nothing resembling a card config in '%s'",EYEKIN_CONF_DIR); |
85 | else | 85 | else |
86 | globfree(&g); | 86 | globfree(&g); |
87 | 87 | ||
88 | eyefiworker().run(port); | 88 | eyefiworker().run(port); |
89 | 89 | ||
90 | closelog(); | 90 | closelog(); |
91 | return 0; | 91 | return 0; |
92 | } catch(std::exception& e) { | 92 | } catch(const throwable_exit& e) { |
93 | return e.rc; | ||
94 | } catch(const std::exception& e) { | ||
93 | syslog(LOG_CRIT,"Exiting iii daemon, because of error condition"); | 95 | syslog(LOG_CRIT,"Exiting iii daemon, because of error condition"); |
94 | syslog(LOG_CRIT,"Exception: %s",e.what()); | 96 | syslog(LOG_CRIT,"Exception: %s",e.what()); |
95 | return 1; | 97 | return 1; |
96 | } | 98 | } |
97 | 99 | ||