[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