minix/drivers/filter/util.c
Thomas Cort e67fc5771d libc: add clock_getres()/clock_gettime() system calls.
In order to make it more clear that ticks should be used for timers
and realtime should be used for timestamps / displaying the date/time,
getuptime() was renamed to getticks() and getuptime2() was renamed to
getuptime().

Servers, drivers, libraries, tests, etc that use getuptime()/getuptime2()
have been updated. In instances where a realtime was calculated, the
calculation was changed to use realtime.

System calls clock_getres() and clock_gettime() were added to PM/libc.
2013-04-04 15:04:53 +02:00

70 lines
1.6 KiB
C

/* Filter driver - utility functions */
#include "inc.h"
#include <sys/mman.h>
#include <signal.h>
static clock_t next_alarm;
/*===========================================================================*
* flt_malloc *
*===========================================================================*/
char *flt_malloc(size_t size, char *sbuf, size_t ssize)
{
/* Allocate a buffer for 'size' bytes. If 'size' is equal to or less
* than 'ssize', return the static buffer 'sbuf', otherwise, use
* malloc() to allocate memory dynamically.
*/
char *p;
if (size <= ssize)
return sbuf;
if(!(p = alloc_contig(size, 0, NULL)))
panic("out of memory: %d", size);
return p;
}
/*===========================================================================*
* flt_free *
*===========================================================================*/
void flt_free(char *buf, size_t size, const char *sbuf)
{
/* Free a buffer previously allocated with flt_malloc().
*/
if(buf != sbuf)
free_contig(buf, size);
}
/*===========================================================================*
* flt_alarm *
*===========================================================================*/
clock_t flt_alarm(clock_t dt)
{
int r;
if(dt < 0)
return next_alarm;
r = sys_setalarm(dt, 0);
if(r != OK)
panic("sys_setalarm failed: %d", r);
if(dt == 0) {
if(!next_alarm)
panic("clearing unset alarm: %d", r);
next_alarm = 0;
} else {
if(next_alarm)
panic("overwriting alarm: %d", r);
if ((r = getticks(&next_alarm)) != OK)
panic("getuptime failed: %d", r);
next_alarm += dt;
}
return next_alarm;
}