From 7248e265c7feaa96692b926ecb5a62b40437b7d1 Mon Sep 17 00:00:00 2001 From: "Darrick J. Wong" Date: Sun, 24 Aug 2014 19:55:42 -0400 Subject: [PATCH] e2fuzz: fix pwrite64/pwrite usage Select pwrite64 or pwrite depending on what autoconf finds. This makes e2fuzz find a suitable pwrite variant regardless of platform. Signed-off-by: Darrick J. Wong Signed-off-by: Theodore Ts'o --- misc/e2fuzz.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/misc/e2fuzz.c b/misc/e2fuzz.c index 741dd67..c08e3df 100644 --- a/misc/e2fuzz.c +++ b/misc/e2fuzz.c @@ -32,15 +32,15 @@ static int metadata_only = 1; static unsigned long long user_corrupt_bytes = 0; static double user_corrupt_pct = 0.0; -#ifndef HAVE_PWRITE -ssize_t pwrite(int fd, const void *buf, size_t count, off_t offset) +#if !defined HAVE_PWRITE64 && !defined HAVE_PWRITE +static ssize_t my_pwrite(int fd, const void *buf, size_t count, off_t offset) { if (lseek(fd, offset, SEEK_SET) < 0) return 0; return write(fd, buf, count); } -#endif /* HAVE_PWRITE */ +#endif /* !defined HAVE_PWRITE64 && !defined HAVE_PWRITE */ int getseed(void) { @@ -277,10 +277,22 @@ int process_fs(const char *fsname) off % fs->blocksize, off / fs->blocksize, c); if (dryrun) continue; +#ifdef HAVE_PWRITE64 + if (pwrite64(fd, &c, sizeof(c), off) != sizeof(c)) { + perror(fsname); + goto fail3; + } +#elif HAVE_PWRITE if (pwrite(fd, &c, sizeof(c), off) != sizeof(c)) { perror(fsname); goto fail3; } +#else + if (my_pwrite(fd, &c, sizeof(c), off) != sizeof(c)) { + perror(fsname); + goto fail3; + } +#endif } close(fd); -- 1.8.3.1