diff --git a/lfs.c b/lfs.c index 727bb609..1d21322e 100644 --- a/lfs.c +++ b/lfs.c @@ -578,7 +578,7 @@ static int lfsr_bd_erase(lfs_t *lfs, lfs_block_t block) { // 16-bit metadata tags -enum lfsr_tag_type { +enum lfsr_tag { // the null tag is reserved LFSR_TAG_NULL = 0x0000, @@ -586,9 +586,8 @@ enum lfsr_tag_type { LFSR_TAG_CONFIG = 0x0000, LFSR_TAG_MAGIC = 0x0003, LFSR_TAG_VERSION = 0x0004, - LFSR_TAG_RFLAGS = 0x0005, - LFSR_TAG_WFLAGS = 0x0006, - LFSR_TAG_OFLAGS = 0x0007, + LFSR_TAG_RCOMPATFLAGS = 0x0006, + LFSR_TAG_WCOMPATFLAGS = 0x0007, LFSR_TAG_BLOCKSIZE = 0x0008, LFSR_TAG_BLOCKCOUNT = 0x0009, LFSR_TAG_NAMELIMIT = 0x000a, @@ -7656,6 +7655,28 @@ static int lfsr_traversal_read(lfs_t *lfs, lfsr_traversal_t *traversal, // return LFSR_DATA_BUF(buffer, d); //} +// compatibility flags +// +// - WCOMPAT => Must understand to write to the filesystem +// - RCOMPAT => Must understand to read the filesystem +// +// note, "understanding" does not necessarily mean support +// +enum lfsr_rcompat { + LFSR_RCOMPAT_GRM = 0x01, +}; + +typedef uint8_t lfsr_rcompat_t; +typedef uint8_t lfsr_wcompat_t; + +static inline bool lfsr_rcompat_hasgrm(lfsr_rcompat_t rcompat) { + return rcompat & LFSR_RCOMPAT_GRM; +} + +static inline bool lfsr_rcompat_hasunknown(lfsr_rcompat_t rcompat) { + return rcompat & ~LFSR_RCOMPAT_GRM; +} + /// Filesystem init functions /// @@ -7726,53 +7747,59 @@ static int lfsr_mountmroot(lfs_t *lfs, const lfsr_mdir_t *mroot) { return LFS_ERR_INVAL; } - // check for any rflags, we must understand these to read + // check for any rcompatflags, we must understand these to read // the filesystem - err = lfsr_mdir_lookup(lfs, mroot, -1, LFSR_TAG_RFLAGS, + err = lfsr_mdir_lookup(lfs, mroot, -1, LFSR_TAG_RCOMPATFLAGS, NULL, &data); if (err && err != LFS_ERR_NOENT) { return err; } + if (err == LFS_ERR_NOENT) { + data = LFSR_DATA_NULL(); + } - if (err != LFS_ERR_NOENT && lfsr_data_size(&data) > 0) { - LFS_ERROR("Incompatible rflag 0x%s%"PRIx32, - (lfsr_data_size(&data) > 0) ? "?" : "", - 0); + lfsr_rcompat_t rcompat; + lfs_ssize_t size = lfsr_data_read(lfs, &data, &rcompat, 1); + if (size < 0) { + return size; + } + if (size < 1) { + rcompat = 0; + } + + // unknown rcompat flags? flags must be tightly sized + if (lfsr_rcompat_hasunknown(rcompat) || lfsr_data_size(&data) > 0) { + LFS_ERROR("Incompatible rcompat flags 0x%s%"PRIx8, + (lfsr_data_size(&data) > 0) ? "??" : "", + rcompat); return LFS_ERR_INVAL; } - // check for any wflags, we must understand these to write + // grm supported? + if (!lfsr_rcompat_hasgrm(rcompat)) { + LFS_ERROR("Incompatible rcompat flags, no grm"); + // TODO switch to read-only? upgrade? + return LFS_ERR_INVAL; + } + + // check for any wcompatflags, we must understand these to write // the filesystem - err = lfsr_mdir_lookup(lfs, mroot, -1, LFSR_TAG_WFLAGS, + err = lfsr_mdir_lookup(lfs, mroot, -1, LFSR_TAG_WCOMPATFLAGS, NULL, &data); if (err && err != LFS_ERR_NOENT) { return err; } + if (err == LFS_ERR_NOENT) { + data = LFSR_DATA_NULL(); + } - if (err != LFS_ERR_NOENT && lfsr_data_size(&data) > 0) { - LFS_ERROR("Incompatible wflag 0x%s%"PRIx32, - (lfsr_data_size(&data) > 0) ? "?" : "", - 0); + // unknown wcompat flags? flags must be tightly sized + if (lfsr_data_size(&data) > 0) { + LFS_ERROR("Incompatible wcompat flags 0x??"); // TODO switch to read-only? return LFS_ERR_INVAL; } - // check for any oflags, these are optional, if we don't - // understand an oflag we can simply clear it - err = lfsr_mdir_lookup(lfs, mroot, -1, LFSR_TAG_OFLAGS, - NULL, &data); - if (err && err != LFS_ERR_NOENT) { - return err; - } - - if (err != LFS_ERR_NOENT && lfsr_data_size(&data) > 0) { - LFS_DEBUG("Found unknown oflag 0x%s%"PRIx32, - (lfsr_data_size(&data) > 0) ? "?" : "", - 0); - // TODO track and clear oflags in mkconsistent? - LFS_ASSERT(false); - } - // check block size err = lfsr_mdir_lookup(lfs, mroot, -1, LFSR_TAG_BLOCKSIZE, NULL, &data); @@ -8198,6 +8225,8 @@ static int lfsr_formatinited(lfs_t *lfs) { LFSR_ATTR(-1, VERSION, 0, IMM(((const uint8_t[2]){ LFS_DISK_VERSION_MAJOR, LFS_DISK_VERSION_MINOR}), 2)), + LFSR_ATTR(-1, RCOMPATFLAGS, 0, IMM((&(uint8_t){ + LFSR_RCOMPAT_GRM}), 1)), LFSR_ATTR(-1, BLOCKSIZE, 0, LEB128(lfs->cfg->block_size-1)), LFSR_ATTR(-1, BLOCKCOUNT, 0, LEB128(lfs->cfg->block_count-1)), LFSR_ATTR(-1, NAMELIMIT, 0, LEB128(lfs->name_limit)), diff --git a/scripts/dbgbmap.py b/scripts/dbgbmap.py index 7a7d43f2..52e653ef 100755 --- a/scripts/dbgbmap.py +++ b/scripts/dbgbmap.py @@ -10,47 +10,46 @@ import shutil import struct -TAG_NULL = 0x0000 -TAG_CONFIG = 0x0000 -TAG_MAGIC = 0x0003 -TAG_VERSION = 0x0004 -TAG_RFLAGS = 0x0005 -TAG_WFLAGS = 0x0006 -TAG_OFLAGS = 0x0007 -TAG_BLOCKSIZE = 0x0008 -TAG_BLOCKCOUNT = 0x0009 -TAG_NAMELIMIT = 0x000a -TAG_SIZELIMIT = 0x000b -TAG_UTAGLIMIT = 0x000c -TAG_UATTRLIMIT = 0x000d -TAG_STAGLIMIT = 0x000e -TAG_SATTRLIMIT = 0x000f -TAG_MDIRLIMIT = 0x0010 -TAG_MTREELIMIT = 0x0011 -TAG_GSTATE = 0x0100 -TAG_GRM = 0x0100 -TAG_NAME = 0x0200 -TAG_BOOKMARK = 0x0201 -TAG_REG = 0x0202 -TAG_DIR = 0x0203 -TAG_STRUCT = 0x0300 -TAG_DATA = 0x0300 -TAG_TRUNK = 0x0304 -TAG_BLOCK = 0x0308 -TAG_BTREE = 0x030c -TAG_BRANCH = 0x031c -TAG_MDIR = 0x0321 -TAG_MTREE = 0x0324 -TAG_MROOT = 0x0329 -TAG_DID = 0x032c -TAG_UATTR = 0x0400 -TAG_SATTR = 0x0600 -TAG_SHRUB = 0x1000 -TAG_CKSUM = 0x3000 -TAG_ECKSUM = 0x3100 -TAG_ALT = 0x4000 -TAG_GT = 0x2000 -TAG_R = 0x1000 +TAG_NULL = 0x0000 +TAG_CONFIG = 0x0000 +TAG_MAGIC = 0x0003 +TAG_VERSION = 0x0004 +TAG_RCOMPATFLAGS = 0x0006 +TAG_WCOMPATFLAGS = 0x0007 +TAG_BLOCKSIZE = 0x0008 +TAG_BLOCKCOUNT = 0x0009 +TAG_NAMELIMIT = 0x000a +TAG_SIZELIMIT = 0x000b +TAG_UTAGLIMIT = 0x000c +TAG_UATTRLIMIT = 0x000d +TAG_STAGLIMIT = 0x000e +TAG_SATTRLIMIT = 0x000f +TAG_MDIRLIMIT = 0x0010 +TAG_MTREELIMIT = 0x0011 +TAG_GSTATE = 0x0100 +TAG_GRM = 0x0100 +TAG_NAME = 0x0200 +TAG_BOOKMARK = 0x0201 +TAG_REG = 0x0202 +TAG_DIR = 0x0203 +TAG_STRUCT = 0x0300 +TAG_DATA = 0x0300 +TAG_TRUNK = 0x0304 +TAG_BLOCK = 0x0308 +TAG_BTREE = 0x030c +TAG_BRANCH = 0x031c +TAG_MDIR = 0x0321 +TAG_MTREE = 0x0324 +TAG_MROOT = 0x0329 +TAG_DID = 0x032c +TAG_UATTR = 0x0400 +TAG_SATTR = 0x0600 +TAG_SHRUB = 0x1000 +TAG_CKSUM = 0x3000 +TAG_ECKSUM = 0x3100 +TAG_ALT = 0x4000 +TAG_GT = 0x2000 +TAG_R = 0x1000 CHARS = 'mbd-' diff --git a/scripts/dbgbtree.py b/scripts/dbgbtree.py index 7c8d57e4..190d3dfe 100755 --- a/scripts/dbgbtree.py +++ b/scripts/dbgbtree.py @@ -8,47 +8,46 @@ import os import struct -TAG_NULL = 0x0000 -TAG_CONFIG = 0x0000 -TAG_MAGIC = 0x0003 -TAG_VERSION = 0x0004 -TAG_RFLAGS = 0x0005 -TAG_WFLAGS = 0x0006 -TAG_OFLAGS = 0x0007 -TAG_BLOCKSIZE = 0x0008 -TAG_BLOCKCOUNT = 0x0009 -TAG_NAMELIMIT = 0x000a -TAG_SIZELIMIT = 0x000b -TAG_UTAGLIMIT = 0x000c -TAG_UATTRLIMIT = 0x000d -TAG_STAGLIMIT = 0x000e -TAG_SATTRLIMIT = 0x000f -TAG_MDIRLIMIT = 0x0010 -TAG_MTREELIMIT = 0x0011 -TAG_GSTATE = 0x0100 -TAG_GRM = 0x0100 -TAG_NAME = 0x0200 -TAG_BOOKMARK = 0x0201 -TAG_REG = 0x0202 -TAG_DIR = 0x0203 -TAG_STRUCT = 0x0300 -TAG_DATA = 0x0300 -TAG_TRUNK = 0x0304 -TAG_BLOCK = 0x0308 -TAG_BTREE = 0x030c -TAG_BRANCH = 0x031c -TAG_MDIR = 0x0321 -TAG_MTREE = 0x0324 -TAG_MROOT = 0x0329 -TAG_DID = 0x032c -TAG_UATTR = 0x0400 -TAG_SATTR = 0x0600 -TAG_SHRUB = 0x1000 -TAG_CKSUM = 0x3000 -TAG_ECKSUM = 0x3100 -TAG_ALT = 0x4000 -TAG_GT = 0x2000 -TAG_R = 0x1000 +TAG_NULL = 0x0000 +TAG_CONFIG = 0x0000 +TAG_MAGIC = 0x0003 +TAG_VERSION = 0x0004 +TAG_RCOMPATFLAGS = 0x0006 +TAG_WCOMPATFLAGS = 0x0007 +TAG_BLOCKSIZE = 0x0008 +TAG_BLOCKCOUNT = 0x0009 +TAG_NAMELIMIT = 0x000a +TAG_SIZELIMIT = 0x000b +TAG_UTAGLIMIT = 0x000c +TAG_UATTRLIMIT = 0x000d +TAG_STAGLIMIT = 0x000e +TAG_SATTRLIMIT = 0x000f +TAG_MDIRLIMIT = 0x0010 +TAG_MTREELIMIT = 0x0011 +TAG_GSTATE = 0x0100 +TAG_GRM = 0x0100 +TAG_NAME = 0x0200 +TAG_BOOKMARK = 0x0201 +TAG_REG = 0x0202 +TAG_DIR = 0x0203 +TAG_STRUCT = 0x0300 +TAG_DATA = 0x0300 +TAG_TRUNK = 0x0304 +TAG_BLOCK = 0x0308 +TAG_BTREE = 0x030c +TAG_BRANCH = 0x031c +TAG_MDIR = 0x0321 +TAG_MTREE = 0x0324 +TAG_MROOT = 0x0329 +TAG_DID = 0x032c +TAG_UATTR = 0x0400 +TAG_SATTR = 0x0600 +TAG_SHRUB = 0x1000 +TAG_CKSUM = 0x3000 +TAG_ECKSUM = 0x3100 +TAG_ALT = 0x4000 +TAG_GT = 0x2000 +TAG_R = 0x1000 # some ways of block geometry representations @@ -169,9 +168,8 @@ def tagrepr(tag, w, size, off=None): 'shrub' if tag & TAG_SHRUB else '', 'magic' if (tag & 0xfff) == TAG_MAGIC else 'version' if (tag & 0xfff) == TAG_VERSION - else 'rflags' if (tag & 0xfff) == TAG_RFLAGS - else 'wflags' if (tag & 0xfff) == TAG_WFLAGS - else 'oflags' if (tag & 0xfff) == TAG_OFLAGS + else 'rcompatflags' if (tag & 0xfff) == TAG_RCOMPATFLAGS + else 'wcompatflags' if (tag & 0xfff) == TAG_WCOMPATFLAGS else 'blocksize' if (tag & 0xfff) == TAG_BLOCKSIZE else 'blockcount' if (tag & 0xfff) == TAG_BLOCKCOUNT else 'sizelimit' if (tag & 0xfff) == TAG_SIZELIMIT diff --git a/scripts/dbglfs.py b/scripts/dbglfs.py index fc15d4e2..f4a9c47d 100755 --- a/scripts/dbglfs.py +++ b/scripts/dbglfs.py @@ -9,47 +9,46 @@ import os import struct -TAG_NULL = 0x0000 -TAG_CONFIG = 0x0000 -TAG_MAGIC = 0x0003 -TAG_VERSION = 0x0004 -TAG_RFLAGS = 0x0005 -TAG_WFLAGS = 0x0006 -TAG_OFLAGS = 0x0007 -TAG_BLOCKSIZE = 0x0008 -TAG_BLOCKCOUNT = 0x0009 -TAG_NAMELIMIT = 0x000a -TAG_SIZELIMIT = 0x000b -TAG_UTAGLIMIT = 0x000c -TAG_UATTRLIMIT = 0x000d -TAG_STAGLIMIT = 0x000e -TAG_SATTRLIMIT = 0x000f -TAG_MDIRLIMIT = 0x0010 -TAG_MTREELIMIT = 0x0011 -TAG_GSTATE = 0x0100 -TAG_GRM = 0x0100 -TAG_NAME = 0x0200 -TAG_BOOKMARK = 0x0201 -TAG_REG = 0x0202 -TAG_DIR = 0x0203 -TAG_STRUCT = 0x0300 -TAG_DATA = 0x0300 -TAG_TRUNK = 0x0304 -TAG_BLOCK = 0x0308 -TAG_BTREE = 0x030c -TAG_BRANCH = 0x031c -TAG_MDIR = 0x0321 -TAG_MTREE = 0x0324 -TAG_MROOT = 0x0329 -TAG_DID = 0x032c -TAG_UATTR = 0x0400 -TAG_SATTR = 0x0600 -TAG_SHRUB = 0x1000 -TAG_CKSUM = 0x3000 -TAG_ECKSUM = 0x3100 -TAG_ALT = 0x4000 -TAG_GT = 0x2000 -TAG_R = 0x1000 +TAG_NULL = 0x0000 +TAG_CONFIG = 0x0000 +TAG_MAGIC = 0x0003 +TAG_VERSION = 0x0004 +TAG_RCOMPATFLAGS = 0x0006 +TAG_WCOMPATFLAGS = 0x0007 +TAG_BLOCKSIZE = 0x0008 +TAG_BLOCKCOUNT = 0x0009 +TAG_NAMELIMIT = 0x000a +TAG_SIZELIMIT = 0x000b +TAG_UTAGLIMIT = 0x000c +TAG_UATTRLIMIT = 0x000d +TAG_STAGLIMIT = 0x000e +TAG_SATTRLIMIT = 0x000f +TAG_MDIRLIMIT = 0x0010 +TAG_MTREELIMIT = 0x0011 +TAG_GSTATE = 0x0100 +TAG_GRM = 0x0100 +TAG_NAME = 0x0200 +TAG_BOOKMARK = 0x0201 +TAG_REG = 0x0202 +TAG_DIR = 0x0203 +TAG_STRUCT = 0x0300 +TAG_DATA = 0x0300 +TAG_TRUNK = 0x0304 +TAG_BLOCK = 0x0308 +TAG_BTREE = 0x030c +TAG_BRANCH = 0x031c +TAG_MDIR = 0x0321 +TAG_MTREE = 0x0324 +TAG_MROOT = 0x0329 +TAG_DID = 0x032c +TAG_UATTR = 0x0400 +TAG_SATTR = 0x0600 +TAG_SHRUB = 0x1000 +TAG_CKSUM = 0x3000 +TAG_ECKSUM = 0x3100 +TAG_ALT = 0x4000 +TAG_GT = 0x2000 +TAG_R = 0x1000 # some ways of block geometry representations @@ -198,9 +197,8 @@ def tagrepr(tag, w, size, off=None): 'shrub' if tag & TAG_SHRUB else '', 'magic' if (tag & 0xfff) == TAG_MAGIC else 'version' if (tag & 0xfff) == TAG_VERSION - else 'rflags' if (tag & 0xfff) == TAG_RFLAGS - else 'wflags' if (tag & 0xfff) == TAG_WFLAGS - else 'oflags' if (tag & 0xfff) == TAG_OFLAGS + else 'rcompatflags' if (tag & 0xfff) == TAG_RCOMPATFLAGS + else 'wcompatflags' if (tag & 0xfff) == TAG_WCOMPATFLAGS else 'blocksize' if (tag & 0xfff) == TAG_BLOCKSIZE else 'blockcount' if (tag & 0xfff) == TAG_BLOCKCOUNT else 'sizelimit' if (tag & 0xfff) == TAG_SIZELIMIT @@ -1036,25 +1034,17 @@ class Config: return (None, None) @ft.cached_property - def rflags(self): - if TAG_RFLAGS in self.config: - _, data = self.config[TAG_RFLAGS] + def rcompatflags(self): + if TAG_RCOMPATFLAGS in self.config: + _, data = self.config[TAG_RCOMPATFLAGS] return data else: return None @ft.cached_property - def wflags(self): - if TAG_WFLAGS in self.config: - _, data = self.config[TAG_WFLAGS] - return data - else: - return None - - @ft.cached_property - def oflags(self): - if TAG_OFLAGS in self.config: - _, data = self.config[TAG_OFLAGS] + def wcompatflags(self): + if TAG_WCOMPATFLAGS in self.config: + _, data = self.config[TAG_WCOMPATFLAGS] return data else: return None @@ -1157,15 +1147,12 @@ class Config: for b in map(chr, self.magic)) elif tag == TAG_VERSION: return 'version v%d.%d' % self.version - elif tag == TAG_RFLAGS: - return 'rflags 0x%s' % ''.join( - '%02x' % f for f in reversed(self.rflags)) - elif tag == TAG_WFLAGS: - return 'wflags 0x%s' % ''.join( - '%02x' % f for f in reversed(self.wflags)) - elif tag == TAG_OFLAGS: - return 'oflags 0x%s' % ''.join( - '%02x' % f for f in reversed(self.oflags)) + elif tag == TAG_RCOMPATFLAGS: + return 'rcompatflags 0x%s' % ''.join( + '%02x' % f for f in reversed(self.rcompatflags)) + elif tag == TAG_WCOMPATFLAGS: + return 'wcompatflags 0x%s' % ''.join( + '%02x' % f for f in reversed(self.wcompatflags)) elif tag == TAG_BLOCKSIZE: return 'blocksize %d' % self.block_size elif tag == TAG_BLOCKCOUNT: diff --git a/scripts/dbgmtree.py b/scripts/dbgmtree.py index c180d38b..79b08776 100755 --- a/scripts/dbgmtree.py +++ b/scripts/dbgmtree.py @@ -8,47 +8,46 @@ import os import struct -TAG_NULL = 0x0000 -TAG_CONFIG = 0x0000 -TAG_MAGIC = 0x0003 -TAG_VERSION = 0x0004 -TAG_RFLAGS = 0x0005 -TAG_WFLAGS = 0x0006 -TAG_OFLAGS = 0x0007 -TAG_BLOCKSIZE = 0x0008 -TAG_BLOCKCOUNT = 0x0009 -TAG_NAMELIMIT = 0x000a -TAG_SIZELIMIT = 0x000b -TAG_UTAGLIMIT = 0x000c -TAG_UATTRLIMIT = 0x000d -TAG_STAGLIMIT = 0x000e -TAG_SATTRLIMIT = 0x000f -TAG_MDIRLIMIT = 0x0010 -TAG_MTREELIMIT = 0x0011 -TAG_GSTATE = 0x0100 -TAG_GRM = 0x0100 -TAG_NAME = 0x0200 -TAG_BOOKMARK = 0x0201 -TAG_REG = 0x0202 -TAG_DIR = 0x0203 -TAG_STRUCT = 0x0300 -TAG_DATA = 0x0300 -TAG_TRUNK = 0x0304 -TAG_BLOCK = 0x0308 -TAG_BTREE = 0x030c -TAG_BRANCH = 0x031c -TAG_MDIR = 0x0321 -TAG_MTREE = 0x0324 -TAG_MROOT = 0x0329 -TAG_DID = 0x032c -TAG_UATTR = 0x0400 -TAG_SATTR = 0x0600 -TAG_SHRUB = 0x1000 -TAG_CKSUM = 0x3000 -TAG_ECKSUM = 0x3100 -TAG_ALT = 0x4000 -TAG_GT = 0x2000 -TAG_R = 0x1000 +TAG_NULL = 0x0000 +TAG_CONFIG = 0x0000 +TAG_MAGIC = 0x0003 +TAG_VERSION = 0x0004 +TAG_RCOMPATFLAGS = 0x0006 +TAG_WCOMPATFLAGS = 0x0007 +TAG_BLOCKSIZE = 0x0008 +TAG_BLOCKCOUNT = 0x0009 +TAG_NAMELIMIT = 0x000a +TAG_SIZELIMIT = 0x000b +TAG_UTAGLIMIT = 0x000c +TAG_UATTRLIMIT = 0x000d +TAG_STAGLIMIT = 0x000e +TAG_SATTRLIMIT = 0x000f +TAG_MDIRLIMIT = 0x0010 +TAG_MTREELIMIT = 0x0011 +TAG_GSTATE = 0x0100 +TAG_GRM = 0x0100 +TAG_NAME = 0x0200 +TAG_BOOKMARK = 0x0201 +TAG_REG = 0x0202 +TAG_DIR = 0x0203 +TAG_STRUCT = 0x0300 +TAG_DATA = 0x0300 +TAG_TRUNK = 0x0304 +TAG_BLOCK = 0x0308 +TAG_BTREE = 0x030c +TAG_BRANCH = 0x031c +TAG_MDIR = 0x0321 +TAG_MTREE = 0x0324 +TAG_MROOT = 0x0329 +TAG_DID = 0x032c +TAG_UATTR = 0x0400 +TAG_SATTR = 0x0600 +TAG_SHRUB = 0x1000 +TAG_CKSUM = 0x3000 +TAG_ECKSUM = 0x3100 +TAG_ALT = 0x4000 +TAG_GT = 0x2000 +TAG_R = 0x1000 # some ways of block geometry representations @@ -184,9 +183,8 @@ def tagrepr(tag, w, size, off=None): 'shrub' if tag & TAG_SHRUB else '', 'magic' if (tag & 0xfff) == TAG_MAGIC else 'version' if (tag & 0xfff) == TAG_VERSION - else 'rflags' if (tag & 0xfff) == TAG_RFLAGS - else 'wflags' if (tag & 0xfff) == TAG_WFLAGS - else 'oflags' if (tag & 0xfff) == TAG_OFLAGS + else 'rcompatflags' if (tag & 0xfff) == TAG_RCOMPATFLAGS + else 'wcompatflags' if (tag & 0xfff) == TAG_WCOMPATFLAGS else 'blocksize' if (tag & 0xfff) == TAG_BLOCKSIZE else 'blockcount' if (tag & 0xfff) == TAG_BLOCKCOUNT else 'sizelimit' if (tag & 0xfff) == TAG_SIZELIMIT diff --git a/scripts/dbgrbyd.py b/scripts/dbgrbyd.py index ab501619..be9fc6c3 100755 --- a/scripts/dbgrbyd.py +++ b/scripts/dbgrbyd.py @@ -17,47 +17,46 @@ COLORS = [ ] -TAG_NULL = 0x0000 -TAG_CONFIG = 0x0000 -TAG_MAGIC = 0x0003 -TAG_VERSION = 0x0004 -TAG_RFLAGS = 0x0005 -TAG_WFLAGS = 0x0006 -TAG_OFLAGS = 0x0007 -TAG_BLOCKSIZE = 0x0008 -TAG_BLOCKCOUNT = 0x0009 -TAG_NAMELIMIT = 0x000a -TAG_SIZELIMIT = 0x000b -TAG_UTAGLIMIT = 0x000c -TAG_UATTRLIMIT = 0x000d -TAG_STAGLIMIT = 0x000e -TAG_SATTRLIMIT = 0x000f -TAG_MDIRLIMIT = 0x0010 -TAG_MTREELIMIT = 0x0011 -TAG_GSTATE = 0x0100 -TAG_GRM = 0x0100 -TAG_NAME = 0x0200 -TAG_BOOKMARK = 0x0201 -TAG_REG = 0x0202 -TAG_DIR = 0x0203 -TAG_STRUCT = 0x0300 -TAG_DATA = 0x0300 -TAG_TRUNK = 0x0304 -TAG_BLOCK = 0x0308 -TAG_BTREE = 0x030c -TAG_BRANCH = 0x031c -TAG_MDIR = 0x0321 -TAG_MTREE = 0x0324 -TAG_MROOT = 0x0329 -TAG_DID = 0x032c -TAG_UATTR = 0x0400 -TAG_SATTR = 0x0600 -TAG_SHRUB = 0x1000 -TAG_CKSUM = 0x3000 -TAG_ECKSUM = 0x3100 -TAG_ALT = 0x4000 -TAG_GT = 0x2000 -TAG_R = 0x1000 +TAG_NULL = 0x0000 +TAG_CONFIG = 0x0000 +TAG_MAGIC = 0x0003 +TAG_VERSION = 0x0004 +TAG_RCOMPATFLAGS = 0x0006 +TAG_WCOMPATFLAGS = 0x0007 +TAG_BLOCKSIZE = 0x0008 +TAG_BLOCKCOUNT = 0x0009 +TAG_NAMELIMIT = 0x000a +TAG_SIZELIMIT = 0x000b +TAG_UTAGLIMIT = 0x000c +TAG_UATTRLIMIT = 0x000d +TAG_STAGLIMIT = 0x000e +TAG_SATTRLIMIT = 0x000f +TAG_MDIRLIMIT = 0x0010 +TAG_MTREELIMIT = 0x0011 +TAG_GSTATE = 0x0100 +TAG_GRM = 0x0100 +TAG_NAME = 0x0200 +TAG_BOOKMARK = 0x0201 +TAG_REG = 0x0202 +TAG_DIR = 0x0203 +TAG_STRUCT = 0x0300 +TAG_DATA = 0x0300 +TAG_TRUNK = 0x0304 +TAG_BLOCK = 0x0308 +TAG_BTREE = 0x030c +TAG_BRANCH = 0x031c +TAG_MDIR = 0x0321 +TAG_MTREE = 0x0324 +TAG_MROOT = 0x0329 +TAG_DID = 0x032c +TAG_UATTR = 0x0400 +TAG_SATTR = 0x0600 +TAG_SHRUB = 0x1000 +TAG_CKSUM = 0x3000 +TAG_ECKSUM = 0x3100 +TAG_ALT = 0x4000 +TAG_GT = 0x2000 +TAG_R = 0x1000 # some ways of block geometry representations @@ -171,9 +170,8 @@ def tagrepr(tag, w, size, off=None): 'shrub' if tag & TAG_SHRUB else '', 'magic' if (tag & 0xfff) == TAG_MAGIC else 'version' if (tag & 0xfff) == TAG_VERSION - else 'rflags' if (tag & 0xfff) == TAG_RFLAGS - else 'wflags' if (tag & 0xfff) == TAG_WFLAGS - else 'oflags' if (tag & 0xfff) == TAG_OFLAGS + else 'rcompatflags' if (tag & 0xfff) == TAG_RCOMPATFLAGS + else 'wcompatflags' if (tag & 0xfff) == TAG_WCOMPATFLAGS else 'blocksize' if (tag & 0xfff) == TAG_BLOCKSIZE else 'blockcount' if (tag & 0xfff) == TAG_BLOCKCOUNT else 'sizelimit' if (tag & 0xfff) == TAG_SIZELIMIT