19c17d615SPaolo Bonzini /* 29c17d615SPaolo Bonzini * win32 specific declarations 39c17d615SPaolo Bonzini * 49c17d615SPaolo Bonzini * Copyright (c) 2003-2008 Fabrice Bellard 59c17d615SPaolo Bonzini * Copyright (c) 2010 Jes Sorensen <Jes.Sorensen@redhat.com> 69c17d615SPaolo Bonzini * 79c17d615SPaolo Bonzini * Permission is hereby granted, free of charge, to any person obtaining a copy 89c17d615SPaolo Bonzini * of this software and associated documentation files (the "Software"), to deal 99c17d615SPaolo Bonzini * in the Software without restriction, including without limitation the rights 109c17d615SPaolo Bonzini * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 119c17d615SPaolo Bonzini * copies of the Software, and to permit persons to whom the Software is 129c17d615SPaolo Bonzini * furnished to do so, subject to the following conditions: 139c17d615SPaolo Bonzini * 149c17d615SPaolo Bonzini * The above copyright notice and this permission notice shall be included in 159c17d615SPaolo Bonzini * all copies or substantial portions of the Software. 169c17d615SPaolo Bonzini * 179c17d615SPaolo Bonzini * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 189c17d615SPaolo Bonzini * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 199c17d615SPaolo Bonzini * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 209c17d615SPaolo Bonzini * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 219c17d615SPaolo Bonzini * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 229c17d615SPaolo Bonzini * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 239c17d615SPaolo Bonzini * THE SOFTWARE. 249c17d615SPaolo Bonzini */ 259c17d615SPaolo Bonzini 269c17d615SPaolo Bonzini #ifndef QEMU_OS_WIN32_H 279c17d615SPaolo Bonzini #define QEMU_OS_WIN32_H 289c17d615SPaolo Bonzini 299c17d615SPaolo Bonzini #include <windows.h> 309c17d615SPaolo Bonzini #include <winsock2.h> 319c17d615SPaolo Bonzini 329c17d615SPaolo Bonzini /* Workaround for older versions of MinGW. */ 339c17d615SPaolo Bonzini #ifndef ECONNREFUSED 349c17d615SPaolo Bonzini # define ECONNREFUSED WSAECONNREFUSED 359c17d615SPaolo Bonzini #endif 369c17d615SPaolo Bonzini #ifndef EINPROGRESS 379c17d615SPaolo Bonzini # define EINPROGRESS WSAEINPROGRESS 389c17d615SPaolo Bonzini #endif 399c17d615SPaolo Bonzini #ifndef EHOSTUNREACH 409c17d615SPaolo Bonzini # define EHOSTUNREACH WSAEHOSTUNREACH 419c17d615SPaolo Bonzini #endif 429c17d615SPaolo Bonzini #ifndef EINTR 439c17d615SPaolo Bonzini # define EINTR WSAEINTR 449c17d615SPaolo Bonzini #endif 459c17d615SPaolo Bonzini #ifndef EINPROGRESS 469c17d615SPaolo Bonzini # define EINPROGRESS WSAEINPROGRESS 479c17d615SPaolo Bonzini #endif 489c17d615SPaolo Bonzini #ifndef ENETUNREACH 499c17d615SPaolo Bonzini # define ENETUNREACH WSAENETUNREACH 509c17d615SPaolo Bonzini #endif 519c17d615SPaolo Bonzini #ifndef ENOTCONN 529c17d615SPaolo Bonzini # define ENOTCONN WSAENOTCONN 539c17d615SPaolo Bonzini #endif 549c17d615SPaolo Bonzini #ifndef EWOULDBLOCK 559c17d615SPaolo Bonzini # define EWOULDBLOCK WSAEWOULDBLOCK 569c17d615SPaolo Bonzini #endif 579c17d615SPaolo Bonzini 589c17d615SPaolo Bonzini #if defined(_WIN64) 599c17d615SPaolo Bonzini /* On w64, setjmp is implemented by _setjmp which needs a second parameter. 609c17d615SPaolo Bonzini * If this parameter is NULL, longjump does no stack unwinding. 619c17d615SPaolo Bonzini * That is what we need for QEMU. Passing the value of register rsp (default) 629c17d615SPaolo Bonzini * lets longjmp try a stack unwinding which will crash with generated code. */ 639c17d615SPaolo Bonzini # undef setjmp 649c17d615SPaolo Bonzini # define setjmp(env) _setjmp(env, NULL) 659c17d615SPaolo Bonzini #endif 666ab7e546SPeter Maydell /* QEMU uses sigsetjmp()/siglongjmp() as the portable way to specify 676ab7e546SPeter Maydell * "longjmp and don't touch the signal masks". Since we know that the 686ab7e546SPeter Maydell * savemask parameter will always be zero we can safely define these 696ab7e546SPeter Maydell * in terms of setjmp/longjmp on Win32. 706ab7e546SPeter Maydell */ 716ab7e546SPeter Maydell #define sigjmp_buf jmp_buf 726ab7e546SPeter Maydell #define sigsetjmp(env, savemask) setjmp(env) 736ab7e546SPeter Maydell #define siglongjmp(env, val) longjmp(env, val) 749c17d615SPaolo Bonzini 759c17d615SPaolo Bonzini /* Missing POSIX functions. Don't use MinGW-w64 macros. */ 764d9310f4SDaniel P. Berrange #ifndef CONFIG_LOCALTIME_R 779c17d615SPaolo Bonzini #undef gmtime_r 789c17d615SPaolo Bonzini struct tm *gmtime_r(const time_t *timep, struct tm *result); 799c17d615SPaolo Bonzini #undef localtime_r 809c17d615SPaolo Bonzini struct tm *localtime_r(const time_t *timep, struct tm *result); 814d9310f4SDaniel P. Berrange #endif /* CONFIG_LOCALTIME_R */ 829c17d615SPaolo Bonzini 837b2d9779SStefan Weil 849c17d615SPaolo Bonzini static inline void os_setup_signal_handling(void) {} 859c17d615SPaolo Bonzini static inline void os_daemonize(void) {} 869c17d615SPaolo Bonzini static inline void os_setup_post(void) {} 879c17d615SPaolo Bonzini void os_set_line_buffering(void); 889c17d615SPaolo Bonzini static inline void os_set_proc_name(const char *dummy) {} 899c17d615SPaolo Bonzini 90*a28c2f2dSStefan Weil int getpagesize(void); 9138183310SPaolo Bonzini 929c17d615SPaolo Bonzini #if !defined(EPROTONOSUPPORT) 939c17d615SPaolo Bonzini # define EPROTONOSUPPORT EINVAL 949c17d615SPaolo Bonzini #endif 959c17d615SPaolo Bonzini 969c17d615SPaolo Bonzini int setenv(const char *name, const char *value, int overwrite); 979c17d615SPaolo Bonzini 989c17d615SPaolo Bonzini typedef struct { 999c17d615SPaolo Bonzini long tv_sec; 1009c17d615SPaolo Bonzini long tv_usec; 1019c17d615SPaolo Bonzini } qemu_timeval; 1029c17d615SPaolo Bonzini int qemu_gettimeofday(qemu_timeval *tp); 1039c17d615SPaolo Bonzini 1049c17d615SPaolo Bonzini static inline bool is_daemonized(void) 1059c17d615SPaolo Bonzini { 1069c17d615SPaolo Bonzini return false; 1079c17d615SPaolo Bonzini } 1089c17d615SPaolo Bonzini 109888a6bc6SSatoru Moriya static inline int os_mlock(void) 110888a6bc6SSatoru Moriya { 111888a6bc6SSatoru Moriya return -ENOSYS; 112888a6bc6SSatoru Moriya } 113888a6bc6SSatoru Moriya 1141aad8104SPeter Maydell #define fsync _commit 1151aad8104SPeter Maydell 1161aad8104SPeter Maydell #if !defined(lseek) 1171aad8104SPeter Maydell # define lseek _lseeki64 1181aad8104SPeter Maydell #endif 1191aad8104SPeter Maydell 1201aad8104SPeter Maydell int qemu_ftruncate64(int, int64_t); 1211aad8104SPeter Maydell 1221aad8104SPeter Maydell #if !defined(ftruncate) 1231aad8104SPeter Maydell # define ftruncate qemu_ftruncate64 1241aad8104SPeter Maydell #endif 1251aad8104SPeter Maydell 1261aad8104SPeter Maydell static inline char *realpath(const char *path, char *resolved_path) 1271aad8104SPeter Maydell { 1281aad8104SPeter Maydell _fullpath(resolved_path, path, _MAX_PATH); 1291aad8104SPeter Maydell return resolved_path; 1301aad8104SPeter Maydell } 1311aad8104SPeter Maydell 1329c17d615SPaolo Bonzini #endif 133