Mercurial > hg
changeset 27971:f7d0c28d34b3 stable
osutil: do not abort loading pure module just because libc has no recvmsg()
On Solaris, recvmsg() is provided by libsocket.so. We could try hard to look
for the library which provides 'recvmsg' symbol, but it would make little sense
now since recvfds() won't work anyway on Solaris. So this patch just disables
_recvmsg() on such platforms.
Thanks to FUJIWARA Katsunori for spotting this problem.
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Wed, 03 Feb 2016 22:47:27 +0900 |
parents | 3d23700cf4a9 |
children | 92a61d7618ac |
files | mercurial/pure/osutil.py |
diffstat | 1 files changed, 9 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/pure/osutil.py Tue Feb 02 20:56:48 2016 +0900 +++ b/mercurial/pure/osutil.py Wed Feb 03 22:47:27 2016 +0900 @@ -104,9 +104,15 @@ ] _libc = ctypes.CDLL(ctypes.util.find_library('c'), use_errno=True) - _recvmsg = _libc.recvmsg - _recvmsg.restype = getattr(ctypes, 'c_ssize_t', ctypes.c_long) - _recvmsg.argtypes = (ctypes.c_int, ctypes.POINTER(_msghdr), ctypes.c_int) + _recvmsg = getattr(_libc, 'recvmsg', None) + if _recvmsg: + _recvmsg.restype = getattr(ctypes, 'c_ssize_t', ctypes.c_long) + _recvmsg.argtypes = (ctypes.c_int, ctypes.POINTER(_msghdr), + ctypes.c_int) + else: + # recvmsg isn't always provided by libc; such systems are unsupported + def _recvmsg(sockfd, msg, flags): + raise NotImplementedError('unsupported platform') def _CMSG_FIRSTHDR(msgh): if msgh.msg_controllen < ctypes.sizeof(_cmsghdr):