Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/littlefs-project/littlefs.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristopher Haster <chaster@utexas.edu>2020-01-31 01:05:42 +0300
committerChristopher Haster <chaster@utexas.edu>2020-02-09 21:00:23 +0300
commit6a550844f448f608c835d45df4656b972854a130 (patch)
tree70bd385a959511184a01a26754c00768b4501932 /scripts
parentf9c2fd93f289a3d8f23ffebc6f4089260c417258 (diff)
Modified readmdir/readtree to make reading non-truncated data easier
Added indention so there was a more clear separation between the tag description and tag data. Also took the best parts of readmdir.py and added it to readtree.py. Initially I was thinking it was best for these to have completely independent data representations, since you could always call readtree to get more info, but this becomes tedius when needed to look at low-level tag info across multiple directories on the filesystem.
Diffstat (limited to 'scripts')
-rwxr-xr-xscripts/readmdir.py37
-rwxr-xr-xscripts/readtree.py61
2 files changed, 33 insertions, 65 deletions
diff --git a/scripts/readmdir.py b/scripts/readmdir.py
index 1730f02..ef634a9 100755
--- a/scripts/readmdir.py
+++ b/scripts/readmdir.py
@@ -2,6 +2,7 @@
import struct
import binascii
+import sys
import itertools as it
TAG_TYPES = {
@@ -271,37 +272,39 @@ class MetadataPair:
raise KeyError(gmask, gtag)
- def _dump_tags(self, tags, truncate=True):
- sys.stdout.write("%-8s %-8s %-13s %4s %4s %s\n" % (
- 'off', 'tag', 'type', 'id', 'len',
- 'data (truncated)' if truncate else 12*' '+'data'))
+ def _dump_tags(self, tags, f=sys.stdout, truncate=True):
+ f.write("%-8s %-8s %-13s %4s %4s" % (
+ 'off', 'tag', 'type', 'id', 'len'))
+ if truncate:
+ f.write(' data (truncated)')
+ f.write('\n')
for tag in tags:
- sys.stdout.write("%08x: %08x %-13s %4s %4s" % (
+ f.write("%08x: %08x %-13s %4s %4s" % (
tag.off, tag,
tag.typerepr(), tag.idrepr(), tag.sizerepr()))
if truncate:
- sys.stdout.write(" %-23s %-8s\n" % (
+ f.write(" %-23s %-8s\n" % (
' '.join('%02x' % c for c in tag.data[:8]),
''.join(c if c >= ' ' and c <= '~' else '.'
for c in map(chr, tag.data[:8]))))
else:
- sys.stdout.write("\n")
+ f.write("\n")
for i in range(0, len(tag.data), 16):
- sys.stdout.write("%08x: %-47s %-16s\n" % (
+ f.write(" %08x: %-47s %-16s\n" % (
tag.off+i,
' '.join('%02x' % c for c in tag.data[i:i+16]),
''.join(c if c >= ' ' and c <= '~' else '.'
for c in map(chr, tag.data[i:i+16]))))
- def dump_tags(self, truncate=True):
- self._dump_tags(self.tags, truncate=truncate)
+ def dump_tags(self, f=sys.stdout, truncate=True):
+ self._dump_tags(self.tags, f=f, truncate=truncate)
- def dump_log(self, truncate=True):
- self._dump_tags(self.log, truncate=truncate)
+ def dump_log(self, f=sys.stdout, truncate=True):
+ self._dump_tags(self.log, f=f, truncate=truncate)
- def dump_all(self, truncate=True):
- self._dump_tags(self.all_, truncate=truncate)
+ def dump_all(self, f=sys.stdout, truncate=True):
+ self._dump_tags(self.all_, f=f, truncate=truncate)
def main(args):
blocks = []
@@ -337,10 +340,10 @@ if __name__ == "__main__":
help="First block address for finding the metadata pair.")
parser.add_argument('block2', nargs='?', type=lambda x: int(x, 0),
help="Second block address for finding the metadata pair.")
- parser.add_argument('-a', '--all', action='store_true',
- help="Show all tags in log, included tags in corrupted commits.")
parser.add_argument('-l', '--log', action='store_true',
help="Show tags in log.")
+ parser.add_argument('-a', '--all', action='store_true',
+ help="Show all tags in log, included tags in corrupted commits.")
parser.add_argument('-T', '--no-truncate', action='store_true',
- help="Don't truncate large amounts of data in tags.")
+ help="Don't truncate large amounts of data.")
sys.exit(main(parser.parse_args()))
diff --git a/scripts/readtree.py b/scripts/readtree.py
index ecfdab9..ea8cb5f 100755
--- a/scripts/readtree.py
+++ b/scripts/readtree.py
@@ -13,45 +13,6 @@ def popc(x):
def ctz(x):
return len(bin(x)) - len(bin(x).rstrip('0'))
-def dumptags(args, mdir, f):
- if args.all:
- tags = mdir.all_
- elif args.log:
- tags = mdir.log
- else:
- tags = mdir.tags
-
- for k, tag in enumerate(tags):
- f.write("tag %08x %s" % (tag, tag.typerepr()))
- if tag.id != 0x3ff:
- f.write(" id %d" % tag.id)
- if tag.size != 0x3ff:
- f.write(" size %d" % tag.size)
- if tag.is_('name'):
- f.write(" name %s" %
- json.dumps(tag.data.decode('utf8')))
- if tag.is_('dirstruct'):
- f.write(" dir {%#x, %#x}" % struct.unpack(
- '<II', tag.data[:8].ljust(8, b'\xff')))
- if tag.is_('ctzstruct'):
- f.write(" ctz {%#x} size %d" % struct.unpack(
- '<II', tag.data[:8].ljust(8, b'\xff')))
- if tag.is_('inlinestruct'):
- f.write(" inline size %d" % tag.size)
- if tag.is_('gstate'):
- f.write(" 0x%s" % ''.join('%02x' % c for c in tag.data))
- if tag.is_('tail'):
- f.write(" tail {%#x, %#x}" % struct.unpack(
- '<II', tag.data[:8].ljust(8, b'\xff')))
- f.write("\n")
-
- if args.data:
- for i in range(0, len(tag.data), 16):
- f.write(" %-47s %-16s\n" % (
- ' '.join('%02x' % c for c in tag.data[i:i+16]),
- ''.join(c if c >= ' ' and c <= '~' else '.'
- for c in map(chr, tag.data[i:i+16]))))
-
def dumpentries(args, mdir, f):
for k, id_ in enumerate(mdir.ids):
name = mdir[Tag('name', id_, 0)]
@@ -72,8 +33,8 @@ def dumpentries(args, mdir, f):
if args.data and struct_.is_('inlinestruct'):
for i in range(0, len(struct_.data), 16):
- f.write(" %-47s %-16s\n" % (
- ' '.join('%02x' % c for c in struct_.data[i:i+16]),
+ f.write(" %08x: %-47s %-16s\n" % (
+ i, ' '.join('%02x' % c for c in struct_.data[i:i+16]),
''.join(c if c >= ' ' and c <= '~' else '.'
for c in map(chr, struct_.data[i:i+16]))))
elif args.data and struct_.is_('ctzstruct'):
@@ -95,8 +56,8 @@ def dumpentries(args, mdir, f):
it.chain.from_iterable(reversed(data)), size))
for i in range(0, min(len(data), 256)
if not args.no_truncate else len(data), 16):
- f.write(" %-47s %-16s\n" % (
- ' '.join('%02x' % c for c in data[i:i+16]),
+ f.write(" %08x: %-47s %-16s\n" % (
+ i, ' '.join('%02x' % c for c in data[i:i+16]),
''.join(c if c >= ' ' and c <= '~' else '.'
for c in map(chr, data[i:i+16]))))
@@ -239,8 +200,12 @@ def main(args):
' (corrupted)' if not mdir else ''))
f = io.StringIO()
- if args.tags or args.all or args.log:
- dumptags(args, mdir, f)
+ if args.tags:
+ mdir.dump_tags(f, truncate=not args.no_truncate)
+ elif args.log:
+ mdir.dump_log(f, truncate=not args.no_truncate)
+ elif args.all:
+ mdir.dump_all(f, truncate=not args.no_truncate)
else:
dumpentries(args, mdir, f)
@@ -285,12 +250,12 @@ if __name__ == "__main__":
help="Show contents of metadata-pairs/directories.")
parser.add_argument('-t', '--tags', action='store_true',
help="Show metadata tags instead of reconstructing entries.")
- parser.add_argument('-a', '--all', action='store_true',
- help="Show all tags in log, included tags in corrupted commits.")
parser.add_argument('-l', '--log', action='store_true',
help="Show tags in log.")
+ parser.add_argument('-a', '--all', action='store_true',
+ help="Show all tags in log, included tags in corrupted commits.")
parser.add_argument('-d', '--data', action='store_true',
help="Also show the raw contents of files/attrs/tags.")
parser.add_argument('-T', '--no-truncate', action='store_true',
- help="Don't truncate large amounts of data in files.")
+ help="Don't truncate large amounts of data.")
sys.exit(main(parser.parse_args()))