--- net-tools-1.57-1/lib/strip.c Sun Apr 2 05:57:31 2000 +++ net-tools-1.57-strip/lib/strip.c Sun Feb 11 17:32:35 2001 @@ -42,23 +42,63 @@ pr_strip(unsigned char *ptr) { static char buff[64]; - - sprintf(buff, "%02x%02x-%02x%02x", *(ptr+2), *(ptr+3), *(ptr+4), - *(ptr+5)); + if(*ptr) + { + sprintf(buff, "%01x%02x-%02x%02x-%02x%02x", ((*ptr) & 0xF) ^ 0xF, + (*(ptr+1)) ^ 0xFF, *(ptr+2), *(ptr+3), + *(ptr+4), *(ptr+5)); + }else{ + if(ptr[1]) + { + sprintf(buff, "%02x-%02x%02x-%02x%02x", (*(ptr+1)) ^ 0xFF, *(ptr+2), + *(ptr+3), + *(ptr+4), *(ptr+5)); + }else{ + sprintf(buff, "%02x%02x-%02x%02x", *(ptr+2), *(ptr+3), *(ptr+4), + *(ptr+5)); + } + } return buff; } static int in_strip(char *bufp, struct sockaddr *sap) { - int i; + int i,i0; + char tempbuf[2]; MetricomAddress *haddr = (MetricomAddress *) (sap->sa_data); sap->sa_family = strip_hwtype.type; /* figure out what the device-address should be */ - i = (bufp[0] == '*') ? 1 : 0; + i0 = i = (bufp[0] == '*') ? 1 : 0; + + while (bufp[i] && (bufp[i] != '-')) + i++; + + if (bufp[i] != '-') + return -1; + + if(i-i0 == 3) + { + tempbuf[0] = bufp[i0]; + tempbuf[1] = 0; + haddr->c[0] = (strtol(tempbuf, 0, 16)) ^ 0xF; + haddr->c[1] = (strtol(&bufp[i0+1], 0, 16)) ^ 0xFF; + i++; + if(bufp[i] == 0) return -1; + }else{ + if(i-i0 == 2) + { + haddr->c[1] = (strtol(&bufp[i0], 0, 16)) ^ 0xFF; + i++; + if(bufp[i] == 0) return -1; + }else{ + haddr->c[1] = 0; + i=i0; + } + } haddr->c[2] = strtol(&bufp[i], 0, 16) >> 8; haddr->c[3] = strtol(&bufp[i], 0, 16) & 0xFF; @@ -71,7 +111,6 @@ haddr->c[4] = strtol(&bufp[i+1], 0, 16) >> 8; haddr->c[5] = strtol(&bufp[i+1], 0, 16) & 0xFF; haddr->c[0] = 0; - haddr->c[1] = 0; return 0; }