Am Montag 05 Januar 2009 22:23:53 schrieb Kevin Wolf: > + lib: POSIX: Weniger gefakte Implementierung von alarm() > --- > src/modules/include/unistd.h | 6 +++--- > src/modules/lib/posix/signal.c | 19 ++++++++++++++++--- > 2 files changed, 19 insertions(+), 6 deletions(-) > > diff --git a/src/modules/include/unistd.h b/src/modules/include/unistd.h > index c7b7bbb..18ffd07 100644 > --- a/src/modules/include/unistd.h > +++ b/src/modules/include/unistd.h > @@ -121,6 +121,9 @@ ssize_t pread(int fd, void *buf, size_t count, off_t > offset); /// In eine Datei mit gegebenem Offset schreiben > ssize_t pwrite(int fd, const void *buf, size_t count, off_t offset); > > +/// Timer setzen nach dem ein SIGALARM gesendet werden soll > +long alarm(long seconds); > + > #ifndef CONFIG_LIBC_NO_STUBS > /// Prozess klonen > pid_t fork(void); > @@ -137,9 +140,6 @@ int dup(int fd); > /// Dateideskriptor duplizieren > int dup2(int fd, int new_fd); > > -/// Timer setzen nach dem ein SIGALARM gesendet werden soll > -long alarm(long seconds); > - > /// Warten bis zeit abgelaufen ist, oder Signal eintrifft > unsigned int sleep(unsigned int seconds); > > diff --git a/src/modules/lib/posix/signal.c > b/src/modules/lib/posix/signal.c index ee37e27..63d54b3 100644 > --- a/src/modules/lib/posix/signal.c > +++ b/src/modules/lib/posix/signal.c > @@ -259,14 +259,27 @@ int sigismember(const sigset_t *sigset, int signum) > return ((sigset->bitmask[signum / 8] & (1 <<(signum % 8))) != 0); > } > > +/** > + * Callbackfunktion fuer alarm() > + */ > +static void do_alarm(void) > +{ > + raise(SIGALRM); > +} > > -#ifndef CONFIG_LIBC_NO_STUBS > /** > * Timer setzen, der beim ablaufen ein SIGALARM sendet > */ > long alarm(long seconds) > { > + static dword id = 0; > + > + if (id != 0) { > + timer_cancel(id); > + } > + > + id = timer_register(do_alarm, seconds * 1000000); > + > + // FIXME > return 0; > } > -#endif > - Sieht gut aus, rein damit.
Attachment:
signature.asc
Description: This is a digitally signed message part.