[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