[PATCH v2] erofs-utils: fix build failure with musl libc
Gao Xiang
hsiangkao at linux.alibaba.com
Wed May 7 23:25:48 AEST 2025
because musl use readdir, pread and lseek instead of readdir64,
pread64 and lseek64.
Reported-by: Milan P. Stanić <mps at arvanta.net>
Thanks-to: Natanael Copa <ncopa at alpinelinux.org>
Signed-off-by: Gao Xiang <hsiangkao at linux.alibaba.com>
---
(Fix wrong email address typo..)
Hi,
Due to the original patch lacks of the commit message and
SOB, so I revised myself.
I add "_FILE_OFFSET_BITS 64" in the top since "contrib/stress.c"
can be compiled individually.
Feel free to repost a formal patch if inappropriate.
Thanks,
Gao Xiang
contrib/stress.c | 23 ++++++++++++-----------
1 file changed, 12 insertions(+), 11 deletions(-)
diff --git a/contrib/stress.c b/contrib/stress.c
index d8def6a..0ef8c67 100644
--- a/contrib/stress.c
+++ b/contrib/stress.c
@@ -4,6 +4,7 @@
*
* Copyright (C) 2019-2025 Gao Xiang <xiang at kernel.org>
*/
+#define _FILE_OFFSET_BITS 64
#define _GNU_SOURCE
#include "erofs/defs.h"
#include <errno.h>
@@ -271,7 +272,7 @@ static int __getdents_f(unsigned int sn, struct fent *fe)
}
dir = fdopendir(dfd);
- while (readdir64(dir) != NULL)
+ while (readdir(dir) != NULL)
continue;
closedir(dir);
return 0;
@@ -428,7 +429,7 @@ static int __read_f(unsigned int sn, struct fent *fe, uint64_t filesize)
printf("%d[%u]/%u read_f: %llu bytes @ %llu of %s\n", getpid(), procid,
sn, len | 0ULL, off | 0ULL, fe->subpath);
- nread = pread64(fe->fd, buf, len, off);
+ nread = pread(fe->fd, buf, len, off);
if (nread != trimmed) {
fprintf(stderr, "%d[%u]/%u read_f: failed to read %llu bytes @ %llu of %s\n",
getpid(), procid, sn, len | 0ULL, off | 0ULL,
@@ -439,7 +440,7 @@ static int __read_f(unsigned int sn, struct fent *fe, uint64_t filesize)
if (fe->chkfd < 0)
return 0;
- nread2 = pread64(fe->chkfd, chkbuf, len, off);
+ nread2 = pread(fe->chkfd, chkbuf, len, off);
if (nread2 <= 0) {
fprintf(stderr, "%d[%u]/%u read_f: failed to check %llu bytes @ %llu of %s\n",
getpid(), procid, sn, len | 0ULL, off | 0ULL,
@@ -477,14 +478,14 @@ static int read_f(int op, unsigned int sn)
if (ret)
return ret;
- fsz = lseek64(fe->fd, 0, SEEK_END);
+ fsz = lseek(fe->fd, 0, SEEK_END);
if (fsz <= 0) {
if (!fsz) {
printf("%d[%u]/%u %s: zero size @ %s\n",
getpid(), procid, sn, __func__, fe->subpath);
return 0;
}
- fprintf(stderr, "%d[%u]/%u %s: lseek64 %s failed %d\n",
+ fprintf(stderr, "%d[%u]/%u %s: lseek %s failed %d\n",
getpid(), procid, sn, __func__, fe->subpath, errno);
return -errno;
}
@@ -504,7 +505,7 @@ static int __doscan_f(unsigned int sn, const char *op, struct fent *fe,
for (pos = 0; pos < filesize; pos += chunksize) {
ssize_t nread, nread2;
- nread = pread64(fe->fd, buf, chunksize, pos);
+ nread = pread(fe->fd, buf, chunksize, pos);
if (nread <= 0)
return -errno;
@@ -515,7 +516,7 @@ static int __doscan_f(unsigned int sn, const char *op, struct fent *fe,
if (fe->chkfd < 0)
continue;
- nread2 = pread64(fe->chkfd, chkbuf, chunksize, pos);
+ nread2 = pread(fe->chkfd, chkbuf, chunksize, pos);
if (nread2 <= 0)
return -errno;
@@ -547,14 +548,14 @@ static int doscan_f(int op, unsigned int sn)
if (ret)
return ret;
- fsz = lseek64(fe->fd, 0, SEEK_END);
+ fsz = lseek(fe->fd, 0, SEEK_END);
if (fsz <= 0) {
if (!fsz) {
printf("%d[%u]/%u %s: zero size @ %s\n",
getpid(), procid, sn, __func__, fe->subpath);
return 0;
}
- fprintf(stderr, "%d[%u]/%u %s: lseek64 %s failed %d\n",
+ fprintf(stderr, "%d[%u]/%u %s: lseek %s failed %d\n",
getpid(), procid, sn, __func__, fe->subpath, errno);
return -errno;
}
@@ -576,7 +577,7 @@ static int doscan_aligned_f(int op, unsigned int sn)
ret = tryopen(sn, __func__, fe);
if (ret)
return ret;
- fsz = lseek64(fe->fd, 0, SEEK_END);
+ fsz = lseek(fe->fd, 0, SEEK_END);
if (fsz <= psz) {
if (fsz >= 0) {
printf("%d[%u]/%u %s: size too small %lld @ %s\n",
@@ -584,7 +585,7 @@ static int doscan_aligned_f(int op, unsigned int sn)
fe->subpath);
return 0;
}
- fprintf(stderr, "%d[%u]/%u %s: lseek64 %s failed %d\n",
+ fprintf(stderr, "%d[%u]/%u %s: lseek %s failed %d\n",
getpid(), procid, sn, __func__, fe->subpath, errno);
return -errno;
}
--
2.43.5
More information about the Linux-erofs
mailing list