← Commit list

b5c60fc78

Denis Vlasenko
Denis Vlasenko
2008-01-27
FAILED Duration: 20s

Subject

mkswap, readahead: stop using fdlength, it is reported to be unreliable

Binary

No binary (build failed)

Architecture & Compiler Flags

Architecture: x86_64-linux-gnu Compiler: gcc (Ubuntu 11.4.0-1ubuntu1~22.04.3) 11.4.0

—

Build Log

(log yok)

Commit Diff GitHub →

libbb/xfuncs.c+2 -0
@@ -475,6 +475,7 @@ void xsetuid(uid_t uid)
}
// Return how long the file at fd is, if there's any way to determine it.
+#ifdef UNUSED
off_t fdlength(int fd)
{
off_t bottom = 0, top = 0, pos;
@@ -513,6 +514,7 @@ off_t fdlength(int fd)
return pos + 1;
}
+#endif
int bb_putchar(int ch)
{
miscutils/readahead.c+9 -2
@@ -22,9 +22,16 @@ int readahead_main(int argc, char **argv)
while (*++argv) {
int fd = open_or_warn(*argv, O_RDONLY);
if (fd >= 0) {
- int r = readahead(fd, 0, fdlength(fd));
+ off_t len;
+ int r;
+
+ /* fdlength was reported to be unreliable - use seek */
+ len = xlseek(fd, 0, SEEK_END);
+ xlseek(fd, 0, SEEK_SET);
+ r = readahead(fd, 0, len);
close(fd);
- if (r >= 0) continue;
+ if (r >= 0)
+ continue;
}
retval = EXIT_FAILURE;
}
util-linux/mkswap.c+4 -2
@@ -64,9 +64,11 @@ int mkswap_main(int argc, char **argv)
// Figure out how big the device is and announce our intentions.
fd = xopen(argv[1], O_RDWR);
- len = fdlength(fd);
+ /* fdlength was reported to be unreliable - use seek */
+ len = xlseek(fd, 0, SEEK_END);
+ xlseek(fd, 0, SEEK_SET);
pagesize = getpagesize();
- printf("Setting up swapspace version 1, size = %"OFF_FMT"d bytes\n",
+ printf("Setting up swapspace version 1, size = %"OFF_FMT"u bytes\n",
len - pagesize);
mkswap_selinux_setcontext(fd, argv[1]);