qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH] w32: Add implementation of gmtime_r, localtime_


From: Blue Swirl
Subject: Re: [Qemu-devel] [PATCH] w32: Add implementation of gmtime_r, localtime_r
Date: Sun, 23 Sep 2012 17:10:35 +0000

On Sat, Sep 22, 2012 at 8:26 PM, Stefan Weil <address@hidden> wrote:
> Those functions are missing in MinGW.
>
> Some versions of MinGW-w64 include defines for gmtime_r and localtime_r.
> Older versions of these macros are buggy (they return a pointer to a
> static variable), therefore we don't want them. Newer versions are
> similar to the code used here, but without the memset.
>
> The implementation which is used here is not strictly reentrant,
> but sufficiently good for QEMU on w32 or w64.
>
> Signed-off-by: Stefan Weil <address@hidden>

Thanks, applied with comment.

> ---
>  oslib-win32.c   |   22 ++++++++++++++++++++++
>  qemu-os-win32.h |    6 ++++++
>  2 files changed, 28 insertions(+)
>
> diff --git a/oslib-win32.c b/oslib-win32.c
> index ffbc6d0..2acbf9b 100644
> --- a/oslib-win32.c
> +++ b/oslib-win32.c
> @@ -74,6 +74,28 @@ void qemu_vfree(void *ptr)
>      VirtualFree(ptr, 0, MEM_RELEASE);
>  }
>
> +struct tm *gmtime_r(const time_t *timep, struct tm *result)
> +{
> +    struct tm *p = gmtime(timep);
> +    memset(result, 0, sizeof(*result));
> +    if (p) {
> +        *result = *p;
> +        p = result;
> +    }
> +    return p;
> +}
> +
> +struct tm *localtime_r(const time_t *timep, struct tm *result)
> +{
> +    struct tm *p = localtime(timep);
> +    memset(result, 0, sizeof(*result));
> +    if (p) {
> +        *result = *p;
> +        p = result;
> +    }
> +    return p;
> +}
> +
>  void socket_set_block(int fd)
>  {
>      unsigned long opt = 0;
> diff --git a/qemu-os-win32.h b/qemu-os-win32.h
> index 753679b..3b5a35b 100644
> --- a/qemu-os-win32.h
> +++ b/qemu-os-win32.h
> @@ -68,6 +68,12 @@
>  /* Declaration of ffs() is missing in MinGW's strings.h. */
>  int ffs(int i);
>
> +/* Missing POSIX functions. Don't use MinGW-w64 macros. */
> +#undef gmtime_r
> +struct tm *gmtime_r(const time_t *timep, struct tm *result);
> +#undef localtime_r
> +struct tm *localtime_r(const time_t *timep, struct tm *result);
> +
>  static inline void os_setup_signal_handling(void) {}
>  static inline void os_daemonize(void) {}
>  static inline void os_setup_post(void) {}
> --
> 1.7.10
>
>



reply via email to

[Prev in Thread] Current Thread [Next in Thread]