rem: DBG("str2ip: WARNING: unexpected char %c in %s\n", *str, init);
add: DBG("str2ip: WARNING: unexpected char %c in %.*s\n", *str, len, init);
context: static inline unsigned int str2ip(unsigned char* str, unsigned int len,		int * err){	unsigned int ret;	int i;	unsigned char *limit;	unsigned char *init;	/*init*/	ret=i=0;	limit=str+len;	init=str;	for(;str<limit ;str++){		if (*str=='.'){				i++;				if (i>3) goto error_dots;		}else if ( (*str <= '9' ) && (*str >= '0') ){				((unsigned char*)&ret)[i]=((unsigned char*)&ret)[i]*10+											*str-'0';		}else{				//error unknown char				goto error_char;		}	}	if (err) *err=0;	return ret;error_dots:	DBG("str2ip: ERROR: too many dots in [%s]\n", init);	if (err) *err=1;	return 0;error_char:	DBG("str2ip: WARNING: unexpected char %c in %s\n", *str, init);	if (err) *err=1;	return 0;}