mercurial/pure/osutil.py
branchstable
changeset 27971 f7d0c28d34b3
parent 27704 051b0dcec98b
child 29600 7a157639b8f2
--- 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):