def setxattr(self, path, xattr, valbytes, flags, position=0):
# flags from linux/xattr.h: XATTR_CREATE = 1, XATTR_REPLACE = 2
if flags or position:
raise TmfsOSError(errno.ENOSYS) # haven't actually seen it yet
# 'Extend' user.xxxx syntax and screen for it here
elems = xattr.split('.')
if elems[0] != 'user' or len(elems) < 2:
raise TmfsOSError(errno.EINVAL)
# Don't forget the setfattr command, and the shell it runs in, does
# things to a "numeric" argument. setfattr processes a leading
# 0x and does a byte-by-byte conversion, yielding a byte array.
# It needs pairs of digits and can be of arbitrary length. Any
# other argument ends up here as a pure string (well, byte array).
try:
value = valbytes.decode()
except ValueError as e:
# http://stackoverflow.com/questions/606191/convert-bytes-to-a-python-string
value = valbytes.decode('cp437')
rsp = self.librarian(
self.lcp('set_xattr', path=path,
xattr=xattr, value=value))
if rsp is not None: # unexpected
raise TmfsOSError(errno.ENOTTY)
评论列表
文章目录