1/* 2 * win32 specific declarations 3 * 4 * Copyright (c) 2003-2008 Fabrice Bellard 5 * Copyright (c) 2010 Jes Sorensen <Jes.Sorensen@redhat.com> 6 * 7 * Permission is hereby granted, free of charge, to any person obtaining a copy 8 * of this software and associated documentation files (the "Software"), to deal 9 * in the Software without restriction, including without limitation the rights 10 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11 * copies of the Software, and to permit persons to whom the Software is 12 * furnished to do so, subject to the following conditions: 13 * 14 * The above copyright notice and this permission notice shall be included in 15 * all copies or substantial portions of the Software. 16 * 17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 20 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 23 * THE SOFTWARE. 24 */ 25 26#ifndef QEMU_OS_WIN32_H 27#define QEMU_OS_WIN32_H 28 29#include <windows.h> 30#include <winsock2.h> 31#include "main-loop.h" 32 33/* Workaround for older versions of MinGW. */ 34#ifndef ECONNREFUSED 35# define ECONNREFUSED WSAECONNREFUSED 36#endif 37#ifndef EINPROGRESS 38# define EINPROGRESS WSAEINPROGRESS 39#endif 40#ifndef EHOSTUNREACH 41# define EHOSTUNREACH WSAEHOSTUNREACH 42#endif 43#ifndef EINTR 44# define EINTR WSAEINTR 45#endif 46#ifndef EINPROGRESS 47# define EINPROGRESS WSAEINPROGRESS 48#endif 49#ifndef ENETUNREACH 50# define ENETUNREACH WSAENETUNREACH 51#endif 52#ifndef ENOTCONN 53# define ENOTCONN WSAENOTCONN 54#endif 55#ifndef EWOULDBLOCK 56# define EWOULDBLOCK WSAEWOULDBLOCK 57#endif 58 59#if defined(_WIN64) 60/* On w64, setjmp is implemented by _setjmp which needs a second parameter. 61 * If this parameter is NULL, longjump does no stack unwinding. 62 * That is what we need for QEMU. Passing the value of register rsp (default) 63 * lets longjmp try a stack unwinding which will crash with generated code. */ 64# undef setjmp 65# define setjmp(env) _setjmp(env, NULL) 66#endif 67 68/* Declaration of ffs() is missing in MinGW's strings.h. */ 69int ffs(int i); 70 71static inline void os_setup_signal_handling(void) {} 72static inline void os_daemonize(void) {} 73static inline void os_setup_post(void) {} 74void os_set_line_buffering(void); 75static inline void os_set_proc_name(const char *dummy) {} 76 77#if !defined(EPROTONOSUPPORT) 78# define EPROTONOSUPPORT EINVAL 79#endif 80 81int setenv(const char *name, const char *value, int overwrite); 82 83typedef struct { 84 long tv_sec; 85 long tv_usec; 86} qemu_timeval; 87int qemu_gettimeofday(qemu_timeval *tp); 88 89#endif 90