summaryrefslogtreecommitdiffstats
path: root/text-utils/display.c
diff options
context:
space:
mode:
authorOndrej Oprala2013-09-23 15:39:09 +0200
committerKarel Zak2013-11-08 12:54:52 +0100
commit9db5120719a4ff650f2e8b9c3c4081ee46f6f374 (patch)
tree85161ac4570af2a4032654a37241a889112f25ba /text-utils/display.c
parenthexdump: add basic tests (diff)
downloadkernel-qcow2-util-linux-9db5120719a4ff650f2e8b9c3c4081ee46f6f374.tar.gz
kernel-qcow2-util-linux-9db5120719a4ff650f2e8b9c3c4081ee46f6f374.tar.xz
kernel-qcow2-util-linux-9db5120719a4ff650f2e8b9c3c4081ee46f6f374.zip
hexdump: use list.h queues and rewrite redundant for cycles
Signed-off-by: Ondrej Oprala <ooprala@redhat.com>
Diffstat (limited to 'text-utils/display.c')
-rw-r--r--text-utils/display.c64
1 files changed, 39 insertions, 25 deletions
diff --git a/text-utils/display.c b/text-utils/display.c
index 11303667e..1800f2a10 100644
--- a/text-utils/display.c
+++ b/text-utils/display.c
@@ -169,35 +169,47 @@ static void bpad(PR *pr)
void display(void)
{
- register FS *fs;
+ struct list_head *fs;
+ register FS *fss;
register FU *fu;
register PR *pr;
register int cnt;
register unsigned char *bp;
off_t saveaddress;
unsigned char savech = 0, *savebp;
+ struct list_head *p, *q, *r;
- while ((bp = get()) != NULL)
- for (fs = fshead, savebp = bp, saveaddress = address; fs;
- fs = fs->nextfs, bp = savebp, address = saveaddress)
- for (fu = fs->nextfu; fu; fu = fu->nextfu) {
- if (fu->flags&F_IGNORE)
- break;
- for (cnt = fu->reps; cnt; --cnt)
- for (pr = fu->nextpr; pr; address += pr->bcnt,
- bp += pr->bcnt, pr = pr->nextpr) {
- if (eaddress && address >= eaddress &&
- !(pr->flags&(F_TEXT|F_BPAD)))
- bpad(pr);
- if (cnt == 1 && pr->nospace) {
- savech = *pr->nospace;
- *pr->nospace = '\0';
- }
- print(pr, bp);
- if (cnt == 1 && pr->nospace)
- *pr->nospace = savech;
- }
- }
+ while ((bp = get()) != NULL) {
+ fs = &fshead; savebp = bp; saveaddress = address;
+ list_for_each(p, fs) {
+ fss = list_entry(p, FS, nextfs);
+ list_for_each(q, &fss->nextfu) {
+ fu = list_entry(q, FU, nextfu);
+ if (fu->flags&F_IGNORE)
+ break;
+ cnt = fu->reps;
+ while (cnt) {
+ list_for_each(r, &fu->nextpr) {
+ pr = list_entry(r, PR, nextpr);
+ if (eaddress && address >= eaddress &&
+ !(pr->flags&(F_TEXT|F_BPAD)))
+ bpad(pr);
+ if (cnt == 1 && pr->nospace) {
+ savech = *pr->nospace;
+ *pr->nospace = '\0';
+ }
+ print(pr, bp);
+ if (cnt == 1 && pr->nospace)
+ *pr->nospace = savech;
+ address += pr->bcnt;
+ bp += pr->bcnt;
+ }
+ --cnt;
+ }
+ }
+ bp = savebp; address = saveaddress;
+ }
+ }
if (endfu) {
/*
* if eaddress not set, error or file size was multiple of
@@ -208,15 +220,17 @@ void display(void)
return;
eaddress = address;
}
- for (pr = endfu->nextpr; pr; pr = pr->nextpr)
+ list_for_each (p, &endfu->nextpr) {
+ pr = list_entry(p, PR, nextpr);
switch(pr->flags) {
case F_ADDRESS:
- (void)printf(pr->fmt, (int64_t)eaddress);
+ printf(pr->fmt, (int64_t)eaddress);
break;
case F_TEXT:
- (void)printf("%s", pr->fmt);
+ printf("%s", pr->fmt);
break;
}
+ }
}
}