Exemplo n.º 1
0
 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
Exemplo n.º 2
0
 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
Exemplo n.º 3
0
 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
Exemplo n.º 4
0
 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