From: Hans Leidekker hans@codeweavers.com
--- dlls/wpcap/tests/wpcap.c | 4 ++-- dlls/wpcap/unixlib.c | 8 ++++---- dlls/wpcap/unixlib.h | 2 +- dlls/wpcap/wpcap.c | 18 ++++++++++++------ 4 files changed, 19 insertions(+), 13 deletions(-)
diff --git a/dlls/wpcap/tests/wpcap.c b/dlls/wpcap/tests/wpcap.c index 717b640a4d2..a7abf8042f6 100644 --- a/dlls/wpcap/tests/wpcap.c +++ b/dlls/wpcap/tests/wpcap.c @@ -124,7 +124,7 @@ static const char * (CDECL *ppcap_tstamp_type_val_to_name)( int );
static void CDECL capture_callback( unsigned char *user, const struct pcap_pkthdr *hdr, const unsigned char *bytes ) { - trace( "user %p hdr %p byte %p\n", user, hdr, bytes ); + trace( "user %p hdr %p bytes %p\n", user, hdr, bytes ); }
static void test_capture( void ) @@ -314,7 +314,7 @@ static void test_dump( void ) dumper = ppcap_dump_open( pcap, filename ); ok( dumper != NULL, "got NULL\n" );
- ret = ppcap_dispatch( pcap, 1, dump_callback, NULL ); + ret = ppcap_dispatch( pcap, 2, dump_callback, (unsigned char *)dumper ); ok( ret >= 0, "got %d\n", ret );
ppcap_dump_close( dumper ); diff --git a/dlls/wpcap/unixlib.c b/dlls/wpcap/unixlib.c index e0675537e2c..3c3353ac7f7 100644 --- a/dlls/wpcap/unixlib.c +++ b/dlls/wpcap/unixlib.c @@ -153,7 +153,7 @@ static NTSTATUS wrap_dump( void *args ) hdr32.ts.tv_usec = params->hdr->ts.tv_usec; hdr32.caplen = params->hdr->caplen; hdr32.len = params->hdr->len; - pcap_dump( params->user, (const struct pcap_pkthdr *)&hdr32, params->packet ); + pcap_dump( (unsigned char *)(ULONG_PTR)params->handle, (const struct pcap_pkthdr *)&hdr32, params->packet ); } else { @@ -162,7 +162,7 @@ static NTSTATUS wrap_dump( void *args ) hdr64.ts.tv_usec = params->hdr->ts.tv_usec; hdr64.caplen = params->hdr->caplen; hdr64.len = params->hdr->len; - pcap_dump( params->user, &hdr64, params->packet ); + pcap_dump( (unsigned char *)(ULONG_PTR)params->handle, &hdr64, params->packet ); } return STATUS_SUCCESS; } @@ -634,14 +634,14 @@ static NTSTATUS wow64_dump( void *args ) { struct { - PTR32 user; + UINT64 handle; PTR32 hdr; PTR32 packet; } const *params32 = args;
struct dump_params params = { - ULongToPtr(params32->user), + params32->handle, ULongToPtr(params32->hdr), ULongToPtr(params32->packet) }; diff --git a/dlls/wpcap/unixlib.h b/dlls/wpcap/unixlib.h index f8d4b41dd1a..fa821085e4d 100644 --- a/dlls/wpcap/unixlib.h +++ b/dlls/wpcap/unixlib.h @@ -133,7 +133,7 @@ struct datalink_val_to_name_params
struct dump_params { - unsigned char *user; + UINT64 handle; const struct pcap_pkthdr_win32 *hdr; const unsigned char *packet; }; diff --git a/dlls/wpcap/wpcap.c b/dlls/wpcap/wpcap.c index 26372cb9e87..96fe737476e 100644 --- a/dlls/wpcap/wpcap.c +++ b/dlls/wpcap/wpcap.c @@ -289,18 +289,24 @@ const char * CDECL pcap_datalink_val_to_name( int link ) return (datalinks[link].name = params.buf); }
+struct dumper +{ + UINT64 handle; +}; + void CDECL pcap_dump( unsigned char *user, const struct pcap_pkthdr_win32 *hdr, const unsigned char *packet ) { - struct dump_params params = { user, hdr, packet }; + struct dump_params params; + struct dumper *dumper = (struct dumper *)user; + TRACE( "%p, %p, %p\n", user, hdr, packet ); + + params.handle = dumper->handle; + params.hdr = hdr; + params.packet = packet; PCAP_CALL( dump, ¶ms ); }
-struct dumper -{ - UINT64 handle; -}; - void CDECL pcap_dump_close( struct dumper *dumper ) { struct dump_close_params params;