def open(self, img_file, read_only=False, options=None, fobj=None): """open an existing image file""" # file base check if fobj is None: # make sure image file exists if not os.path.exists(img_file): raise IOError("image file not found") # is readable? if not os.access(img_file, os.R_OK): raise IOError("can't read from image file") # is writeable? -> no: enforce read_only if not os.access(img_file, os.W_OK): read_only = True # check size st = os.stat(img_file) mode = st.st_mode if stat.S_ISBLK(mode) or stat.S_ISCHR(mode): size = BlkDevTools.getblkdevsize(img_file) else: size = os.path.getsize(img_file) if size == 0: raise IOError("image file is empty") # fobj else: fobj.seek(0, 2) size = fobj.tell() fobj.seek(0, 0) # detect type t = self.detect_type(img_file, fobj, options) if t == None: raise IOError("can't detect type of image file") # create blkdev if t == self.TYPE_ADF: blkdev = ADFBlockDevice(img_file, read_only, fobj=fobj) blkdev.open() elif t == self.TYPE_HDF: # detect geometry geo = DiskGeometry() if not geo.detect(size, options): raise IOError("can't detect geometry of HDF image file") blkdev = HDFBlockDevice(img_file, read_only, fobj=fobj) blkdev.open(geo) else: rawdev = RawBlockDevice(img_file, read_only, fobj=fobj) rawdev.open() # create rdisk instance rdisk = RDisk(rawdev) if not rdisk.open(): raise IOError("can't open rdisk of image file") # determine partition p = "0" if options != None and options.has_key('part'): p = str(options['part']) part = rdisk.find_partition_by_string(p) if part == None: raise IOError("can't find partition in image file") blkdev = part.create_blkdev(True) # auto_close rdisk blkdev.open() return blkdev
def open(self, img_file, read_only=False, options=None, fobj=None): """open an existing image file""" # file base check if fobj is None: # make sure image file exists if not os.path.exists(img_file): raise IOError("image file not found") # is readable? if not os.access(img_file, os.R_OK): raise IOError("can't read from image file") # is writeable? -> no: enforce read_only if not os.access(img_file, os.W_OK): read_only = True # check size st = os.stat(img_file) mode = st.st_mode if stat.S_ISBLK(mode) or stat.S_ISCHR(mode): size = BlkDevTools.getblkdevsize(img_file) else: size = os.path.getsize(img_file) if size == 0: raise IOError("image file is empty") # fobj else: fobj.seek(0,2) size = fobj.tell() fobj.seek(0,0) # detect type t = self.detect_type(img_file, fobj, options) if t == None: raise IOError("can't detect type of image file") # create blkdev if t == self.TYPE_ADF: blkdev = ADFBlockDevice(img_file, read_only, fobj=fobj) blkdev.open() elif t == self.TYPE_HDF: # detect geometry geo = DiskGeometry() if not geo.detect(size, options): raise IOError("can't detect geometry of HDF image file") blkdev = HDFBlockDevice(img_file, read_only, fobj=fobj) blkdev.open(geo) else: rawdev = RawBlockDevice(img_file, read_only, fobj=fobj) rawdev.open() # create rdisk instance rdisk = RDisk(rawdev) if not rdisk.open(): raise IOError("can't open rdisk of image file") # determine partition p = "0" if options != None and options.has_key('part'): p = str(options['part']) part = rdisk.find_partition_by_string(p) if part == None: raise IOError("can't find partition in image file") blkdev = part.create_blkdev(True) # auto_close rdisk blkdev.open() return blkdev
def create(self, img_file, force=True, options=None, fobj=None): if fobj is None: # make sure we are allowed to overwrite existing file if os.path.exists(img_file): if not force: raise IOError("can't overwrite existing image file") # not writeable? if not os.access(img_file, os.W_OK): raise IOError("can't write image file") # detect type t = self.detect_type(img_file, fobj, options) if t == None: raise IOError("can't detect type of image file") if t == self.TYPE_RDISK: raise IOError("can't create rdisk. use rdbtool first") # create blkdev if t == self.TYPE_ADF: blkdev = ADFBlockDevice(img_file, fobj=fobj) blkdev.create() else: # determine geometry from size or chs geo = DiskGeometry() if not geo.setup(options): raise IOError("can't determine geometry of HDF image file") blkdev = HDFBlockDevice(img_file, fobj=fobj) blkdev.create(geo) return blkdev
def create(self, img_file, force=True, options=None): # make sure we are allowed to overwrite existing file if os.path.exists(img_file): if not force: raise IOError("can't overwrite existing image file") # not writeable? if not os.access(img_file, os.W_OK): raise IOError("can't write image file") # detect type t = self.detect_type(img_file, options) if t == None: raise IOError("can't detect type of image file") if t == self.TYPE_RDISK: raise IOError("can't create rdisk. use rdbtool first") # create blkdev if t == self.TYPE_ADF: blkdev = ADFBlockDevice(img_file) blkdev.create() else: # determine geometry from size or chs geo = DiskGeometry() if not geo.setup(options): raise IOError("can't determine geometry of HDF image file") blkdev = HDFBlockDevice(img_file) blkdev.create(geo) return blkdev