diff options
author | Terence Daniel Honles <terence@honles.com> | 2012-07-27 00:49:23 -0700 |
---|---|---|
committer | Terence Daniel Honles <terence@honles.com> | 2012-07-27 01:14:30 -0700 |
commit | 98e11c578ea88c54af858e86c305614e340c4246 (patch) | |
tree | d6012c918b9a28383433971fc5f3f82eefe64e6f | |
parent | 2fbfe661a605b0878443558d4a080a10cf53ba20 (diff) | |
parent | 3c639594cb3489d8eedae6ac9c2ecdcbe1da9da6 (diff) | |
download | fusepy-98e11c578ea88c54af858e86c305614e340c4246.tar.gz |
Merge branch 'bug/1'v2.0.1
-rw-r--r-- | fuse.py | 39 | ||||
-rwxr-xr-x | setup.py | 2 |
2 files changed, 27 insertions, 14 deletions
@@ -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), @@ -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, |