Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/bin/zhashfs.c
diff options
context:
space:
mode:
Diffstat (limited to 'bin/zhashfs.c')
-rw-r--r--bin/zhashfs.c20
1 files changed, 19 insertions, 1 deletions
diff --git a/bin/zhashfs.c b/bin/zhashfs.c
index 9832f31..b85de95 100644
--- a/bin/zhashfs.c
+++ b/bin/zhashfs.c
@@ -165,6 +165,8 @@ int main(int argc, char **argv)
FILE *infile;
long i;
off_t insize;
+ off_t outsizepos, zsizepos, lastpos;
+ char *sizefmt;
int readlen;
int skip;
@@ -236,6 +238,11 @@ int main(int argc, char **argv)
++fname;
fprintf(outfile, "data: %s\n", fname);
+ outsizepos = ftello(outfile);
+ zsizepos = ftello(zfile);
+ sizefmt = "[ifdef] size: size: %12.12lx [then]\n";
+ fprintf(outfile, sizefmt, 0);
+ fprintf(zfile, sizefmt, 0);
fprintf(outfile, "zblocks: %lx %lx\n", zblocksize, eblocks);
fprintf(zfile, "zblocks: %lx %lx\n", zblocksize, eblocks);
@@ -266,9 +273,20 @@ int main(int argc, char **argv)
fprintf(outfile, "zblocks-end:\n");
fprintf(zfile, "zblocks-end:\n");
+ lastpos = ftello(zfile);
+
+ /* go back and rewrite zdata size line, now that it is known */
+ (void)fseeko(outfile, outsizepos, SEEK_SET);
+ fprintf(outfile, sizefmt, lastpos);
+ (void)fseeko(outfile, lastpos, SEEK_SET);
+
+ (void)fseeko(zfile, zsizepos, SEEK_SET);
+ fprintf(zfile, sizefmt, lastpos);
+ (void)fseeko(zfile, lastpos, SEEK_SET);
+
fclose(infile);
fclose(outfile);
- putchar('\n');
+ putchar('\n');
return EXIT_SUCCESS;
}