Re: [PATCH 1/2] Support for setitimer() on platforms lacking it
From: Junio C Hamano <hidden>
Date: 2016-06-15 22:54:37
"Joachim Schmitz" [off-list ref] writes:
quoted
quoted
quoted
Should we leave tv_usec untouched then? That was we round up on the next (and subsequent?) round(s). Or just set to ENOTSUP in setitimer if ovalue is !NULL?I was alluding to the latter.OK, will do that then.
Thanks.
quoted
Unless I screwed up the operator precedence?
I think you did, but not in the version we see below.
int git_setitimer(int which, const struct itimerval *value,
struct itimerval *ovalue)
{
int ret = 0;
if (!value ) {Style: space before ')'?
errno = EFAULT; return -1;
EFAULT is good ;-) The emulation in mingw.c 6072fc3 (Windows: Implement setitimer() and sigaction()., 2007-11-13) may want to be tightened in a similar way.
} if ( value->it_value.tv_sec < 0
Style: space after ')'?
|| value->it_value.tv_usec > 1000000
|| value->it_value.tv_usec < 0) {
errno = EINVAL;
return -1;
}
if ((ovalue) && (git_getitimer(which, ovalue) == -1))
return -1; /* errno set in git_getitimer() */
As nobody passes non-NULL ovalue to setitimer(), I think we should
instead get rid of git_getitmier() implemenation, and change this to
if (ovalue) {
errno = ENOTSUP;
return -1;
}
which is how I understood what "the latter" in the paragraph I
quoted from you above meant.
switch (which) {
case ITIMER_REAL:
/* If tv_usec is > 0, round up to next full sec */
alarm(value->it_value.tv_sec + (value->it_value.tv_usec > 0));OK.
ret = 0; /* if alarm() fails, we get a SIGLIMIT */ break; case ITIMER_VIRTUAL: case ITIMER_PROF: errno = ENOTSUP; ret = -1; break; default: errno = EINVAL; ret = -1; break; } return ret; }
Other than that, looks good. Thanks.