diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2016-04-23 18:18:06 +0900 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2016-04-23 18:18:06 +0900 |
| commit | 1ce6ac0b238b653d9b49a1c9f913d08db2b74c69 (patch) | |
| tree | ce91b4e92d9130e401c0d0b917f9ee0b019e6615 | |
| parent | b316b2cec5ac3bc2d584e2545c0b9a32a330cfe1 (diff) | |
Add error handling for sigaction, signal and strdup
| -rw-r--r-- | src/OptionParser.cc | 8 | ||||
| -rw-r--r-- | src/util.cc | 12 |
2 files changed, 17 insertions, 3 deletions
diff --git a/src/OptionParser.cc b/src/OptionParser.cc index c1e306da..75d0885f 100644 --- a/src/OptionParser.cc +++ b/src/OptionParser.cc @@ -90,8 +90,14 @@ void putOptions(struct option* longOpts, int* plopt, InputIterator first, if (*first && !(*first)->isHidden()) { #ifdef HAVE_OPTION_CONST_NAME (*longOpts).name = (*first)->getName(); -#else // !HAVE_OPTION_CONST_NAME +#else // !HAVE_OPTION_CONST_NAME (*longOpts).name = strdup((*first)->getName()); + if ((*longOpts).name == nullptr) { + auto errNum = errno; + A2_LOG_ERROR( + fmt("strdup() failed: %s", util::safeStrerror(errNum).c_str())); + exit(EXIT_FAILURE); + } #endif // !HAVE_OPTION_CONST_NAME switch ((*first)->getArgType()) { case OptionHandler::REQ_ARG: diff --git a/src/util.cc b/src/util.cc index 2f9e7d38..a2590235 100644 --- a/src/util.cc +++ b/src/util.cc @@ -1341,9 +1341,17 @@ void setGlobalSignalHandler(int sig, sigset_t* mask, signal_handler_t handler, sigact.sa_handler = handler; sigact.sa_flags = flags; sigact.sa_mask = *mask; - sigaction(sig, &sigact, nullptr); + if (sigaction(sig, &sigact, nullptr) == -1) { + auto errNum = errno; + A2_LOG_ERROR(fmt("sigaction() failed for signal %d: %s", sig, + safeStrerror(errNum).c_str())); + } #else - signal(sig, handler); + if (signal(sig, handler) == SIG_ERR) { + auto errNum = errno; + A2_LOG_ERROR(fmt("signal() failed for signal %d: %s", sig, + safeStrerror(errNum).c_str())); + } #endif // HAVE_SIGACTION } |
