r = openpty(&ptyfds[i][0], &ptyfds[i][1], NULL, termp, winp);
if (r) { LOGE(ERROR,"openpty failed"); _exit(-1); }
}
- rc = libxl__sendmsg_fds(gc, sockets[1], "",1,
+ rc = libxl__sendmsg_fds(gc, sockets[1], '\0',
2*count, &ptyfds[0][0], "ptys");
if (rc) { LOGE(ERROR,"sendmsg to parent failed"); _exit(-1); }
_exit(0);
_hidden int libxl__qmp_initializations(libxl__gc *gc, uint32_t domid,
const libxl_domain_config *guest_config);
-/* `datalen` should be 1 byte
+/* `data' should contain a byte to send.
* When dealing with a non-blocking fd, it returns
* ERROR_NOT_READY on EWOULDBLOCK
* logs on other failures. */
int libxl__sendmsg_fds(libxl__gc *gc, int carrier,
- const void *data, size_t datalen,
+ const char data,
int nfds, const int fds[], const char *what);
/* Insists on receiving exactly nfds and datalen. On failure, logs
ev->payload_fd >= 0 &&
ev->tx_buf_off == 0) {
- rc = libxl__sendmsg_fds(gc, fd, ev->tx_buf, 1,
+ rc = libxl__sendmsg_fds(gc, fd, ev->tx_buf[ev->tx_buf_off],
1, &ev->payload_fd, "QMP socket");
/* Check for EWOULDBLOCK, and return to try again later */
if (rc == ERROR_NOT_READY)
}
int libxl__sendmsg_fds(libxl__gc *gc, int carrier,
- const void *data, size_t datalen,
+ const char data,
int nfds, const int fds[], const char *what) {
struct msghdr msg = { 0 };
struct cmsghdr *cmsg;
size_t spaceneeded = nfds * sizeof(fds[0]);
char control[CMSG_SPACE(spaceneeded)];
+ const size_t datalen = 1;
struct iovec iov;
int r;
- assert(datalen == 1);
-
- iov.iov_base = (void*)data;
+ iov.iov_base = (void*)&data;
iov.iov_len = datalen;
/* compose the message */