# # Copyright (C) 2001 Jeff Epler # # This program can be distributed under the terms of the GNU GPL. # See the file COPYING. # from _fuse import main, DEBUG import os from errno import * class ErrnoWrapper: def __init__(self, func): self.func = func def __call__(self, *args, **kw): try: return apply(self.func, args, kw) except (IOError, OSError), detail: # Sometimes this is an int, sometimes an instance... if hasattr(detail, "errno"): detail = detail.errno return -detail class Fuse: _attrs = ['getattr', 'readlink', 'getdir', 'mknod', 'mkdir', 'unlink', 'rmdir', 'symlink', 'rename', 'link', 'chmod', 'chown', 'truncate', 'utime', 'open', 'read', 'write'] flags = 0 multithreaded = 0 def main(self): d = {'flags': self.flags} d['multithreaded'] = self.multithreaded for a in self._attrs: if hasattr(self,a): d[a] = ErrnoWrapper(getattr(self, a)) apply(main, (), d)