summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTerence Daniel Honles <terence@honles.com>2012-07-27 00:49:23 -0700
committerTerence Daniel Honles <terence@honles.com>2012-07-27 01:14:30 -0700
commit98e11c578ea88c54af858e86c305614e340c4246 (patch)
treed6012c918b9a28383433971fc5f3f82eefe64e6f
parent2fbfe661a605b0878443558d4a080a10cf53ba20 (diff)
parent3c639594cb3489d8eedae6ac9c2ecdcbe1da9da6 (diff)
downloadfusepy-98e11c578ea88c54af858e86c305614e340c4246.tar.gz
Merge branch 'bug/1'v2.0.1
-rw-r--r--fuse.py39
-rwxr-xr-xsetup.py2
2 files changed, 27 insertions, 14 deletions
diff --git a/fuse.py b/fuse.py
index 3b91740..84868bb 100644
--- a/fuse.py
+++ b/fuse.py
@@ -411,6 +411,9 @@ class FUSE(object):
def readlink(self, path, buf, bufsize):
ret = self.operations('readlink', path).encode(self.encoding)
+
+ # copies a string into the given buffer
+ # (null terminated and truncated if necessary)
data = create_string_buffer(ret[:bufsize - 1])
memmove(buf, data, len(data))
return 0
@@ -475,9 +478,13 @@ class FUSE(object):
if not ret: return 0
- data = create_string_buffer(ret[:size], size)
- memmove(buf, data, size)
- return size
+ retsize = len(ret)
+ assert retsize <= size, \
+ 'actual amount read %d greater than expected %d' % (retsize, size)
+
+ data = create_string_buffer(ret, retsize)
+ memmove(buf, ret, retsize)
+ return retsize
def write(self, path, buf, size, offset, fip):
data = string_at(buf, size)
@@ -536,26 +543,32 @@ class FUSE(object):
.encode(self.encoding)
retsize = len(ret)
- buf = create_string_buffer(ret, retsize) # Does not add trailing 0
+ # allow size queries
+ if not value: return retsize
- if value:
- if retsize > size: return -ERANGE
+ # do not truncate
+ if retsize > size: return -ERANGE
- memmove(value, buf, retsize)
+ buf = create_string_buffer(ret, retsize) # Does not add trailing 0
+ memmove(value, buf, retsize)
return retsize
def listxattr(self, path, namebuf, size):
attrs = self.operations('listxattr', path.decode(self.encoding)) or ''
+ ret = '\x00'.join(attrs).encode(self.encoding) + '\x00'
+
+ retsize = len(ret)
+ # allow size queries
+ if not namebuf: return retsize
- buf = create_string_buffer('\x00'.join(attrs).encode(self.encoding))
- bufsize = len(buf)
- if namebuf:
- if bufsize > size: return -ERANGE
+ # do not truncate
+ if retsize > size: return -ERANGE
- memmove(namebuf, buf, bufsize)
+ buf = create_string_buffer(ret, retsize)
+ memmove(namebuf, buf, retsize)
- return bufsize
+ return retsize
def removexattr(self, path, name):
return self.operations('removexattr', path.decode(self.encoding),
diff --git a/setup.py b/setup.py
index e849f49..242580d 100755
--- a/setup.py
+++ b/setup.py
@@ -13,7 +13,7 @@ with open('README') as readme:
setup(
name = 'fusepy',
- version = '2.0',
+ version = '2.0.1',
description = 'Simple ctypes bindings for FUSE',
long_description = documentation,