rem: number = string_to_number(slash+1, 0, 255); if (number == -1)
add: if (string_to_number(slash+1, 0, 255, &number) == -1)
context: parse_icmp(const char *icmptype, u_int8_t *type, u_int8_t code[]){	unsigned int limit = sizeof(icmp_codes)/sizeof(struct icmp_names);	unsigned int match = limit;	unsigned int i;	for (i = 0; i < limit; i++) {		if (strncasecmp(icmp_codes[i].name, icmptype, strlen(icmptype))		    == 0) {			if (match != limit)				exit_error(PARAMETER_PROBLEM,					   "Ambiguous ICMP type `%s':"					   " `%s' or `%s'?",					   icmptype,					   icmp_codes[match].name,					   icmp_codes[i].name);			match = i;		}	}	if (match != limit) {		*type = icmp_codes[match].type;		code[0] = icmp_codes[match].code_min;		code[1] = icmp_codes[match].code_max;	} else {		char *slash;		char buffer[strlen(icmptype) + 1];		int number;		strcpy(buffer, icmptype);		slash = strchr(buffer, '/');		if (slash)			*slash = '\0';		number = string_to_number(buffer, 0, 255);		if (number == -1)			exit_error(PARAMETER_PROBLEM,				   "Invalid ICMP type `%s'\n", buffer);		*type = number;		if (slash) {			number = string_to_number(slash+1, 0, 255);			if (number == -1)				exit_error(PARAMETER_PROBLEM,					   "Invalid ICMP code `%s'\n",					   slash+1);			code[0] = code[1] = number;		} else {			code[0] = 0;			code[1] = 0xFF;		}	}	if (code[0] == 0 && code[1] == 0xFF)		return NFC_IP_SRC_PT;	else return NFC_IP_SRC_PT | NFC_IP_DST_PT;}