# HG changeset patch # User Rob Landley # Date 1216377824 18000 # Node ID 8b8116214b1ca89b20ce715be78eb3a409eb74a8 # Parent 79a61cd58596a207db711c921c396a1770da5e4f Roberto Foglietta pointed out that readall() needs fdlength() to restore the original position before exiting. diff -r 79a61cd58596 -r 8b8116214b1c lib/lib.c --- a/lib/lib.c Fri Jul 18 04:15:59 2008 -0500 +++ b/lib/lib.c Fri Jul 18 05:43:44 2008 -0500 @@ -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; }