21.07.2014, 18:43
pawn Код:
stock InsertWildcardsIntoIp(ip[], count, asterisk = 1, checkvalid = 0)
{
new
j,
nip[16],
dotCount,
ipLen = strlen(ip),
bool:skipOctet = false,
wc = (asterisk) ? '*' : '%',
bool:inWCOctet = (count == 4) ? true : false;
if (ipLen >= 16 || ipLen < 7 || count > 4 || count < 1)
return 0;
if (checkValid) {
for (new i = 0; i < ipLen; i++)
if (ip[i] == '.')
dotCount++;
if (dotCount != 3)
return 0;
dotCount = 0;
}
for (new i = 0; i < ipLen; i++) {
if (ip[i] != '.') {
if (inWCOctet) {
if (!skipOctet) {
nip[j] = wc;
j++;
skipOctet = true;
}
} else {
if ('0' <= ip[i] <= '9') {
// numeric
nip[j] = ip[i];
j++;
} else
return 0;
}
} else {
// dot
dotCount++;
nip[j] = '.';
j++;
skipOctet = false;
inWCOctet = (count >= 4 - dotCount) ? true : false;
}
ip[i] = 0;
}
memcpy(ip, nip, 0, j * 4, j * 4);
return 1;
}

