On Wed,  7 May 2025 21:25:48 +0800
Gao Xiang <hsiang...@linux.alibaba.com> wrote:

> because musl use readdir, pread and lseek instead of readdir64,
> pread64 and lseek64.
> 
> Reported-by: Milan P. Stani* <m...@arvanta.net>
> Thanks-to: Natanael Copa <nc...@alpinelinux.org>
> Signed-off-by: Gao Xiang <hsiang...@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.

> 
> 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 <xi...@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;
>       }


Reply via email to