[PATCH v2] erofs-utils: fix build failure with musl libc

Milan P. Stanić mps at arvanta.net
Sat May 10 19:02:20 AEST 2025


On Wed, 2025-05-07 at 18:35, Natanael Copa wrote:
> On Wed,  7 May 2025 21:25:48 +0800
> Gao Xiang <hsiangkao at linux.alibaba.com> wrote:
> 
> > 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.
> 
> Ok with me.

Also ok with me.

> > I add "_FILE_OFFSET_BITS 64" in the top since "contrib/stress.c"
> > can be compiled individually.
> 
> This looks correct.
> 
> 
> Thank you!
> 
> > 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;
> >  	}
> 


More information about the Linux-erofs mailing list