mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-03 07:43:54 -06:00

Historically QEMU has had a socket_error() macro that was defined to map to WSASocketError(). The os-win32.h header file would define errno constants that mapped to the WSA error constants. This worked fine with Mingw32 since its header files never defined any errno values, nor did it even provide an errno.h. So callers of socket_error() could match on traditional Exxxx constants and it would all "just work". With Mingw64 though, things work rather differently. First there is an errno.h file which defines all the traditional errno constants you'd expect from a UNIX platform. There is then a winerror.h which defined the WSA error constants. Crucially the WSAExxxx errno values in winerror.h do not match the Exxxx errno values in error.h. If QEMU had only imported winerror.h it would still work, but the qemu/osdep.h file unconditionally imports errno.h. So callers of socket_error() will get now WSAExxxx values back and compare them to the Exxx constants. This will always fail silently at runtime. To solve this QEMU needs to stop assuming the WSAExxxx constant values match the Exxx constant values. Thus the socket_error() macro is turned into a small function that re-maps WSAExxxx values into Exxx. Reviewed-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
55 lines
1.8 KiB
C
55 lines
1.8 KiB
C
/*
|
|
* posix specific declarations
|
|
*
|
|
* Copyright (c) 2003-2008 Fabrice Bellard
|
|
* Copyright (c) 2010 Jes Sorensen <Jes.Sorensen@redhat.com>
|
|
*
|
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
* of this software and associated documentation files (the "Software"), to deal
|
|
* in the Software without restriction, including without limitation the rights
|
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
* copies of the Software, and to permit persons to whom the Software is
|
|
* furnished to do so, subject to the following conditions:
|
|
*
|
|
* The above copyright notice and this permission notice shall be included in
|
|
* all copies or substantial portions of the Software.
|
|
*
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
* THE SOFTWARE.
|
|
*/
|
|
|
|
#ifndef QEMU_OS_POSIX_H
|
|
#define QEMU_OS_POSIX_H
|
|
|
|
|
|
void os_set_line_buffering(void);
|
|
void os_set_proc_name(const char *s);
|
|
void os_setup_signal_handling(void);
|
|
void os_daemonize(void);
|
|
void os_setup_post(void);
|
|
int os_mlock(void);
|
|
|
|
#define socket_error() errno
|
|
|
|
typedef struct timeval qemu_timeval;
|
|
#define qemu_gettimeofday(tp) gettimeofday(tp, NULL)
|
|
|
|
#ifndef CONFIG_UTIMENSAT
|
|
#ifndef UTIME_NOW
|
|
# define UTIME_NOW ((1l << 30) - 1l)
|
|
#endif
|
|
#ifndef UTIME_OMIT
|
|
# define UTIME_OMIT ((1l << 30) - 2l)
|
|
#endif
|
|
#endif
|
|
typedef struct timespec qemu_timespec;
|
|
int qemu_utimens(const char *path, const qemu_timespec *times);
|
|
|
|
bool is_daemonized(void);
|
|
|
|
#endif
|