/* See LICENSE file for copyright and license details. */ #include #include #include #define NANOSECONDS(X) X##L #define MICROSECONDS(X) NANOSECONDS(X##000) #define MILLISECONDS(X) MICROSECONDS(X##000) #define CENTISECONDS(X) MILLISECONDS(X##0) #define DECISECONDS(X) CENTISECONDS(X##0) #define WHOLE_SECOND DECISECONDS(10) enum direction { FORWARDS = 0, BACKWARDS = 1 }; struct span { off_t start; off_t end; off_t bad; size_t blocksize; }; /* io.c */ off_t filesize(int fd, const char *fname); /* fmt.c */ const char *humansize1000(off_t s, char *buf); const char *humansize1024(off_t s, char *buf); #if defined(__GNUC__) __attribute__((__pure__)) #endif off_t unhumansize(const char *s, char flag); const char *durationstr(const struct timespec *dur, char *buf, int second_decimals); const char *humanbytespersecond(double bytes_per_second, char *buf); /* text.c */ int have_micro_symbol(void); /* avg.c */ void wravg_init(const struct timespec *start_time); void wravg_update_write(ssize_t amount); void wravg_update_time(const struct timespec *now); const char *wravg_get(const struct timespec *now); /* rnd.c */ #if defined(__GNUC__) __attribute__((__const__)) #endif size_t max_blksize(void); void init_random(int fd, const char *fname); const char *get_random(size_t needed); void used_random(ssize_t amount);