[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [tyndur-devel] [PATCH 5/6] libc: POSIX: alarm()



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.