mkswap, readahead: stop using fdlength, it is reported to be unreliable
This commit is contained in:
parent
da42bd5bbe
commit
b5c60fc787
@ -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.
|
// 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 fdlength(int fd)
|
||||||
{
|
{
|
||||||
off_t bottom = 0, top = 0, pos;
|
off_t bottom = 0, top = 0, pos;
|
||||||
@ -513,6 +514,7 @@ off_t fdlength(int fd)
|
|||||||
|
|
||||||
return pos + 1;
|
return pos + 1;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
int bb_putchar(int ch)
|
int bb_putchar(int ch)
|
||||||
{
|
{
|
||||||
|
@ -22,9 +22,16 @@ int readahead_main(int argc, char **argv)
|
|||||||
while (*++argv) {
|
while (*++argv) {
|
||||||
int fd = open_or_warn(*argv, O_RDONLY);
|
int fd = open_or_warn(*argv, O_RDONLY);
|
||||||
if (fd >= 0) {
|
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);
|
close(fd);
|
||||||
if (r >= 0) continue;
|
if (r >= 0)
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
retval = EXIT_FAILURE;
|
retval = EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
@ -64,9 +64,11 @@ int mkswap_main(int argc, char **argv)
|
|||||||
// Figure out how big the device is and announce our intentions.
|
// Figure out how big the device is and announce our intentions.
|
||||||
|
|
||||||
fd = xopen(argv[1], O_RDWR);
|
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();
|
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);
|
len - pagesize);
|
||||||
mkswap_selinux_setcontext(fd, argv[1]);
|
mkswap_selinux_setcontext(fd, argv[1]);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user