Example #1
0
	def rename ( self, oldPath, newPath ):
		oldnode = self.FSData.findNode(oldPath)
		if oldnode == None:
			return -errno.ENOENT
		newnode = self.FSData.findNode(newPath)
		if newnode != None:
			return -errno.EEXIST

		newntok = newPath.split('/')
		newname = newntok[len(newntok)-1]
		newntok.remove(newname)
		dir = ""
		for i in newntok:
			if i != '':
				dir = dir + "/" + i
		if dir == "":
			dir = "/"

		newdirnode = self.FSData.findNode(dir)
		if newdirnode == None:
			return -errno.ENOENT
	
		newnode = KeyLayoutElement(newname)
		newnode.runtimeSetup()
		newnode.stat = oldnode.stat

		newdirnode.addChild(newnode)

		newfile = newnode.open(self, os.O_RDWR|os.O_CREAT)
		oldfile = oldnode.open(self, os.O_RDWR)

		newnode.iolock.acquire()
		oldnode.iolock.acquire()

		shutil.copyfileobj(oldfile,newfile)
	
		newnode.dirty = True

		newnode.iolock.release()
		oldnode.iolock.release()

		newnode.close(self)
		oldnode.close(self)

		oldnode.delete(self)

		return 0	
Example #2
0
    def rename(self, oldPath, newPath):
        oldnode = self.FSData.findNode(oldPath)
        if oldnode == None:
            return -errno.ENOENT
        newnode = self.FSData.findNode(newPath)
        if newnode != None:
            return -errno.EEXIST

        newntok = newPath.split('/')
        newname = newntok[len(newntok) - 1]
        newntok.remove(newname)
        dir = ""
        for i in newntok:
            if i != '':
                dir = dir + "/" + i
        if dir == "":
            dir = "/"

        newdirnode = self.FSData.findNode(dir)
        if newdirnode == None:
            return -errno.ENOENT

        newnode = KeyLayoutElement(newname)
        newnode.runtimeSetup()
        newnode.stat = oldnode.stat

        newdirnode.addChild(newnode)

        newfile = newnode.open(self, os.O_RDWR | os.O_CREAT)
        oldfile = oldnode.open(self, os.O_RDWR)

        newnode.iolock.acquire()
        oldnode.iolock.acquire()

        shutil.copyfileobj(oldfile, newfile)

        newnode.dirty = True

        newnode.iolock.release()
        oldnode.iolock.release()

        newnode.close(self)
        oldnode.close(self)

        oldnode.delete(self)

        return 0