add: buffer.s = buf;
context: static void unix_server_loop(void){	int ret;	str cmd, buffer;	static char buf[UNIXSOCK_BUF_SIZE];	struct unixsock_cmd* c;	buffer.s = buf;	buffer.len = 0;		while(1) {		reply_addr_len = sizeof(reply_addr);		ret = recvfrom(rx_sock, buffer.s, UNIXSOCK_BUF_SIZE, 0, 			       (struct sockaddr*)&reply_addr, &reply_addr_len);		if (ret == -1) {			LOG(L_ERR, "unix_server_loop: recvfrom: (%d) %s\n", 			    errno, strerror(errno));			if ((errno == EINTR) || 			    (errno == EAGAIN) || 			    (errno == EWOULDBLOCK) || 			    (errno == ECONNREFUSED)) {				DBG("unix_server_loop: Got %d (%s), going on\n",				    errno, strerror(errno));				continue;			}		}		buffer.len = ret;		unixsock_reply_reset();		if (parse_cmd(&cmd, &buffer) < 0) {			unixsock_reply_asciiz("400 First line malformed\n");			unixsock_reply_send();			continue;		}		buffer.s = cmd.s + cmd.len + 1;		buffer.len -= cmd.len + 1 + 1;		skip_line(&buffer); /* Skip the reply filename */		c = lookup_cmd(&cmd);		if (c == 0) {			LOG(L_ERR, "unix_server_loop: Could not find "			    "command '%.*s'\n", cmd.len, ZSW(cmd.s));			unixsock_reply_printf("500 Command %.*s not found\n", cmd.len, ZSW(cmd.s));			unixsock_reply_send();			continue;		}		ret = c->f(&buffer);		if (ret < 0) {			LOG(L_ERR, "unix_server_loop: Command '%.*s' failed with "			    "return value %d\n", cmd.len, ZSW(cmd.s), ret);			     /* Note that we do not send reply here, the 			      * function is supposed to do so, it knows the 			      * reason of the failure better than us			      */		}	}}