|
@@ -10,7 +10,7 @@ from ctypes import CDLL, create_string_buffer, c_ssize_t, c_size_t, c_char_p, c_
|
|
|
from ctypes.util import find_library
|
|
|
from distutils.version import LooseVersion
|
|
|
|
|
|
-from .helpers import Buffer
|
|
|
+from .helpers import Buffer, Error
|
|
|
|
|
|
|
|
|
try:
|
|
@@ -113,8 +113,11 @@ def split_lstring(buf):
|
|
|
return result
|
|
|
|
|
|
|
|
|
-class BufferTooSmallError(Exception):
|
|
|
- """the buffer given to an xattr function was too small for the result"""
|
|
|
+class BufferTooSmallError(OSError):
|
|
|
+ """insufficient buffer memory for completing a xattr operation."""
|
|
|
+
|
|
|
+ def __str__(self):
|
|
|
+ return self.__doc__
|
|
|
|
|
|
|
|
|
def _check(rv, path=None, detect_buffer_too_small=False):
|
|
@@ -205,7 +208,7 @@ if sys.platform.startswith('linux'): # pragma: linux only
|
|
|
|
|
|
n, buf = _listxattr_inner(func, path)
|
|
|
return [os.fsdecode(name) for name in split_string0(buf[:n])
|
|
|
- if not name.startswith(b'system.posix_acl_')]
|
|
|
+ if name and not name.startswith(b'system.posix_acl_')]
|
|
|
|
|
|
def getxattr(path, name, *, follow_symlinks=True):
|
|
|
def func(path, name, buf, size):
|
|
@@ -261,7 +264,7 @@ elif sys.platform == 'darwin': # pragma: darwin only
|
|
|
return libc.listxattr(path, buf, size, XATTR_NOFOLLOW)
|
|
|
|
|
|
n, buf = _listxattr_inner(func, path)
|
|
|
- return [os.fsdecode(name) for name in split_string0(buf[:n])]
|
|
|
+ return [os.fsdecode(name) for name in split_string0(buf[:n]) if name]
|
|
|
|
|
|
def getxattr(path, name, *, follow_symlinks=True):
|
|
|
def func(path, name, buf, size):
|
|
@@ -320,7 +323,7 @@ elif sys.platform.startswith('freebsd'): # pragma: freebsd only
|
|
|
return libc.extattr_list_link(path, ns, buf, size)
|
|
|
|
|
|
n, buf = _listxattr_inner(func, path)
|
|
|
- return [os.fsdecode(name) for name in split_lstring(buf[:n])]
|
|
|
+ return [os.fsdecode(name) for name in split_lstring(buf[:n]) if name]
|
|
|
|
|
|
def getxattr(path, name, *, follow_symlinks=True):
|
|
|
def func(path, name, buf, size):
|