rfbLog("skipping bad client hex id: %s\n", str);
rfbLog("skipping invalid client hex id: %s\n", str);
rfbClientPtr *client_match(char *str) {	rfbClientIteratorPtr iter;	rfbClientPtr cl, *cl_list;	int i, n, host_warn = 0, hex_warn = 0;	n = client_count + 10;	cl_list = (rfbClientPtr *) malloc(n * sizeof(rfbClientPtr));		i = 0;	iter = rfbGetClientIterator(screen);	while( (cl = rfbClientIteratorNext(iter)) ) {		if (strstr(str, "0x") == str) {			int id;			ClientData *cd = (ClientData *) cl->clientData;			if (sscanf(str, "0x%x", &id) != 1) {				if (hex_warn++) {					continue;				}				rfbLog("skipping bad client hex id: %s\n", str);				continue;			}			if ( cd->uid == id) {				cl_list[i++] = cl;			}		} else {			char *rstr = str;			if (! dotted_ip(str))  {				rstr = host2ip(str);				if (rstr == NULL || *rstr == '\0') {					if (host_warn++) {						continue;					}					rfbLog("skipping bad lookup: \"%s\"\n",					    str);					continue;				}				rfbLog("lookup: %s -> %s\n", str, rstr);			}			if (!strcmp(rstr, cl->host)) {				cl_list[i++] = cl;			}			if (rstr != str) {				free(rstr);			}		}		if (i >= n - 1) {			break;		}	}	rfbReleaseClientIterator(iter);	cl_list[i] = NULL;	return cl_list;}