From 978f3c6d514f0fcf9329d536cc43cf1230e23112 Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Thu, 25 Oct 2012 01:34:37 -0700 Subject: Add portage.util._ctypes module, for bug #439584. --- pym/portage/util/_ctypes.py | 47 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 pym/portage/util/_ctypes.py 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 -- cgit v1.2.3