mirror of
https://github.com/X11Libre/xserver.git
synced 2026-03-24 10:14:52 +00:00
os: xtrans: let Writev() methods accept just one buffer instead of iovec
Since they're only called with a one-element iovec, we can use a single buffer pointer straight away, thus making it quite the same as the old Write() methods. Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
This commit is contained in:
committed by
Enrico Weigelt
parent
a905a3921b
commit
c079ad54fb
@@ -707,7 +707,7 @@ int _XSERVTransRead (XtransConnInfo ciptr, char *buf, int size)
|
||||
|
||||
ssize_t _XSERVTransWrite (XtransConnInfo ciptr, const char *buf, size_t size)
|
||||
{
|
||||
return ciptr->transptr->Write (ciptr, buf, size);
|
||||
return ciptr->transptr->Writev (ciptr, buf, size);
|
||||
}
|
||||
|
||||
#if XTRANS_SEND_FDS
|
||||
|
||||
@@ -187,7 +187,7 @@ typedef struct _Xtransport {
|
||||
size_t /* size */
|
||||
);
|
||||
|
||||
ssize_t (*Writev)(XtransConnInfo ciptr, struct iovec *iov, size_t iovcnt);
|
||||
ssize_t (*Writev)(XtransConnInfo ciptr, const char *buf, size_t size);
|
||||
|
||||
#if XTRANS_SEND_FDS
|
||||
int (*SendFd)(
|
||||
|
||||
@@ -761,11 +761,11 @@ static ssize_t _XSERVTransLocalWrite(XtransConnInfo ciptr, const char *buf, size
|
||||
return write(ciptr->fd,buf,size);
|
||||
}
|
||||
|
||||
static ssize_t _XSERVTransLocalWritev(XtransConnInfo ciptr, struct iovec *iov, size_t iovcnt)
|
||||
static ssize_t _XSERVTransLocalWritev(XtransConnInfo ciptr, const char *buf, size_t size)
|
||||
{
|
||||
prmsg(2,"LocalWritev(%d,%p,%d)\n", ciptr->fd, (const void *) iov, iovcnt);
|
||||
|
||||
return _XSERVTransWriteV(ciptr,iov,iovcnt);
|
||||
return write(ciptr->fd,buf,size);
|
||||
}
|
||||
|
||||
static int _XSERVTransLocalDisconnect(XtransConnInfo ciptr)
|
||||
|
||||
@@ -1338,9 +1338,14 @@ static int _XSERVTransSocketRead (
|
||||
}
|
||||
|
||||
static ssize_t _XSERVTransSocketWritev (
|
||||
XtransConnInfo ciptr, struct iovec *iov, size_t iovcnt)
|
||||
XtransConnInfo ciptr, const char *buf, size_t size)
|
||||
{
|
||||
prmsg (2,"SocketWritev(%d,%p,%d)\n", ciptr->fd, (void *) iov, iovcnt);
|
||||
prmsg (2,"SocketWritev(%d,%p,%ld)\n", ciptr->fd, (void *) buf, (unsigned long)size);
|
||||
|
||||
struct iovec iov = {
|
||||
.iov_len = size,
|
||||
.iov_base = (char*)buf,
|
||||
};
|
||||
|
||||
#if XTRANS_SEND_FDS
|
||||
if (ciptr->send_fds)
|
||||
@@ -1351,8 +1356,8 @@ static ssize_t _XSERVTransSocketWritev (
|
||||
struct msghdr msg = {
|
||||
.msg_name = NULL,
|
||||
.msg_namelen = 0,
|
||||
.msg_iov = iov,
|
||||
.msg_iovlen = iovcnt,
|
||||
.msg_iov = &iov,
|
||||
.msg_iovlen = 1,
|
||||
.msg_control = cmsgbuf.buf,
|
||||
.msg_controllen = CMSG_LEN(nfd * sizeof(int))
|
||||
};
|
||||
@@ -1377,7 +1382,7 @@ static ssize_t _XSERVTransSocketWritev (
|
||||
return i;
|
||||
}
|
||||
#endif
|
||||
return _XSERVTransWriteV(ciptr, iov, iovcnt);
|
||||
return _XSERVTransWriteV(ciptr, &iov, 1);
|
||||
}
|
||||
|
||||
static ssize_t _XSERVTransSocketWrite (
|
||||
@@ -1395,11 +1400,7 @@ static ssize_t _XSERVTransSocketWrite (
|
||||
#if XTRANS_SEND_FDS
|
||||
if (ciptr->send_fds)
|
||||
{
|
||||
struct iovec iov;
|
||||
|
||||
iov.iov_base = (void *) buf;
|
||||
iov.iov_len = size;
|
||||
return _XSERVTransSocketWritev(ciptr, &iov, 1);
|
||||
return _XSERVTransSocketWritev(ciptr, buf, size);
|
||||
}
|
||||
#endif /* XTRANS_SEND_FDS */
|
||||
return write (ciptr->fd, buf, size);
|
||||
|
||||
Reference in New Issue
Block a user