mirror of
https://github.com/openharmony/third_party_libfuse.git
synced 2026-07-21 17:15:28 -04:00
188 lines
4.7 KiB
Python
Executable File
188 lines
4.7 KiB
Python
Executable File
#!/usr/bin/env python
|
|
#@+leo-ver=4
|
|
#@+node:@file xmp.py
|
|
#@@first
|
|
#
|
|
# Copyright (C) 2001 Jeff Epler <jepler@unpythonic.dhs.org>
|
|
#
|
|
# This program can be distributed under the terms of the GNU GPL.
|
|
# See the file COPYING.
|
|
#
|
|
|
|
#@+others
|
|
#@+node:imports
|
|
|
|
from fuse import Fuse
|
|
import os
|
|
from errno import *
|
|
from stat import *
|
|
|
|
import thread
|
|
#@-node:imports
|
|
#@+node:class Xmp
|
|
class Xmp(Fuse):
|
|
|
|
#@ @+others
|
|
#@+node:__init__
|
|
def __init__(self, *args, **kw):
|
|
|
|
Fuse.__init__(self, *args, **kw)
|
|
|
|
if 0:
|
|
print "xmp.py:Xmp:mountpoint: %s" % repr(self.mountpoint)
|
|
print "xmp.py:Xmp:unnamed mount options: %s" % self.optlist
|
|
print "xmp.py:Xmp:named mount options: %s" % self.optdict
|
|
|
|
# do stuff to set up your filesystem here, if you want
|
|
#thread.start_new_thread(self.mythread, ())
|
|
pass
|
|
#@-node:__init__
|
|
#@+node:mythread
|
|
def mythread(self):
|
|
|
|
"""
|
|
The beauty of the FUSE python implementation is that with the python interp
|
|
running in foreground, you can have threads
|
|
"""
|
|
print "mythread: started"
|
|
#while 1:
|
|
# time.sleep(120)
|
|
# print "mythread: ticking"
|
|
|
|
#@-node:mythread
|
|
#@+node:attribs
|
|
flags = 1
|
|
|
|
#@-node:attribs
|
|
#@+node:getattr
|
|
def getattr(self, path):
|
|
return os.lstat(path)
|
|
#@-node:getattr
|
|
#@+node:readlink
|
|
def readlink(self, path):
|
|
return os.readlink(path)
|
|
#@-node:readlink
|
|
#@+node:getdir
|
|
def getdir(self, path):
|
|
return map(lambda x: (x,0), os.listdir(path))
|
|
#@-node:getdir
|
|
#@+node:unlink
|
|
def unlink(self, path):
|
|
return os.unlink(path)
|
|
#@-node:unlink
|
|
#@+node:rmdir
|
|
def rmdir(self, path):
|
|
return os.rmdir(path)
|
|
#@-node:rmdir
|
|
#@+node:symlink
|
|
def symlink(self, path, path1):
|
|
return os.symlink(path, path1)
|
|
#@-node:symlink
|
|
#@+node:rename
|
|
def rename(self, path, path1):
|
|
return os.rename(path, path1)
|
|
#@-node:rename
|
|
#@+node:link
|
|
def link(self, path, path1):
|
|
return os.link(path, path1)
|
|
#@-node:link
|
|
#@+node:chmod
|
|
def chmod(self, path, mode):
|
|
return os.chmod(path, mode)
|
|
#@-node:chmod
|
|
#@+node:chown
|
|
def chown(self, path, user, group):
|
|
return os.chown(path, user, group)
|
|
#@-node:chown
|
|
#@+node:truncate
|
|
def truncate(self, path, size):
|
|
f = open(path, "w+")
|
|
return f.truncate(size)
|
|
#@-node:truncate
|
|
#@+node:mknod
|
|
def mknod(self, path, mode, dev):
|
|
""" Python has no os.mknod, so we can only do some things """
|
|
if S_ISREG(mode):
|
|
open(path, "w")
|
|
else:
|
|
return -EINVAL
|
|
#@-node:mknod
|
|
#@+node:mkdir
|
|
def mkdir(self, path, mode):
|
|
return os.mkdir(path, mode)
|
|
#@-node:mkdir
|
|
#@+node:utime
|
|
def utime(self, path, times):
|
|
return os.utime(path, times)
|
|
#@-node:utime
|
|
#@+node:open
|
|
def open(self, path, flags):
|
|
#print "xmp.py:Xmp:open: %s" % path
|
|
os.close(os.open(path, flags))
|
|
return 0
|
|
|
|
#@-node:open
|
|
#@+node:read
|
|
def read(self, path, len, offset):
|
|
#print "xmp.py:Xmp:read: %s" % path
|
|
f = open(path, "r")
|
|
f.seek(offset)
|
|
return f.read(len)
|
|
|
|
#@-node:read
|
|
#@+node:write
|
|
def write(self, path, buf, off):
|
|
#print "xmp.py:Xmp:write: %s" % path
|
|
f = open(path, "r+")
|
|
f.seek(off)
|
|
f.write(buf)
|
|
return len(buf)
|
|
|
|
#@-node:write
|
|
#@+node:release
|
|
def release(self, path, flags):
|
|
print "xmp.py:Xmp:release: %s %s" % (path, flags)
|
|
return 0
|
|
#@-node:release
|
|
#@+node:statfs
|
|
def statfs(self):
|
|
"""
|
|
Should return a tuple with the following 6 elements:
|
|
- blocksize - size of file blocks, in bytes
|
|
- totalblocks - total number of blocks in the filesystem
|
|
- freeblocks - number of free blocks
|
|
- totalfiles - total number of file inodes
|
|
- freefiles - nunber of free file inodes
|
|
|
|
Feel free to set any of the above values to 0, which tells
|
|
the kernel that the info is not available.
|
|
"""
|
|
print "xmp.py:Xmp:statfs: returning fictitious values"
|
|
blocks_size = 1024
|
|
blocks = 100000
|
|
blocks_free = 25000
|
|
files = 100000
|
|
files_free = 60000
|
|
namelen = 80
|
|
return (blocks_size, blocks, blocks_free, files, files_free, namelen)
|
|
#@-node:statfs
|
|
#@+node:fsync
|
|
def fsync(self, path, isfsyncfile):
|
|
print "xmp.py:Xmp:fsync: path=%s, isfsyncfile=%s" % (path, isfsyncfile)
|
|
return 0
|
|
|
|
#@-node:fsync
|
|
#@-others
|
|
#@-node:class Xmp
|
|
#@+node:mainline
|
|
|
|
if __name__ == '__main__':
|
|
|
|
server = Xmp()
|
|
server.multithreaded = 1;
|
|
server.main()
|
|
#@-node:mainline
|
|
#@-others
|
|
#@-node:@file xmp.py
|
|
#@-leo
|