1 |
dpavlin |
4 |
#@+leo-ver=4 |
2 |
|
|
#@+node:@file fuse.py |
3 |
|
|
# |
4 |
|
|
# Copyright (C) 2001 Jeff Epler <jepler@unpythonic.dhs.org> |
5 |
|
|
# |
6 |
|
|
# This program can be distributed under the terms of the GNU GPL. |
7 |
|
|
# See the file COPYING. |
8 |
|
|
# |
9 |
|
|
|
10 |
|
|
|
11 |
|
|
#@@language python |
12 |
|
|
#@+others |
13 |
|
|
#@+node:imports |
14 |
|
|
# suppress version mismatch warnings |
15 |
|
|
try: |
16 |
|
|
import warnings |
17 |
|
|
warnings.filterwarnings('ignore', |
18 |
|
|
'Python C API version mismatch', |
19 |
|
|
RuntimeWarning, |
20 |
|
|
) |
21 |
|
|
except: |
22 |
|
|
pass |
23 |
|
|
|
24 |
|
|
from _fuse import main, DEBUG |
25 |
|
|
import os, sys |
26 |
|
|
from errno import * |
27 |
|
|
|
28 |
|
|
#@-node:imports |
29 |
|
|
#@+node:class ErrnoWrapper |
30 |
|
|
class ErrnoWrapper: |
31 |
|
|
#@ @+others |
32 |
|
|
#@+node:__init__ |
33 |
|
|
def __init__(self, func): |
34 |
|
|
self.func = func |
35 |
|
|
#@-node:__init__ |
36 |
|
|
#@+node:__call__ |
37 |
|
|
def __call__(self, *args, **kw): |
38 |
|
|
try: |
39 |
|
|
return apply(self.func, args, kw) |
40 |
|
|
except (IOError, OSError), detail: |
41 |
|
|
# Sometimes this is an int, sometimes an instance... |
42 |
|
|
if hasattr(detail, "errno"): detail = detail.errno |
43 |
|
|
return -detail |
44 |
|
|
#@-node:__call__ |
45 |
|
|
#@-others |
46 |
|
|
#@-node:class ErrnoWrapper |
47 |
|
|
#@+node:class Fuse |
48 |
|
|
class Fuse: |
49 |
|
|
|
50 |
|
|
#@ @+others |
51 |
|
|
#@+node:attribs |
52 |
|
|
_attrs = ['getattr', 'readlink', 'getdir', 'mknod', 'mkdir', |
53 |
|
|
'unlink', 'rmdir', 'symlink', 'rename', 'link', 'chmod', |
54 |
|
|
'chown', 'truncate', 'utime', 'open', 'read', 'write', 'release', |
55 |
|
|
'statfs', 'fsync'] |
56 |
|
|
|
57 |
|
|
flags = 0 |
58 |
|
|
multithreaded = 0 |
59 |
|
|
|
60 |
|
|
#@-node:attribs |
61 |
|
|
#@+node:__init__ |
62 |
|
|
def __init__(self, *args, **kw): |
63 |
|
|
|
64 |
|
|
# default attributes |
65 |
|
|
self.optlist = [] |
66 |
|
|
self.optdict = {} |
67 |
|
|
self.mountpoint = None |
68 |
|
|
|
69 |
|
|
# grab arguments, if any |
70 |
|
|
argv = sys.argv |
71 |
|
|
argc = len(argv) |
72 |
|
|
if argc > 1: |
73 |
|
|
# we've been given the mountpoint |
74 |
|
|
self.mountpoint = argv[1] |
75 |
|
|
if argc > 2: |
76 |
|
|
# we've received mount args |
77 |
|
|
optstr = argv[2] |
78 |
|
|
opts = optstr.split(",") |
79 |
|
|
for o in opts: |
80 |
|
|
try: |
81 |
|
|
k, v = o.split("=", 1) |
82 |
|
|
self.optdict[k] = v |
83 |
|
|
except: |
84 |
|
|
self.optlist.append(o) |
85 |
|
|
#@-node:__init__ |
86 |
|
|
#@+node:main |
87 |
|
|
def main(self): |
88 |
|
|
d = {'flags': self.flags} |
89 |
|
|
d['multithreaded'] = self.multithreaded |
90 |
|
|
for a in self._attrs: |
91 |
|
|
if hasattr(self,a): |
92 |
|
|
d[a] = ErrnoWrapper(getattr(self, a)) |
93 |
|
|
apply(main, (), d) |
94 |
|
|
#@-node:main |
95 |
|
|
#@-others |
96 |
|
|
#@-node:class Fuse |
97 |
|
|
#@-others |
98 |
|
|
#@-node:@file fuse.py |
99 |
|
|
#@-leo |