I think there's a bug in the XS code:
char *
arp_lookup(dev, ip, mac)
unsigned char *dev;
unsigned char *ip;
unsigned char *mac;
CODE:
char tmp[20];
if(SOCK_TYPE == SOCK_RAW)
{
arp_lookup_bsd(dev,ip,tmp);
}
else
{
arp_lookup_linux(dev,ip,tmp);
}
mac = tmp;
OUTPUT:
mac
That's the XS that handles arp_lookup(). Notice that it creates char tmp[20] without ever assigning anything to it (such as ""). I'm not a C guru, but that's a definite NO-NO. Because in the arp_lookup_linux() code, we have:
int arp_lookup_linux(char *dev, char *ip, char *mac)
{
FILE *fp;
char ipaddr[100];
char line[200];
char hwa[100];
char mask[100];
char device[100];
int num, type, flags;
if(strlen(mac) > 0)
strcpy(mac,"unkown");
else
return -1;
which leads me to believe -1 is being returned. I just think it's suspect.
| [reply] [d/l] [select] |