ps: conditionally enable -T on non-DESKTOP build too
[oweals/busybox.git] / miscutils / readahead.c
index 9f1bb47be78f5d4658a923f90c5011dc4e957471..fb71ce85f010b3f3097b265e09e8f7ba383b58ee 100644 (file)
  * Licensed under GPLv2 or later, see file License in this tarball for details.
  */
 
-#include "busybox.h"
+#include "libbb.h"
 
+int readahead_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
 int readahead_main(int argc, char **argv)
 {
-       FILE *f;
-       struct stat stat_buf;
        int retval = EXIT_SUCCESS;
 
        if (argc == 1) bb_show_usage();
 
        while (*++argv) {
-               if ((f = bb_wfopen(*argv, "r")) != NULL) {
-                       int r, fd=fileno(f);
-                       
-                       xstat(*argv, &stat_buf);
-                       r = readahead(fd, 0, fdlength(fd));
-                       fclose(f);
-                       if (r >= 0) continue;
+               int fd = open_or_warn(*argv, O_RDONLY);
+               if (fd >= 0) {
+                       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;
                }
                retval = EXIT_FAILURE;
        }