mirror of
https://git.freebsd.org/ports.git
synced 2025-07-18 01:39:16 -04:00
- bsd-user: fix sendmsg(2) emulation w/o ancillary data.
- Bump PORTREVISION.
Submitted by: sbruno
Obtained from: ad92220df3
This commit is contained in:
parent
01c0b8c01c
commit
90a40bb73b
Notes:
svn2git
2021-03-31 03:12:20 +00:00
svn path=/head/; revision=369997
2 changed files with 61 additions and 1 deletions
|
@ -3,7 +3,7 @@
|
||||||
|
|
||||||
PORTNAME= qemu
|
PORTNAME= qemu
|
||||||
PORTVERSION= 2.0.2
|
PORTVERSION= 2.0.2
|
||||||
PORTREVISION= 3
|
PORTREVISION= 4
|
||||||
CATEGORIES= emulators
|
CATEGORIES= emulators
|
||||||
MASTER_SITES= http://wiki.qemu.org/download/:release \
|
MASTER_SITES= http://wiki.qemu.org/download/:release \
|
||||||
LOCAL/nox:snapshot
|
LOCAL/nox:snapshot
|
||||||
|
@ -79,6 +79,7 @@ EXTRA_PATCHES+= ${FILESDIR}/extra-patch-21927cffcc7bcacbb953155f778200846df9f60e
|
||||||
EXTRA_PATCHES+= ${FILESDIR}/extra-patch-bsd-user-freebsd-os-sys.c
|
EXTRA_PATCHES+= ${FILESDIR}/extra-patch-bsd-user-freebsd-os-sys.c
|
||||||
EXTRA_PATCHES+= ${FILESDIR}/extra-patch-sysctl-hw-physmem
|
EXTRA_PATCHES+= ${FILESDIR}/extra-patch-sysctl-hw-physmem
|
||||||
EXTRA_PATCHES+= ${FILESDIR}/extra-patch-max-arg-pages
|
EXTRA_PATCHES+= ${FILESDIR}/extra-patch-max-arg-pages
|
||||||
|
EXTRA_PATCHES+= ${FILESDIR}/extra-patch-ad92220df37d1ab3120316fcc436071c78817561
|
||||||
.endif
|
.endif
|
||||||
|
|
||||||
CONFIGURE_ARGS+= --extra-ldflags=-L${LOCALBASE}/lib
|
CONFIGURE_ARGS+= --extra-ldflags=-L${LOCALBASE}/lib
|
||||||
|
|
|
@ -0,0 +1,59 @@
|
||||||
|
From ad92220df37d1ab3120316fcc436071c78817561 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Sean Bruno <sbruno@chips.ysv.freebsd.org>
|
||||||
|
Date: Sat, 4 Oct 2014 20:36:32 +0000
|
||||||
|
Subject: [PATCH] Ancillary data in the msghdr struct is optional, not
|
||||||
|
mandatory.
|
||||||
|
|
||||||
|
If it doesn't exist, that's ok sendmsg() anyway. Fixes pkg repo
|
||||||
|
issues now that pkg uses sendmsg.
|
||||||
|
---
|
||||||
|
bsd-user/freebsd/os-socket.h | 22 +++++++++++++++++-----
|
||||||
|
1 file changed, 17 insertions(+), 5 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/bsd-user/freebsd/os-socket.h b/bsd-user/freebsd/os-socket.h
|
||||||
|
index 9339ffb..a5f5ca7 100644
|
||||||
|
--- a/bsd-user/freebsd/os-socket.h
|
||||||
|
+++ b/bsd-user/freebsd/os-socket.h
|
||||||
|
@@ -54,9 +54,15 @@ static inline abi_long do_freebsd_sendmsg(int fd, abi_ulong target_msg,
|
||||||
|
msg.msg_name = NULL;
|
||||||
|
msg.msg_namelen = 0;
|
||||||
|
}
|
||||||
|
- msg.msg_controllen = 2 * tswapal(msgp->msg_controllen);
|
||||||
|
- msg.msg_control = alloca(msg.msg_controllen);
|
||||||
|
- msg.msg_flags = tswap32(msgp->msg_flags);
|
||||||
|
+ if (tswapal(msgp->msg_controllen) > 0) {
|
||||||
|
+ msg.msg_controllen = 2 * tswapal(msgp->msg_controllen);
|
||||||
|
+ msg.msg_control = alloca(msg.msg_controllen);
|
||||||
|
+ msg.msg_flags = tswap32(msgp->msg_flags);
|
||||||
|
+ } else {
|
||||||
|
+ msg.msg_controllen = 0;
|
||||||
|
+ msg.msg_control = NULL;
|
||||||
|
+ msg.msg_flags = 0;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
count = tswapal(msgp->msg_iovlen);
|
||||||
|
vec = alloca(count * sizeof(struct iovec));
|
||||||
|
@@ -65,7 +71,10 @@ static inline abi_long do_freebsd_sendmsg(int fd, abi_ulong target_msg,
|
||||||
|
msg.msg_iovlen = count;
|
||||||
|
msg.msg_iov = vec;
|
||||||
|
|
||||||
|
- ret = t2h_freebsd_cmsg(&msg, msgp);
|
||||||
|
+ if (msg.msg_controllen > 0)
|
||||||
|
+ ret = t2h_freebsd_cmsg(&msg, msgp);
|
||||||
|
+ else /* no ancillary data */
|
||||||
|
+ ret = 0;
|
||||||
|
if (!is_error(ret)) {
|
||||||
|
ret = get_errno(sendmsg(fd, &msg, flags));
|
||||||
|
}
|
||||||
|
@@ -116,7 +125,10 @@ static inline abi_long do_freebsd_recvmsg(int fd, abi_ulong target_msg,
|
||||||
|
ret = get_errno(recvmsg(fd, &msg, flags));
|
||||||
|
if (!is_error(ret)) {
|
||||||
|
len = ret;
|
||||||
|
- ret = h2t_freebsd_cmsg(msgp, &msg);
|
||||||
|
+ if (msg.msg_controllen > 0)
|
||||||
|
+ ret = h2t_freebsd_cmsg(msgp, &msg);
|
||||||
|
+ else /* no ancillary data */
|
||||||
|
+ ret = 0;
|
||||||
|
if (!is_error(ret)) {
|
||||||
|
msgp->msg_namelen = tswap32(msg.msg_namelen);
|
||||||
|
if (msg.msg_name != NULL) {
|
Loading…
Add table
Reference in a new issue