pcap_create() should accept UNICODE device names as well as ASCII ones
on Windows.
This commit is contained in:
parent
1f93b0fda9
commit
c975220bd1
35
pcap-win32.c
35
pcap-win32.c
|
@ -33,7 +33,7 @@
|
||||||
|
|
||||||
#ifndef lint
|
#ifndef lint
|
||||||
static const char rcsid[] _U_ =
|
static const char rcsid[] _U_ =
|
||||||
"@(#) $Header: /tcpdump/master/libpcap/pcap-win32.c,v 1.41 2008-04-25 20:03:34 gianluca Exp $ (LBL)";
|
"@(#) $Header: /tcpdump/master/libpcap/pcap-win32.c,v 1.42 2008-05-21 22:15:25 gianluca Exp $ (LBL)";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <pcap-int.h>
|
#include <pcap-int.h>
|
||||||
|
@ -698,7 +698,38 @@ pcap_create(const char *device, char *ebuf)
|
||||||
{
|
{
|
||||||
pcap_t *p;
|
pcap_t *p;
|
||||||
|
|
||||||
p = pcap_create_common(device, ebuf);
|
if (strlen(device) == 1)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* It's probably a unicode string
|
||||||
|
* Convert to ascii and pass it to pcap_create_common
|
||||||
|
*
|
||||||
|
* This wonderful hack is needed because pcap_lookupdev still returns
|
||||||
|
* unicode strings, and it's used by windump when no device is specified
|
||||||
|
* in the command line
|
||||||
|
*/
|
||||||
|
size_t length;
|
||||||
|
char* deviceAscii;
|
||||||
|
|
||||||
|
length = wcslen((wchar_t*)device);
|
||||||
|
|
||||||
|
deviceAscii = (char*)malloc(length + 1);
|
||||||
|
|
||||||
|
if (deviceAscii == NULL)
|
||||||
|
{
|
||||||
|
snprintf(ebuf, PCAP_ERRBUF_SIZE, "Malloc failed");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
snprintf(deviceAscii, length + 1, "%ws", (wchar_t*)device);
|
||||||
|
p = pcap_create_common(deviceAscii, ebuf);
|
||||||
|
free(deviceAscii);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
p = pcap_create_common(device, ebuf);
|
||||||
|
}
|
||||||
|
|
||||||
if (p == NULL)
|
if (p == NULL)
|
||||||
return (NULL);
|
return (NULL);
|
||||||
|
|
||||||
|
|
Reference in New Issue