X-Git-Url: http://xvm.mit.edu/gitweb/invirt/packages/python-routefs.git/blobdiff_plain/28c8a7e679b0251974b1c21e582f65abac9babac..44655c396b1b0ef361216385bbd1b2b866e9b922:/routefs/__init__.py diff --git a/routefs/__init__.py b/routefs/__init__.py index 1abbf9a..2c62ae5 100644 --- a/routefs/__init__.py +++ b/routefs/__init__.py @@ -97,12 +97,7 @@ class RouteFS(fuse.Fuse): If the path referred to is a directory, return the elements of that diectory """ - obj = self._get_file(path) - if type(obj) is not Directory: - return - else: - for member in ['.', '..'] + obj: - yield fuse.Direntry(str(member)) + return self._get_file(path).readdir(offset) def getattr(self, path): """ @@ -118,33 +113,33 @@ class RouteFS(fuse.Fuse): If the path specified is a file, return the requested portion of the file """ - obj = self._get_file(path) - if type(obj) is NoEntry: - return -errno.ENOENT - elif type(obj) in (Directory, Symlink): - return -errno.EINVAL - else: - return obj[offset:offset + length] + return self._get_file(path).read(length, offset) def readlink(self, path): """ If the path specified is a symlink, return the target """ - obj = self._get_file(path) - if obj is None: - return -errno.ENOENT - elif type(obj) is not Symlink: - return -errno.EINVAL - else: - return obj + return self._get_file(path).readlink() class TreeKey(object): def getattr(self): return -errno.EINVAL + def readdir(self, offset): + return -errno.EINVAL + def read(self, length, offset): + return -errno.EINVAL + def readlink(self): + return -errno.EINVAL class NoEntry(TreeKey): def getattr(self): return -errno.ENOENT + def readdir(self, offset): + return -errno.ENOENT + def read(self, length, offset): + return -errno.ENOENT + def readlink(self): + return -errno.ENOENT class TreeEntry(TreeKey): default_mode = 0444 @@ -173,6 +168,10 @@ class Directory(TreeEntry, list): st.st_nlink = 2 return st + def readdir(self, offset): + for member in ['.', '..'] + self: + yield fuse.Direntry(str(member)) + class Symlink(TreeEntry, str): """ A dummy class representing something that should be a symlink @@ -186,6 +185,9 @@ class Symlink(TreeEntry, str): st.st_size = len(self) return st + def readlink(self): + return self + class File(TreeEntry, str): """ A dummy class representing something that should be a file @@ -199,6 +201,9 @@ class File(TreeEntry, str): st.st_size = len(self) return st + def read(self, length, offset): + return self[offset:offset + length] + def main(cls): """ A convenience function for initializing a RouteFS filesystem