Cygwin: posix timers: fix error handling in public API

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
This commit is contained in:
Corinna Vinschen 2019-01-22 16:37:15 +01:00
parent 83c51fffe6
commit de0ec284a3
1 changed files with 15 additions and 6 deletions

View File

@ -433,17 +433,20 @@ timer_create (clockid_t clock_id, struct sigevent *__restrict evp,
if (CLOCKID_IS_PROCESS (clock_id) || CLOCKID_IS_THREAD (clock_id)) if (CLOCKID_IS_PROCESS (clock_id) || CLOCKID_IS_THREAD (clock_id))
{ {
set_errno (ENOTSUP); set_errno (ENOTSUP);
return -1; __leave;
} }
if (clock_id >= MAX_CLOCKS) if (clock_id >= MAX_CLOCKS)
{ {
set_errno (EINVAL); set_errno (EINVAL);
return -1; __leave;
} }
*timerid = (timer_t) cnew (timer_tracker, clock_id, evp); *timerid = (timer_t) cnew (timer_tracker, clock_id, evp);
ret = 0; if (!*timerid)
__seterrno ();
else
ret = 0;
} }
__except (EFAULT) {} __except (EFAULT) {}
__endtry __endtry
@ -461,12 +464,15 @@ timer_gettime (timer_t timerid, struct itimerspec *ovalue)
if (!tt->is_timer_tracker ()) if (!tt->is_timer_tracker ())
{ {
set_errno (EINVAL); set_errno (EINVAL);
return -1; __leave;
} }
ret = tt->gettime (ovalue, true); ret = tt->gettime (ovalue, true);
if (ret < 0) if (ret < 0)
set_errno (-ret); {
set_errno (-ret);
ret = -1;
}
} }
__except (EFAULT) {} __except (EFAULT) {}
__endtry __endtry
@ -490,7 +496,10 @@ timer_settime (timer_t timerid, int flags,
} }
ret = tt->settime (flags, value, ovalue); ret = tt->settime (flags, value, ovalue);
if (ret < 0) if (ret < 0)
set_errno (-ret); {
set_errno (-ret);
ret = -1;
}
} }
__except (EFAULT) {} __except (EFAULT) {}
__endtry __endtry