X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=tap-win32.c;h=3ff957fe699b7484190edf4e1150f97fb4f5e2ac;hb=de65fe0f9b25bb2257b0188e06f472991c87ce47;hp=13ca5399e3219f939620452b94a60f52e258fd61;hpb=bf38c1a0e1d7ebbe0930d8926dbc499b88a2d7db;p=qemu diff --git a/tap-win32.c b/tap-win32.c index 13ca539..3ff957f 100644 --- a/tap-win32.c +++ b/tap-win32.c @@ -30,7 +30,6 @@ #include "net.h" #include "sysemu.h" #include -#define WIN32_LEAN_AND_MEAN #include /* NOTE: PCIBus is redefined in winddk.h */ @@ -255,7 +254,7 @@ static int is_tap_win32_dev(const char *guid) component_id_string, NULL, &data_type, - component_id, + (LPBYTE)component_id, &len); if (!(status != ERROR_SUCCESS || data_type != REG_SZ)) { @@ -265,7 +264,7 @@ static int is_tap_win32_dev(const char *guid) net_cfg_instance_id_string, NULL, &data_type, - net_cfg_instance_id, + (LPBYTE)net_cfg_instance_id, &len); if (status == ERROR_SUCCESS && data_type == REG_SZ) { @@ -354,7 +353,7 @@ static int get_device_guid( name_string, NULL, &name_type, - name_data, + (LPBYTE)name_data, &len); if (status != ERROR_SUCCESS || name_type != REG_SZ) { @@ -561,7 +560,7 @@ static int tap_win32_read(tap_win32_overlapped_t *overlapped, } static void tap_win32_free_buffer(tap_win32_overlapped_t *overlapped, - char* pbuf) + uint8_t *pbuf) { tun_buffer_t* buffer = (tun_buffer_t*)pbuf; put_buffer_on_free_list(overlapped, buffer); @@ -581,7 +580,7 @@ static int tap_win32_open(tap_win32_overlapped_t **phandle, unsigned long minor; unsigned long debug; } version; - LONG version_len; + DWORD version_len; DWORD idThread; HANDLE hThread; @@ -639,6 +638,18 @@ static int tap_win32_open(tap_win32_overlapped_t **phandle, tap_win32_overlapped_t *handle; } TAPState; +static void tap_cleanup(VLANClientState *vc) +{ + TAPState *s = vc->opaque; + + qemu_del_wait_object(s->handle->tap_semaphore, NULL, NULL); + + /* FIXME: need to kill thread and close file handle: + tap_win32_close(s); + */ + qemu_free(s); +} + static void tap_receive(void *opaque, const uint8_t *buf, int size) { TAPState *s = opaque; @@ -660,7 +671,8 @@ static void tap_win32_send(void *opaque) } } -int tap_win32_init(VLANState *vlan, const char *model, const char *ifname) +int tap_win32_init(VLANState *vlan, const char *model, + const char *name, const char *ifname) { TAPState *s; @@ -672,7 +684,8 @@ int tap_win32_init(VLANState *vlan, const char *model, const char *ifname) return -1; } - s->vc = qemu_new_vlan_client(vlan, model, tap_receive, NULL, s); + s->vc = qemu_new_vlan_client(vlan, model, name, tap_receive, + NULL, tap_cleanup, s); snprintf(s->vc->info_str, sizeof(s->vc->info_str), "tap: ifname=%s", ifname);