diff options
author | David Cantrell <dcantrell@redhat.com> | 2006-02-03 02:57:22 +0000 |
---|---|---|
committer | David Cantrell <dcantrell@redhat.com> | 2006-02-03 02:57:22 +0000 |
commit | 0ef9cc965384f62969d4b7dcceee7eb53a554f16 (patch) | |
tree | d1219bfd220e1d7247dc4866dcdfe8a84554bec3 /isys | |
parent | 662cdcfe81cfc3d1091ae7e18e5f96d53a1c8e22 (diff) | |
download | anaconda-0ef9cc965384f62969d4b7dcceee7eb53a554f16.tar.gz anaconda-0ef9cc965384f62969d4b7dcceee7eb53a554f16.tar.xz anaconda-0ef9cc965384f62969d4b7dcceee7eb53a554f16.zip |
* scripts/upd-instroot: Add reiserfstune.
* isys/isys.py: Added readReiserFSLabel() and related functions
so we can skip over any existing reiserfs labels (#125939).
Diffstat (limited to 'isys')
-rw-r--r-- | isys/isys.py | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/isys/isys.py b/isys/isys.py index 463cd6ebe..d7b94d427 100644 --- a/isys/isys.py +++ b/isys/isys.py @@ -684,6 +684,53 @@ def readExt2Label(device, makeDevNode = 1): label = _isys.e2fslabel(device) return label +def readReiserFSLabel_int(device): + label = None + + try: + fd = os.open(device, os.O_RDONLY) + except OSError, e: + log.debug("error opening device %s: %s" % (device, e)) + return label + + # reiserfs superblock occupies either the 2nd or 16th block + # blocks are apparently always 4096 bytes + for start in (4096, (4096*16)): + try: + os.lseek(fd, start, 0) + # read 120 bytes to get s_magic and s_label + buf = os.read(fd, 120) + except OSError, e: + log.debug("error reading reiserfs label on %s: %s" %(device, e)) + + try: + os.close(fd) + except: + pass + + return label + + # see if this block is the superblock + # this reads reiserfs_super_block_v1.s_magic as defined + # in include/reiserfs_fs.h in the reiserfsprogs source + magic = string.rstrip(buf[52:61], "\0x00") + if magic == "ReIsErFs" or magic == "ReIsEr2Fs" or magic == "ReIsEr3Fs": + # this reads reiserfs_super_block.s_label as + # defined in include/reiserfs_fs.h + label = string.rstrip(buf[100:116], "\0x00") + + os.close(fd) + return label + +def readReiserFSLabel(device, makeDevNode = 1): + if makeDevNode: + makeDevInode(device, "/tmp/disk") + label = readReiserFSLabel_int("/tmp/disk") + os.unlink("/tmp/disk") + else: + label = readReiserFSLabel_int(device) + return label + def readFSLabel(device, makeDevNode = 1): label = readExt2Label(device, makeDevNode) if label is None: @@ -692,6 +739,8 @@ def readFSLabel(device, makeDevNode = 1): label = readXFSLabel(device, makeDevNode) if label is None: label = readJFSLabel(device, makeDevNode) + if label is None: + label = readReiserFSLabel(device, makeDevNode) return label def ext2Clobber(device, makeDevNode = 1): |