include/mscvpdb.h: Use flexible array members for the rest of structures.
[wine.git] / dlls / wpcap / unixlib.c
blob6db4800d16bb9e5e741268026110c34b29c58f00
1 /*
2 * Copyright 2011, 2014 André Hentschel
3 * Copyright 2021 Hans Leidekker for CodeWeavers
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
20 #if 0
21 #pragma makedep unix
22 #endif
24 #include "config.h"
26 #ifdef HAVE_PCAP_PCAP_H
27 #include <pcap/pcap.h>
29 #include <assert.h>
30 #include <stdarg.h>
31 #include <stdlib.h>
32 #include <limits.h>
33 #include "ntstatus.h"
34 #define WIN32_NO_STATUS
35 #include "windef.h"
36 #include "winbase.h"
37 #include "winternl.h"
39 #include "wine/unixlib.h"
40 #include "wine/debug.h"
41 #include "unixlib.h"
43 WINE_DEFAULT_DEBUG_CHANNEL(wpcap);
45 static NTSTATUS wrap_activate( void *args )
47 const struct activate_params *params = args;
48 return pcap_activate( (pcap_t *)(ULONG_PTR)params->handle );
51 static NTSTATUS wrap_breakloop( void *args )
53 const struct breakloop_params *params = args;
54 pcap_breakloop( (pcap_t *)(ULONG_PTR)params->handle );
55 return STATUS_SUCCESS;
58 static NTSTATUS wrap_bufsize( void *args )
60 const struct bufsize_params *params = args;
61 return pcap_bufsize( (pcap_t *)(ULONG_PTR)params->handle );
64 static NTSTATUS wrap_can_set_rfmon( void *args )
66 const struct can_set_rfmon_params *params = args;
67 return pcap_can_set_rfmon( (pcap_t *)(ULONG_PTR)params->handle );
70 static NTSTATUS wrap_close( void *args )
72 const struct close_params *params = args;
73 pcap_close( (pcap_t *)(ULONG_PTR)params->handle );
74 return STATUS_SUCCESS;
77 static NTSTATUS wrap_compile( void *args )
79 struct compile_params *params = args;
80 struct bpf_program program;
81 int ret;
83 if (!(ret = pcap_compile( (pcap_t *)(ULONG_PTR)params->handle, &program, params->str, params->optimize,
84 params->mask )))
86 if (*params->program_len < program.bf_len) ret = STATUS_BUFFER_TOO_SMALL;
87 else memcpy( params->program_insns, program.bf_insns, program.bf_len * sizeof(*program.bf_insns) );
88 *params->program_len = program.bf_len;
89 pcap_freecode( &program );
91 return ret;
94 static NTSTATUS wrap_create( void *args )
96 struct create_params *params = args;
97 if (!(*params->handle = (ULONG_PTR)pcap_create( params->source, params->errbuf ))) return STATUS_NO_MEMORY;
98 return STATUS_SUCCESS;
101 static NTSTATUS wrap_datalink( void *args )
103 struct datalink_params *params = args;
104 return pcap_datalink( (pcap_t *)(ULONG_PTR)params->handle );
107 static NTSTATUS wrap_datalink_name_to_val( void *args )
109 struct datalink_name_to_val_params *params = args;
110 return pcap_datalink_name_to_val( params->name );
113 static NTSTATUS wrap_datalink_val_to_description( void *args )
115 const struct datalink_val_to_description_params *params = args;
116 const char *str = pcap_datalink_val_to_description( params->link );
117 int len;
119 if (!str || !params->buf) return STATUS_INVALID_PARAMETER;
120 if ((len = strlen( str )) >= *params->buflen)
122 *params->buflen = len + 1;
123 return STATUS_BUFFER_TOO_SMALL;
125 strcpy( params->buf, str );
126 return STATUS_SUCCESS;
129 static NTSTATUS wrap_datalink_val_to_name( void *args )
131 const struct datalink_val_to_name_params *params = args;
132 const char *str = pcap_datalink_val_to_name( params->link );
133 int len;
135 if (!str || !params->buf) return STATUS_INVALID_PARAMETER;
136 if ((len = strlen( str )) >= *params->buflen)
138 *params->buflen = len + 1;
139 return STATUS_BUFFER_TOO_SMALL;
141 strcpy( params->buf, str );
142 return STATUS_SUCCESS;
145 static NTSTATUS wrap_dump( void *args )
147 const struct dump_params *params = args;
149 if (sizeof(void *) == 4)
151 struct pcap_pkthdr_win32 hdr32;
152 hdr32.ts.tv_sec = params->hdr->ts.tv_sec;
153 hdr32.ts.tv_usec = params->hdr->ts.tv_usec;
154 hdr32.caplen = params->hdr->caplen;
155 hdr32.len = params->hdr->len;
156 pcap_dump( params->user, (const struct pcap_pkthdr *)&hdr32, params->packet );
158 else
160 struct pcap_pkthdr hdr64;
161 hdr64.ts.tv_sec = params->hdr->ts.tv_sec;
162 hdr64.ts.tv_usec = params->hdr->ts.tv_usec;
163 hdr64.caplen = params->hdr->caplen;
164 hdr64.len = params->hdr->len;
165 pcap_dump( params->user, &hdr64, params->packet );
167 return STATUS_SUCCESS;
170 static NTSTATUS wrap_dump_close( void *args )
172 const struct dump_close_params *params = args;
173 pcap_dump_close( (pcap_dumper_t *)(ULONG_PTR)params->handle );
174 return STATUS_SUCCESS;
177 static NTSTATUS wrap_dump_open( void *args )
179 const struct dump_open_params *params = args;
180 *params->ret_handle = (ULONG_PTR)pcap_dump_open( (pcap_t *)(ULONG_PTR)params->handle, params->name );
181 return STATUS_SUCCESS;
184 static NTSTATUS wrap_findalldevs( void *args )
186 const struct findalldevs_params *params = args;
187 pcap_if_t *devs = NULL, *src;
188 struct pcap_interface_offsets *dst = (struct pcap_interface_offsets *)params->buf;
189 int ret, len_total = 0;
191 if ((ret = pcap_findalldevs( &devs, params->errbuf ))) return ret;
193 src = devs;
194 while (src)
196 int len_name = strlen( src->name ) + 1, len_description = src->description ? strlen( src->description ) + 1 : 0;
197 int len = sizeof(*dst) + len_name + len_description;
199 if (*params->buflen >= len_total + len)
201 dst->name_offset = sizeof(*dst);
202 dst->name_len = len_name;
203 strcpy( (char *)dst + dst->name_offset, src->name );
204 if (!len_description) dst->description_offset = dst->description_len = 0;
205 else
207 dst->description_offset = dst->name_offset + len_name;
208 dst->description_len = len_description;
209 strcpy( (char *)dst + dst->description_offset, src->description );
211 dst->flags = src->flags;
212 dst = (struct pcap_interface_offsets *)((char *)dst + len);
214 len_total += len;
215 src = src->next;
218 if (*params->buflen < len_total) ret = STATUS_BUFFER_TOO_SMALL;
219 *params->buflen = len_total;
220 pcap_freealldevs( devs );
221 return ret;
224 static NTSTATUS wrap_get_tstamp_precision( void *args )
226 const struct get_tstamp_precision_params *params = args;
227 return pcap_get_tstamp_precision( (pcap_t *)(ULONG_PTR)params->handle );
230 static NTSTATUS wrap_geterr( void *args )
232 const struct geterr_params *params = args;
233 char *errbuf = pcap_geterr( (pcap_t *)(ULONG_PTR)params->handle );
234 assert( strlen(errbuf) < PCAP_ERRBUF_SIZE );
235 strcpy( params->errbuf, errbuf );
236 return STATUS_SUCCESS;
239 static NTSTATUS wrap_getnonblock( void *args )
241 const struct getnonblock_params *params = args;
242 return pcap_getnonblock( (pcap_t *)(ULONG_PTR)params->handle, params->errbuf );
245 static NTSTATUS wrap_init( void *args )
247 const struct init_params *params = args;
248 return pcap_init( params->opt, params->errbuf );
251 static NTSTATUS wrap_lib_version( void *args )
253 const struct lib_version_params *params = args;
254 const char *str = pcap_lib_version();
255 unsigned int len = min( strlen(str) + 1, params->size );
257 memcpy( params->version, str, len );
258 params->version[len - 1] = 0;
259 return STATUS_SUCCESS;
262 static NTSTATUS wrap_list_datalinks( void *args )
264 const struct list_datalinks_params *params = args;
265 NTSTATUS status = STATUS_SUCCESS;
266 int *links = NULL, count;
268 if ((count = pcap_list_datalinks( (pcap_t *)(ULONG_PTR)params->handle, &links )) > 0)
270 if (*params->count < count) status = STATUS_BUFFER_TOO_SMALL;
271 else memcpy( params->links, links, count * sizeof(*links) );
273 pcap_free_datalinks( links );
274 *params->count = count;
275 return status;
278 static NTSTATUS wrap_list_tstamp_types( void *args )
280 const struct list_tstamp_types_params *params = args;
281 NTSTATUS status = STATUS_SUCCESS;
282 int *types = NULL, count;
284 if ((count = pcap_list_tstamp_types( (pcap_t *)(ULONG_PTR)params->handle, &types )) > 0)
286 if (*params->count < count) status = STATUS_BUFFER_TOO_SMALL;
287 else memcpy( params->types, types, count * sizeof(*types) );
289 pcap_free_tstamp_types( types );
290 *params->count = count;
291 return status;
294 static NTSTATUS wrap_lookupnet( void *args )
296 const struct lookupnet_params *params = args;
297 return pcap_lookupnet( params->device, params->net, params->mask, params->errbuf );
300 static NTSTATUS wrap_major_version( void *args )
302 const struct major_version_params *params = args;
303 return pcap_major_version( (pcap_t *)(ULONG_PTR)params->handle );
306 static NTSTATUS wrap_minor_version( void *args )
308 const struct minor_version_params *params = args;
309 return pcap_minor_version( (pcap_t *)(ULONG_PTR)params->handle );
312 static NTSTATUS wrap_next_ex( void *args )
314 struct next_ex_params *params = args;
315 int ret;
317 if (sizeof(void *) == 4)
319 struct pcap_pkthdr_win32 *hdr32;
320 if ((ret = pcap_next_ex( (pcap_t *)(ULONG_PTR)params->handle, (struct pcap_pkthdr **)&hdr32, params->data )) == 1)
322 params->hdr->ts.tv_sec = hdr32->ts.tv_sec;
323 params->hdr->ts.tv_usec = hdr32->ts.tv_usec;
324 params->hdr->caplen = hdr32->caplen;
325 params->hdr->len = hdr32->len;
328 else
330 struct pcap_pkthdr *hdr64;
331 if ((ret = pcap_next_ex( (pcap_t *)(ULONG_PTR)params->handle, &hdr64, params->data )) == 1)
333 if (hdr64->ts.tv_sec > INT_MAX || hdr64->ts.tv_usec > INT_MAX) WARN( "truncating timeval values(s)\n" );
334 params->hdr->ts.tv_sec = hdr64->ts.tv_sec;
335 params->hdr->ts.tv_usec = hdr64->ts.tv_usec;
336 params->hdr->caplen = hdr64->caplen;
337 params->hdr->len = hdr64->len;
340 return ret;
343 static NTSTATUS wrap_open_live( void *args )
345 const struct open_live_params *params = args;
346 if (!(*params->handle = (ULONG_PTR)pcap_open_live( params->source, params->snaplen, params->promisc,
347 params->timeout, params->errbuf ))) return STATUS_NO_MEMORY;
348 return STATUS_SUCCESS;
351 static NTSTATUS wrap_sendpacket( void *args )
353 const struct sendpacket_params *params = args;
354 return pcap_sendpacket( (pcap_t *)(ULONG_PTR)params->handle, params->buf, params->size );
357 static NTSTATUS wrap_set_buffer_size( void *args )
359 const struct set_buffer_size_params *params = args;
360 return pcap_set_buffer_size( (pcap_t *)(ULONG_PTR)params->handle, params->size );
363 static NTSTATUS wrap_set_datalink( void *args )
365 const struct set_datalink_params *params = args;
366 return pcap_set_datalink( (pcap_t *)(ULONG_PTR)params->handle, params->link );
369 static NTSTATUS wrap_set_promisc( void *args )
371 const struct set_promisc_params *params = args;
372 return pcap_set_promisc( (pcap_t *)(ULONG_PTR)params->handle, params->enable );
375 static NTSTATUS wrap_set_rfmon( void *args )
377 const struct set_rfmon_params *params = args;
378 return pcap_set_rfmon( (pcap_t *)(ULONG_PTR)params->handle, params->enable );
381 static NTSTATUS wrap_set_snaplen( void *args )
383 const struct set_snaplen_params *params = args;
384 return pcap_set_snaplen( (pcap_t *)(ULONG_PTR)params->handle, params->len );
387 static NTSTATUS wrap_set_timeout( void *args )
389 const struct set_timeout_params *params = args;
390 return pcap_set_timeout( (pcap_t *)(ULONG_PTR)params->handle, params->timeout );
393 static NTSTATUS wrap_set_tstamp_precision( void *args )
395 const struct set_tstamp_precision_params *params = args;
396 return pcap_set_tstamp_precision( (pcap_t *)(ULONG_PTR)params->handle, params->precision );
399 static NTSTATUS wrap_set_tstamp_type( void *args )
401 const struct set_tstamp_type_params *params = args;
402 return pcap_set_tstamp_type( (pcap_t *)(ULONG_PTR)params->handle, params->type );
405 static NTSTATUS wrap_setfilter( void *args )
407 const struct setfilter_params *params = args;
408 struct bpf_program program = { params->program_len, params->program_insns };
409 return pcap_setfilter( (pcap_t *)(ULONG_PTR)params->handle, &program );
412 static NTSTATUS wrap_setnonblock( void *args )
414 const struct setnonblock_params *params = args;
415 return pcap_setnonblock( (pcap_t *)(ULONG_PTR)params->handle, params->nonblock, params->errbuf );
418 static NTSTATUS wrap_snapshot( void *args )
420 const struct snapshot_params *params = args;
421 return pcap_snapshot( (pcap_t *)(ULONG_PTR)params->handle );
424 static NTSTATUS wrap_stats( void *args )
426 struct stats_params *params = args;
427 struct pcap_stat stat;
428 int ret;
430 if (!(ret = pcap_stats( (pcap_t *)(ULONG_PTR)params->handle, &stat )))
432 params->stat.ps_recv = stat.ps_recv;
433 params->stat.ps_drop = stat.ps_drop;
434 params->stat.ps_ifdrop = stat.ps_ifdrop;
435 params->stat.ps_capt = 0;
436 params->stat.ps_sent = 0;
437 params->stat.ps_netdrop = 0;
439 return ret;
442 static NTSTATUS wrap_tstamp_type_name_to_val( void *args )
444 const struct tstamp_type_name_to_val_params *params = args;
445 return pcap_tstamp_type_name_to_val( params->name );
448 static NTSTATUS wrap_tstamp_type_val_to_description( void *args )
450 const struct tstamp_type_val_to_description_params *params = args;
451 const char *str = pcap_tstamp_type_val_to_description( params->type );
452 int len;
454 if (!str || !params->buf) return STATUS_INVALID_PARAMETER;
455 if ((len = strlen( str )) >= *params->buflen)
457 *params->buflen = len + 1;
458 return STATUS_BUFFER_TOO_SMALL;
460 strcpy( params->buf, str );
461 return STATUS_SUCCESS;
464 static NTSTATUS wrap_tstamp_type_val_to_name( void *args )
466 const struct tstamp_type_val_to_name_params *params = args;
467 const char *str = pcap_tstamp_type_val_to_name( params->type );
468 int len;
470 if (!str || !params->buf) return STATUS_INVALID_PARAMETER;
471 if ((len = strlen( str )) >= *params->buflen)
473 *params->buflen = len + 1;
474 return STATUS_BUFFER_TOO_SMALL;
476 strcpy( params->buf, str );
477 return STATUS_SUCCESS;
480 const unixlib_entry_t __wine_unix_call_funcs[] =
482 wrap_activate,
483 wrap_breakloop,
484 wrap_bufsize,
485 wrap_can_set_rfmon,
486 wrap_close,
487 wrap_compile,
488 wrap_create,
489 wrap_datalink,
490 wrap_datalink_name_to_val,
491 wrap_datalink_val_to_description,
492 wrap_datalink_val_to_name,
493 wrap_dump,
494 wrap_dump_close,
495 wrap_dump_open,
496 wrap_findalldevs,
497 wrap_get_tstamp_precision,
498 wrap_geterr,
499 wrap_getnonblock,
500 wrap_init,
501 wrap_lib_version,
502 wrap_list_datalinks,
503 wrap_list_tstamp_types,
504 wrap_lookupnet,
505 wrap_major_version,
506 wrap_minor_version,
507 wrap_next_ex,
508 wrap_open_live,
509 wrap_sendpacket,
510 wrap_set_buffer_size,
511 wrap_set_datalink,
512 wrap_set_promisc,
513 wrap_set_rfmon,
514 wrap_set_snaplen,
515 wrap_set_timeout,
516 wrap_set_tstamp_precision,
517 wrap_set_tstamp_type,
518 wrap_setfilter,
519 wrap_setnonblock,
520 wrap_snapshot,
521 wrap_stats,
522 wrap_tstamp_type_name_to_val,
523 wrap_tstamp_type_val_to_description,
524 wrap_tstamp_type_val_to_name,
527 C_ASSERT( ARRAYSIZE(__wine_unix_call_funcs) == unix_funcs_count );
529 #ifdef _WIN64
531 typedef ULONG PTR32;
533 static NTSTATUS wow64_compile( void *args )
535 struct
537 UINT64 handle;
538 PTR32 program_len;
539 PTR32 program_insns;
540 PTR32 str;
541 int optimize;
542 unsigned int mask;
543 } const *params32 = args;
545 struct compile_params params =
547 params32->handle,
548 ULongToPtr(params32->program_len),
549 ULongToPtr(params32->program_insns),
550 ULongToPtr(params32->str),
551 params32->optimize,
552 params32->mask
554 return wrap_compile( &params );
557 static NTSTATUS wow64_create( void *args )
559 struct
561 PTR32 source;
562 PTR32 errbuf;
563 PTR32 handle;
564 } const *params32 = args;
566 struct create_params params =
568 ULongToPtr(params32->source),
569 ULongToPtr(params32->errbuf),
570 ULongToPtr(params32->handle),
572 return wrap_create( &params );
575 static NTSTATUS wow64_datalink_name_to_val( void *args )
577 struct
579 PTR32 name;
580 } const *params32 = args;
582 struct datalink_name_to_val_params params =
584 ULongToPtr(params32->name),
586 return wrap_datalink_name_to_val( &params );
589 static NTSTATUS wow64_datalink_val_to_description( void *args )
591 struct
593 int link;
594 PTR32 buf;
595 PTR32 buflen;
596 } const *params32 = args;
598 struct datalink_val_to_description_params params =
600 params32->link,
601 ULongToPtr(params32->buf),
602 ULongToPtr(params32->buflen)
604 return wrap_datalink_val_to_description( &params );
607 static NTSTATUS wow64_datalink_val_to_name( void *args )
609 struct
611 int link;
612 PTR32 buf;
613 PTR32 buflen;
614 } const *params32 = args;
616 struct datalink_val_to_name_params params =
618 params32->link,
619 ULongToPtr(params32->buf),
620 ULongToPtr(params32->buflen)
622 return wrap_datalink_val_to_name( &params );
625 static NTSTATUS wow64_dump( void *args )
627 struct
629 PTR32 user;
630 PTR32 hdr;
631 PTR32 packet;
632 } const *params32 = args;
634 struct dump_params params =
636 ULongToPtr(params32->user),
637 ULongToPtr(params32->hdr),
638 ULongToPtr(params32->packet)
640 return wrap_dump( &params );
643 static NTSTATUS wow64_dump_open( void *args )
645 struct
647 UINT64 handle;
648 PTR32 name;
649 PTR32 ret_handle;
650 } const *params32 = args;
652 struct datalink_val_to_name_params params =
654 params32->handle,
655 ULongToPtr(params32->name),
656 ULongToPtr(params32->ret_handle)
658 return wrap_dump_open( &params );
661 static NTSTATUS wow64_findalldevs( void *args )
663 struct
665 PTR32 buf;
666 PTR32 buflen;
667 PTR32 errbuf;
668 } const *params32 = args;
670 struct findalldevs_params params =
672 ULongToPtr(params32->buf),
673 ULongToPtr(params32->buflen),
674 ULongToPtr(params32->errbuf)
676 return wrap_findalldevs( &params );
679 static NTSTATUS wow64_geterr( void *args )
681 struct
683 UINT64 handle;
684 PTR32 errbuf;
685 } const *params32 = args;
687 struct geterr_params params =
689 params32->handle,
690 ULongToPtr(params32->errbuf)
692 return wrap_geterr( &params );
695 static NTSTATUS wow64_getnonblock( void *args )
697 struct
699 UINT64 handle;
700 PTR32 errbuf;
701 } const *params32 = args;
703 struct getnonblock_params params =
705 params32->handle,
706 ULongToPtr(params32->errbuf)
708 return wrap_getnonblock( &params );
711 static NTSTATUS wow64_init( void *args )
713 struct
715 int opt;
716 PTR32 errbuf;
717 } const *params32 = args;
719 struct init_params params =
721 params32->opt,
722 ULongToPtr(params32->errbuf)
724 return wrap_init( &params );
727 static NTSTATUS wow64_lib_version( void *args )
729 struct
731 PTR32 version;
732 unsigned int size;
733 } const *params32 = args;
735 struct lib_version_params params =
737 ULongToPtr(params32->version),
738 params32->size
740 return wrap_lib_version( &params );
743 static NTSTATUS wow64_list_datalinks( void *args )
745 struct
747 UINT64 handle;
748 PTR32 links;
749 PTR32 count;
750 } const *params32 = args;
752 struct list_datalinks_params params =
754 params32->handle,
755 ULongToPtr(params32->links),
756 ULongToPtr(params32->count)
758 return wrap_list_datalinks( &params );
761 static NTSTATUS wow64_list_tstamp_types( void *args )
763 struct
765 UINT64 handle;
766 PTR32 types;
767 PTR32 count;
768 } const *params32 = args;
770 struct list_tstamp_types_params params =
772 params32->handle,
773 ULongToPtr(params32->types),
774 ULongToPtr(params32->count)
776 return wrap_list_tstamp_types( &params );
779 static NTSTATUS wow64_lookupnet( void *args )
781 struct
783 PTR32 device;
784 PTR32 net;
785 PTR32 mask;
786 PTR32 errbuf;
787 } const *params32 = args;
789 struct lookupnet_params params =
791 ULongToPtr(params32->device),
792 ULongToPtr(params32->net),
793 ULongToPtr(params32->mask),
794 ULongToPtr(params32->errbuf)
796 return wrap_lookupnet( &params );
799 static NTSTATUS wow64_next_ex( void *args )
801 struct
803 UINT64 handle;
804 PTR32 hdr;
805 PTR32 data;
806 } const *params32 = args;
808 struct next_ex_params params =
810 params32->handle,
811 ULongToPtr(params32->hdr),
812 ULongToPtr(params32->data)
814 return wrap_next_ex( &params );
817 static NTSTATUS wow64_open_live( void *args )
819 struct
821 PTR32 source;
822 int snaplen;
823 int promisc;
824 int timeout;
825 PTR32 errbuf;
826 PTR32 handle;
827 } const *params32 = args;
829 struct open_live_params params =
831 ULongToPtr(params32->source),
832 params32->snaplen,
833 params32->promisc,
834 params32->timeout,
835 ULongToPtr(params32->errbuf),
836 ULongToPtr(params32->handle)
838 return wrap_open_live( &params );
841 static NTSTATUS wow64_sendpacket( void *args )
843 struct
845 UINT64 handle;
846 PTR32 buf;
847 int size;
848 } const *params32 = args;
850 struct sendpacket_params params =
852 params32->handle,
853 ULongToPtr(params32->buf),
854 params32->size
856 return wrap_sendpacket( &params );
859 static NTSTATUS wow64_setfilter( void *args )
861 struct
863 UINT64 handle;
864 unsigned int program_len;
865 PTR32 program_insns;
866 } const *params32 = args;
868 struct setfilter_params params =
870 params32->handle,
871 params32->program_len,
872 ULongToPtr(params32->program_insns)
874 return wrap_setfilter( &params );
877 static NTSTATUS wow64_setnonblock( void *args )
879 struct
881 UINT64 handle;
882 int nonblock;
883 PTR32 errbuf;
884 } const *params32 = args;
886 struct setnonblock_params params =
888 params32->handle,
889 params32->nonblock,
890 ULongToPtr(params32->errbuf)
892 return wrap_setnonblock( &params );
895 static NTSTATUS wow64_tstamp_type_name_to_val( void *args )
897 struct
899 PTR32 name;
900 } const *params32 = args;
902 struct tstamp_type_name_to_val_params params =
904 ULongToPtr(params32->name)
906 return wrap_tstamp_type_name_to_val( &params );
909 static NTSTATUS wow64_tstamp_type_val_to_description( void *args )
911 struct
913 int type;
914 PTR32 buf;
915 PTR32 buflen;
916 } const *params32 = args;
918 struct tstamp_type_val_to_description_params params =
920 params32->type,
921 ULongToPtr(params32->buf),
922 ULongToPtr(params32->buflen)
924 return wrap_tstamp_type_val_to_description( &params );
927 static NTSTATUS wow64_tstamp_type_val_to_name( void *args )
929 struct
931 int type;
932 PTR32 buf;
933 PTR32 buflen;
934 } const *params32 = args;
936 struct tstamp_type_val_to_name_params params =
938 params32->type,
939 ULongToPtr(params32->buf),
940 ULongToPtr(params32->buflen)
942 return wrap_tstamp_type_val_to_name( &params );
945 const unixlib_entry_t __wine_unix_call_wow64_funcs[] =
947 wrap_activate,
948 wrap_breakloop,
949 wrap_bufsize,
950 wrap_can_set_rfmon,
951 wrap_close,
952 wow64_compile,
953 wow64_create,
954 wrap_datalink,
955 wow64_datalink_name_to_val,
956 wow64_datalink_val_to_description,
957 wow64_datalink_val_to_name,
958 wow64_dump,
959 wrap_dump_close,
960 wow64_dump_open,
961 wow64_findalldevs,
962 wrap_get_tstamp_precision,
963 wow64_geterr,
964 wow64_getnonblock,
965 wow64_init,
966 wow64_lib_version,
967 wow64_list_datalinks,
968 wow64_list_tstamp_types,
969 wow64_lookupnet,
970 wrap_major_version,
971 wrap_minor_version,
972 wow64_next_ex,
973 wow64_open_live,
974 wow64_sendpacket,
975 wrap_set_buffer_size,
976 wrap_set_datalink,
977 wrap_set_promisc,
978 wrap_set_rfmon,
979 wrap_set_snaplen,
980 wrap_set_timeout,
981 wrap_set_tstamp_precision,
982 wrap_set_tstamp_type,
983 wow64_setfilter,
984 wow64_setnonblock,
985 wrap_snapshot,
986 wrap_stats,
987 wow64_tstamp_type_name_to_val,
988 wow64_tstamp_type_val_to_description,
989 wow64_tstamp_type_val_to_name,
992 C_ASSERT( ARRAYSIZE(__wine_unix_call_wow64_funcs) == unix_funcs_count );
994 #endif /* _WIN64 */
996 #endif /* HAVE_PCAP_PCAP_H */