summaryrefslogtreecommitdiffstats
path: root/isys
diff options
context:
space:
mode:
Diffstat (limited to 'isys')
-rw-r--r--isys/isys.py49
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):