|
@@ -7,6 +7,9 @@ import tempfile
|
|
|
from ctypes import CDLL, create_string_buffer, c_ssize_t, c_size_t, c_char_p, c_int, c_uint32, get_errno
|
|
|
from ctypes.util import find_library
|
|
|
|
|
|
+from .logger import create_logger
|
|
|
+logger = create_logger()
|
|
|
+
|
|
|
|
|
|
def is_enabled(path=None):
|
|
|
"""Determine if xattr is enabled on the filesystem
|
|
@@ -27,8 +30,28 @@ def get_all(path, follow_symlinks=True):
|
|
|
if e.errno in (errno.ENOTSUP, errno.EPERM):
|
|
|
return {}
|
|
|
|
|
|
+libc_name = find_library('c')
|
|
|
+if libc_name is None:
|
|
|
+ # find_library didn't work, maybe we are on some minimal system that misses essential
|
|
|
+ # tools used by find_library, like ldconfig, gcc/cc, objdump.
|
|
|
+ # so we can only try some "usual" names for the C library:
|
|
|
+ if sys.platform.startswith('linux'):
|
|
|
+ libc_name = 'libc.so.6'
|
|
|
+ elif sys.platform.startswith(('freebsd', 'netbsd')):
|
|
|
+ libc_name = 'libc.so'
|
|
|
+ elif sys.platform == 'darwin':
|
|
|
+ libc_name = 'libc.dylib'
|
|
|
+ else:
|
|
|
+ msg = "Can't find C library. No fallback known. Try installing ldconfig, gcc/cc or objdump."
|
|
|
+ logger.error(msg)
|
|
|
+ raise Exception(msg)
|
|
|
|
|
|
-libc = CDLL(find_library('c'), use_errno=True)
|
|
|
+try:
|
|
|
+ libc = CDLL(libc_name, use_errno=True)
|
|
|
+except OSError as e:
|
|
|
+ msg = "Can't find C library [%s]. Try installing ldconfig, gcc/cc or objdump." % e
|
|
|
+ logger.error(msg)
|
|
|
+ raise Exception(msg)
|
|
|
|
|
|
|
|
|
def _check(rv, path=None):
|