OSDN Git Service

The fdlength() ioctl apparently doesn't work on files (and the lseek trick
authorRob Landley <rob@landley.net>
Thu, 25 Jan 2007 21:10:37 +0000 (16:10 -0500)
committerRob Landley <rob@landley.net>
Thu, 25 Jan 2007 21:10:37 +0000 (16:10 -0500)
doesn't work on some devices, and we can't always tell _when_ it failed), so
go to the binary search for now.

lib/functions.c

index 88258dd..7efc2df 100644 (file)
@@ -397,18 +397,6 @@ char *itoa(int n)
        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 @@ off_t fdlength(int fd)
 
                // 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 @@ off_t fdlength(int fd)
        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)
 {