From: Zac Medico Date: Thu, 25 Oct 2012 08:34:37 +0000 (-0700) Subject: Add portage.util._ctypes module, for bug #439584. X-Git-Tag: v2.2.0_alpha142~12 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=978f3c6d514f0fcf9329d536cc43cf1230e23112;p=portage.git Add portage.util._ctypes module, for bug #439584. --- diff --git a/pym/portage/util/_ctypes.py b/pym/portage/util/_ctypes.py new file mode 100644 index 000000000..4e5aa2a6b --- /dev/null +++ b/pym/portage/util/_ctypes.py @@ -0,0 +1,47 @@ +# Copyright 2012 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +try: + import ctypes + import ctypes.util +except ImportError: + ctypes = None +else: + try: + ctypes.cdll + except AttributeError: + ctypes = None + +_library_names = {} + +def find_library(name): + """ + Calls ctype.util.find_library() if the ctypes module is available, + and otherwise returns None. Results are cached for future invocations. + """ + filename = _library_names.get(name) + if filename is None: + if ctypes is not None: + filename = ctypes.util.find_library(name) + if filename is None: + filename = False + _library_names[name] = filename + + if filename is False: + return None + return filename + +_library_handles = {} + +def LoadLibrary(name): + """ + Calls ctypes.cdll.LoadLibrary(name) if the ctypes module is available, + and otherwise returns None. Results are cached for future invocations. + """ + handle = _library_handles.get(name) + + if handle is None and ctypes is not None: + handle = ctypes.cdll.LoadLibrary(name) + _library_handles[name] = handle + + return handle