changeset 77:8018c40605d9

The fdlength() ioctl apparently doesn't work on files (and the lseek trick doesn't work on some devices, and we can't always tell _when_ it failed), so go to the binary search for now.
author Rob Landley <rob@landley.net>
date Thu, 25 Jan 2007 16:10:37 -0500
parents e6332139adae
children cd1f36a96185
files lib/functions.c
diffstat 1 files changed, 4 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/lib/functions.c	Tue Jan 23 19:54:01 2007 -0500
+++ b/lib/functions.c	Thu Jan 25 16:10:37 2007 -0500
@@ -397,18 +397,6 @@
 	return itoa_buf;
 }
 
-off_t fdlength(int fd)
-{
-	int size;
-
-	if (ioctl(fd, BLKGETSIZE, &size) >= 0) return size*512L;
-	return -1;
-}
-
-/*
- This might be of use or might not.  Unknown yet...
-
-
 // Return how long the file at fd is, if there's any way to determine it.
 off_t fdlength(int fd)
 {
@@ -430,7 +418,7 @@
 
 		// If we can read from the current location, it's bigger.
 
-		if (lseek(fd, pos, 0)>=0 && safe_read(fd, &temp, 1)==1) {
+		if (lseek(fd, pos, 0)>=0 && read(fd, &temp, 1)==1) {
 			if (bottom == top) bottom = top = (top+1) * 2;
 			else bottom = pos;
 
@@ -447,6 +435,9 @@
 	return pos + 1;
 }
 
+/*
+ This might be of use or might not.  Unknown yet...
+
 // Read contents of file as a single freshly allocated nul-terminated string.
 char *readfile(char *name)
 {