X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=osdep.c;h=91fb39efaaf4ee7fe614bd3785d380ca3da37173;hb=1aef4c5779006a35306b4deb4e23a8ea4db9f6e2;hp=ae7e3fb8cae41559da16d537fd13ebd633413716;hpb=2520c665c8df68550dac083bb81bb0a1c414432d;p=qemu diff --git a/osdep.c b/osdep.c index ae7e3fb..91fb39e 100644 --- a/osdep.c +++ b/osdep.c @@ -33,18 +33,21 @@ #include #endif -#include "qemu-common.h" -#include "sysemu.h" +/* Needed early for HOST_BSD etc. */ +#include "config-host.h" #ifdef _WIN32 -#define WIN32_LEAN_AND_MEAN #include -#elif defined(_BSD) +#elif defined(HOST_BSD) #include #else #include #endif +#include "qemu-common.h" +#include "sysemu.h" +#include "qemu_socket.h" + #if defined(_WIN32) void *qemu_memalign(size_t alignment, size_t size) { @@ -68,7 +71,16 @@ void qemu_vfree(void *ptr) #if defined(USE_KQEMU) +#ifdef __OpenBSD__ +#include +#include +#include +#else +#ifndef __FreeBSD__ #include +#endif +#endif + #include #include @@ -76,9 +88,15 @@ static void *kqemu_vmalloc(size_t size) { static int phys_ram_fd = -1; static int phys_ram_size = 0; + void *ptr; + +/* no need (?) for a dummy file on OpenBSD/FreeBSD */ +#if defined(__OpenBSD__) || defined(__FreeBSD__) || defined(__DragonFly__) + int map_anon = MAP_ANON; +#else + int map_anon = 0; const char *tmpdir; char phys_ram_file[1024]; - void *ptr; #ifdef HOST_SOLARIS struct statvfs stfs; #else @@ -98,7 +116,6 @@ static void *kqemu_vmalloc(size_t size) int64_t free_space; int ram_mb; - extern int ram_size; free_space = (int64_t)stfs.f_bavail * stfs.f_bsize; if ((ram_size + 8192 * 1024) >= free_space) { ram_mb = (ram_size / (1024 * 1024)); @@ -141,9 +158,10 @@ static void *kqemu_vmalloc(size_t size) } size = (size + 4095) & ~4095; ftruncate(phys_ram_fd, phys_ram_size + size); +#endif /* !(__OpenBSD__ || __FreeBSD__ || __DragonFly__) */ ptr = mmap(NULL, size, - PROT_WRITE | PROT_READ, MAP_SHARED, + PROT_WRITE | PROT_READ, map_anon | MAP_SHARED, phys_ram_fd, phys_ram_size); if (ptr == MAP_FAILED) { fprintf(stderr, "Could not map physical memory\n"); @@ -169,7 +187,7 @@ void *qemu_memalign(size_t alignment, size_t size) if (ret != 0) return NULL; return ptr; -#elif defined(_BSD) +#elif defined(HOST_BSD) return valloc(size); #else return memalign(alignment, size); @@ -183,11 +201,7 @@ void *qemu_vmalloc(size_t size) if (kqemu_allowed) return kqemu_vmalloc(size); #endif -#ifdef _BSD - return valloc(size); -#else - return memalign(4096, size); -#endif + return qemu_memalign(getpagesize(), size); } void qemu_vfree(void *ptr) @@ -271,3 +285,28 @@ int qemu_gettimeofday(qemu_timeval *tp) return 0; } #endif /* _WIN32 */ + + +#ifdef _WIN32 +void socket_set_nonblock(int fd) +{ + unsigned long opt = 1; + ioctlsocket(fd, FIONBIO, &opt); +} + +int inet_aton(const char *cp, struct in_addr *ia) +{ + uint32_t addr = inet_addr(cp); + if (addr == 0xffffffff) + return 0; + ia->s_addr = addr; + return 1; +} +#else +void socket_set_nonblock(int fd) +{ + int f; + f = fcntl(fd, F_GETFL); + fcntl(fd, F_SETFL, f | O_NONBLOCK); +} +#endif