# HG changeset patch # User Yuya Nishihara # Date 1454507247 -32400 # Node ID f7d0c28d34b35ae57f6115a11bab088bc73d1dd1 # Parent 3d23700cf4a9f6248872beaf8dabbabc5b59fea9 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. diff -r 3d23700cf4a9 -r f7d0c28d34b3 mercurial/pure/osutil.py --- 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):