Files
Arquivotheca.SunOS-4.1.4/usr.lib/libsunwindow/notify/ndet_value.c
seta75D ff309bfe1c Init
2021-10-11 18:37:13 -03:00

77 lines
1.9 KiB
C

#ifndef lint
#ifdef sccs
static char sccsid[] = "@(#)ndet_value.c 1.1 94/10/31 Copyr 1985 Sun Micro";
#endif
#endif
/*
* Copyright (c) 1985 by Sun Microsystems, Inc.
*/
/*
* Ndet_value.c - Implement the notify_itimer_value interface.
*/
#include <sunwindow/ntfy.h>
#include <sunwindow/ndet.h>
extern Notify_error
notify_itimer_value(nclient, which, value)
Notify_client nclient;
int which;
struct itimerval *value;
{
register NTFY_CLIENT *client;
NTFY_CONDITION *condition;
NTFY_TYPE type;
int n;
NTFY_BEGIN_CRITICAL;
/* Check arguments */
if (value == NTFY_ITIMER_NULL) {
ntfy_set_errno(NOTIFY_INVAL);
goto Error;
}
/* Initialize return value to no itimer */
*value = NOTIFY_NO_ITIMER;
if (ndet_check_which(which, &type))
goto Error;
/* Find client that corresponds to nclient */
if ((client = ntfy_find_nclient(ndet_clients, nclient,
&ndet_client_latest)) == NTFY_CLIENT_NULL) {
ntfy_set_warning(NOTIFY_UNKNOWN_CLIENT);
goto Error;
}
/* Find condition */
if ((condition = ntfy_find_condition(client->conditions, type,
&(client->condition_latest), NTFY_DATA_NULL, NTFY_IGNORE_DATA)) ==
NTFY_CONDITION_NULL) {
ntfy_set_warning(NOTIFY_NO_CONDITION);
goto Error;
}
/* Set value */
value->it_interval = condition->data.ntfy_itimer->itimer.it_interval;
if (type == NTFY_REAL_ITIMER) {
struct timeval tod;
n = gettimeofday(&tod, (struct timezone *)0); /* SYSTEM CALL */
ntfy_assert(n == 0, "Unexpected error: gettimeofday");
value->it_value = ndet_real_min(condition->data.ntfy_itimer,
tod);
} else {
struct itimerval process_itimer;
n = getitimer(ITIMER_VIRTUAL, &process_itimer);
ntfy_assert(n == 0, "Unexpected error: getitimer");
value->it_value = ndet_virtual_min(condition->data.ntfy_itimer,
process_itimer.it_value);
condition->data.ntfy_itimer->set_tv = process_itimer.it_value;
}
NTFY_END_CRITICAL;
return(NOTIFY_OK);
Error:
NTFY_END_CRITICAL;
return(notify_errno);
}