Roberto Foglietta pointed out that readall() needs fdlength() to restore
the original position before exiting.
diff --git a/lib/lib.c b/lib/lib.c
index 959cd46..d156893 100644
--- a/lib/lib.c
+++ b/lib/lib.c
@@ -474,7 +474,7 @@
// Return how long the file at fd is, if there's any way to determine it.
off_t fdlength(int fd)
{
- off_t bottom = 0, top = 0, pos;
+ off_t bottom = 0, top = 0, pos, old;
int size;
// If the ioctl works for this, return it.
@@ -485,6 +485,7 @@
// block devices don't do BLKGETSIZE right.) This should probably have
// a CONFIG option...
+ old = lseek(fd, 0, SEEK_CUR);
do {
char temp;
@@ -506,6 +507,8 @@
}
} while (bottom + 1 != top);
+ lseek(fd, old, SEEK_SET);
+
return pos + 1;
}