Add error handling for sigaction, signal and strdup

pull/641/head
Tatsuhiro Tsujikawa 2016-04-23 18:18:06 +09:00
parent b316b2cec5
commit 1ce6ac0b23
2 changed files with 17 additions and 3 deletions

View File

@ -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:

View File

@ -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
}