diff options
author | verigak <verigak@1ebed218-b0a3-11dd-8075-91d349ce83ee> | 2009-08-17 00:36:37 +0000 |
---|---|---|
committer | verigak <verigak@1ebed218-b0a3-11dd-8075-91d349ce83ee> | 2009-08-17 00:36:37 +0000 |
commit | 768bfe0621a48f238bcb65093c37917e0e7fefef (patch) | |
tree | 42e8b3a1e3665fa874ad75f9dceee9b698debe17 /fuse.py | |
parent | 83ecb65f11e269beaf159dcaf2c6bfa12562b9ee (diff) | |
download | fusepy-768bfe0621a48f238bcb65093c37917e0e7fefef.tar.gz |
We have to use create_string_buffer when we memmove, because python unicode
strings will use 4 bytes per char.
git-svn-id: http://fusepy.googlecode.com/svn/trunk@26 1ebed218-b0a3-11dd-8075-91d349ce83ee
Diffstat (limited to 'fuse.py')
-rw-r--r-- | fuse.py | 31 |
1 files changed, 17 insertions, 14 deletions
@@ -264,8 +264,8 @@ class FUSE(object): def readlink(self, path, buf, bufsize): ret = self.operations('readlink', path) - strbuf = ret[:bufsize-1] + '\x00' - memmove(buf, strbuf, len(strbuf)) + data = create_string_buffer(ret[:bufsize - 1]) + memmove(buf, data, len(data)) return 0 def mknod(self, path, mode, dev): @@ -309,9 +309,11 @@ class FUSE(object): def read(self, path, buf, size, offset, fip): fh = fip.contents if self.raw_fi else fip.contents.fh ret = self.operations('read', path, size, offset, fh) - if ret: - memmove(buf, create_string_buffer(ret), size) - return len(ret) + if not ret: + return 0 + data = create_string_buffer(ret[:size], size) + memmove(buf, data, size) + return size def write(self, path, buf, size, offset, fip): data = string_at(buf, size) @@ -339,27 +341,28 @@ class FUSE(object): return self.operations('fsync', path, datasync, fh) def setxattr(self, path, name, value, size, options, *args): - s = string_at(value, size) - return self.operations('setxattr', path, name, s, options, *args) + data = string_at(value, size) + return self.operations('setxattr', path, name, data, options, *args) def getxattr(self, path, name, value, size, *args): - buf = self.operations('getxattr', path, name, *args) - bufsize = len(buf) + ret = self.operations('getxattr', path, name, *args) + retsize = len(ret) + buf = create_string_buffer(ret, retsize) # Does not add trailing 0 if bool(value): - if bufsize > size: + if retsize > size: return -ERANGE - memmove(value, buf, bufsize) - return bufsize + memmove(value, buf, retsize) + return retsize def listxattr(self, path, namebuf, size): ret = self.operations('listxattr', path) - buf = '\x00'.join(ret) + '\x00' if ret else '' + buf = create_string_buffer('\x00'.join(ret)) if ret else '' bufsize = len(buf) if bool(namebuf): if bufsize > size: return -ERANGE memmove(namebuf, buf, bufsize) - return len(buf) + return bufsize def removexattr(self, path, name): return self.operations('removexattr', path, name) |