예제 #1
0
파일: py360.py 프로젝트: mtolly/py360
class Py360(Fuse):
    def __init__(self, *args, **kw):
        filename = kw.pop('filename')
        Fuse.__init__(self, *args, **kw)
        self.partition = Partition(filename, threadsafe=False)

    def getattr(self, path):
        st = MyStat()
        fileobj = self.partition.get_file(path)
        if fileobj:
            if fileobj.isDirectory():
                st.st_mode = stat.S_IFDIR | 0555
                st.st_nlink = len(fileobj.files)
            else:
                st.st_mode = stat.S_IFREG | 0444
            if not fileobj.isDirectory() or not fileobj.root:
                st.st_size = fileobj.fr.fsize
                st.st_ino = fileobj.fr.cluster
                st.st_atime = xboxtime.fat2unixtime(fileobj.fr.atime,
                                                    fileobj.fr.adate)
                st.st_mtime = xboxtime.fat2unixtime(fileobj.fr.mtime,
                                                    fileobj.fr.mdate)
                st.st_ctime = xboxtime.fat2unixtime(fileobj.fr.ctime,
                                                    fileobj.fr.cdate)
            context = self.GetContext()
            st.st_uid = context['uid']
            st.st_gid = context['gid']

            return st
        else:
            return -errno.ENOENT

    def readdir(self, path, offset):  #Why does this have an offset?
        fileobj = self.partition.get_file(path)
        if fileobj and fileobj.isDirectory():
            dirlist = [fuse.Direntry('.'), fuse.Direntry('..')]
            for f in fileobj.files:
                dirlist.append(fuse.Direntry(f))
            return dirlist
        else:
            return -errno.ENOENT

    def read(self, path, size, offset):
        fileobj = self.partition.get_file(path)
        if fileobj:
            return self.partition.read_file(fileobj=fileobj,
                                            size=size,
                                            offset=offset)
        else:
            return -errno.ENOENT
예제 #2
0
class Py360(Fuse):
    def __init__(self, *args, **kw):
        filename = kw.pop('filename')
        Fuse.__init__(self, *args, **kw)
        self.partition = Partition(filename, threadsafe = False)


    def getattr(self, path):
        st = MyStat()
        fileobj = self.partition.get_file(path)
        if fileobj:
            if fileobj.isDirectory():
                st.st_mode = stat.S_IFDIR | 0555
                st.st_nlink = len(fileobj.files)
            else:
                st.st_mode = stat.S_IFREG | 0444
            if not fileobj.isDirectory() or not fileobj.root:
                st.st_size = fileobj.fr.fsize
                st.st_ino = fileobj.fr.cluster
                st.st_atime = xboxtime.fat2unixtime(fileobj.fr.atime, fileobj.fr.adate)
                st.st_mtime = xboxtime.fat2unixtime(fileobj.fr.mtime, fileobj.fr.mdate)
                st.st_ctime = xboxtime.fat2unixtime(fileobj.fr.ctime, fileobj.fr.cdate)
            context = self.GetContext()
            st.st_uid = context['uid']
            st.st_gid = context['gid']

            return st
        else:
            return -errno.ENOENT

    def readdir(self, path, offset): #Why does this have an offset?
        fileobj = self.partition.get_file(path)
        if fileobj and fileobj.isDirectory():
            dirlist = [fuse.Direntry('.'), fuse.Direntry('..')]
            for f in fileobj.files:
                dirlist.append(fuse.Direntry(f)) 
            return dirlist
        else:
            return -errno.ENOENT

    def read(self, path, size, offset):
        fileobj = self.partition.get_file(path)
        if fileobj:
            return self.partition.read_file(fileobj = fileobj, size = size, offset = offset)
        else:
            return -errno.ENOENT