* build of erofs-utils 1.8.6 fails with musl libc
@ 2025-05-06 12:11 Milan P. Stanić
2025-05-06 12:38 ` Gao Xiang
` (2 more replies)
0 siblings, 3 replies; 6+ messages in thread
From: Milan P. Stanić @ 2025-05-06 12:11 UTC (permalink / raw)
To: linux-erofs; +Cc: Natanael Copa
[-- Attachment #1: Type: text/plain, Size: 2348 bytes --]
Hi,
I'm maintainer of erofs-utils for Alpine linux, distribution which use
musl libc instead of glibc.
Building version 1.8.6 gives error:
------------------
Making all in contrib
make[2]: Entering directory '/home/mps/aports/community/erofs-utils/src/erofs-utils-1.8.6/contrib'
cc -DHAVE_CONFIG_H -I. -I.. -DNDEBUG -Wall -I../include -Os -fstack-clash-protection -Wformat -Werror=format-security -fno-plt -MT stress-stress.o -MD -MP -MF .deps/stress-stress.Tpo -c -o stress-stress.o `test -f 'stress.c' || echo './'`stress.c
stress.c: In function '__getdents_f':
stress.c:274:16: error: implicit declaration of function 'readdir64'; did you mean 'readdir_r'? [-Wimplicit-function-declaration]
274 | while (readdir64(dir) != NULL)
| ^~~~~~~~~
| readdir_r
stress.c:274:31: warning: comparison between pointer and integer
274 | while (readdir64(dir) != NULL)
| ^~
stress.c: In function '__read_f':
stress.c:431:17: error: implicit declaration of function 'pread64'; did you mean 'pread'? [-Wimplicit-function-declaration]
431 | nread = pread64(fe->fd, buf, len, off);
| ^~~~~~~
| pread
stress.c: In function 'read_f':
stress.c:480:15: error: implicit declaration of function 'lseek64'; did you mean 'lseek'? [-Wimplicit-function-declaration]
480 | fsz = lseek64(fe->fd, 0, SEEK_END);
| ^~~~~~~
| lseek
make[2]: *** [Makefile:420: stress-stress.o] Error 1
make[2]: Leaving directory '/home/mps/aports/community/erofs-utils/src/erofs-utils-1.8.6/contrib'
make[1]: *** [Makefile:447: all-recursive] Error 1
make[1]: Leaving directory '/home/mps/aports/community/erofs-utils/src/erofs-utils-1.8.6'
make: *** [Makefile:379: all] Error 2
>>> ERROR: erofs-utils: build failed
>>> erofs-utils: Uninstalling dependencies...
(1/19) Purging .makedepends-erofs-utils (20250506.063719)
------------------
This is because musl use readdir, pread and lseek instead of readdir64,
pread64 and lseek64.
(IMO musl does this properly)
Natanael Copa <ncopa@alpinelinux.org> created patch with which I build
erofs-utils successfully. I'm attaching patch to this mail.
Feel free to contact me if you more information or to try some new
patches.
--
Kind regards
[-- Attachment #2: fix-read-pread-seek-64.patch --]
[-- Type: text/x-diff, Size: 3413 bytes --]
diff --git a/contrib/stress.c b/contrib/stress.c
index d8def6a..0593d71 100644
--- a/contrib/stress.c
+++ b/contrib/stress.c
@@ -271,7 +271,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 +428,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 +439,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 +477,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 +504,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 +515,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 +547,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 +576,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 +584,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;
}
^ permalink raw reply related [flat|nested] 6+ messages in thread* Re: build of erofs-utils 1.8.6 fails with musl libc
2025-05-06 12:11 build of erofs-utils 1.8.6 fails with musl libc Milan P. Stanić
@ 2025-05-06 12:38 ` Gao Xiang
2025-05-07 8:50 ` [PATCH] erofs-utils: fix build failure " Gao Xiang
2025-05-07 13:25 ` [PATCH v2] " Gao Xiang
2 siblings, 0 replies; 6+ messages in thread
From: Gao Xiang @ 2025-05-06 12:38 UTC (permalink / raw)
To: Milan P. Stanić, linux-erofs; +Cc: Natanael Copa
Hi Milan,
On 2025/5/6 20:11, Milan P. Stanić wrote:
> Hi,
>
> I'm maintainer of erofs-utils for Alpine linux, distribution which use
> musl libc instead of glibc.
>
> Building version 1.8.6 gives error:
> ------------------
> Making all in contrib
> make[2]: Entering directory '/home/mps/aports/community/erofs-utils/src/erofs-utils-1.8.6/contrib'
> cc -DHAVE_CONFIG_H -I. -I.. -DNDEBUG -Wall -I../include -Os -fstack-clash-protection -Wformat -Werror=format-security -fno-plt -MT stress-stress.o -MD -MP -MF .deps/stress-stress.Tpo -c -o stress-stress.o `test -f 'stress.c' || echo './'`stress.c
> stress.c: In function '__getdents_f':
> stress.c:274:16: error: implicit declaration of function 'readdir64'; did you mean 'readdir_r'? [-Wimplicit-function-declaration]
> 274 | while (readdir64(dir) != NULL)
> | ^~~~~~~~~
> | readdir_r
> stress.c:274:31: warning: comparison between pointer and integer
> 274 | while (readdir64(dir) != NULL)
> | ^~
> stress.c: In function '__read_f':
> stress.c:431:17: error: implicit declaration of function 'pread64'; did you mean 'pread'? [-Wimplicit-function-declaration]
> 431 | nread = pread64(fe->fd, buf, len, off);
> | ^~~~~~~
> | pread
> stress.c: In function 'read_f':
> stress.c:480:15: error: implicit declaration of function 'lseek64'; did you mean 'lseek'? [-Wimplicit-function-declaration]
> 480 | fsz = lseek64(fe->fd, 0, SEEK_END);
> | ^~~~~~~
> | lseek
> make[2]: *** [Makefile:420: stress-stress.o] Error 1
> make[2]: Leaving directory '/home/mps/aports/community/erofs-utils/src/erofs-utils-1.8.6/contrib'
> make[1]: *** [Makefile:447: all-recursive] Error 1
> make[1]: Leaving directory '/home/mps/aports/community/erofs-utils/src/erofs-utils-1.8.6'
> make: *** [Makefile:379: all] Error 2
>>>> ERROR: erofs-utils: build failed
>>>> erofs-utils: Uninstalling dependencies...
> (1/19) Purging .makedepends-erofs-utils (20250506.063719)
> ------------------
>
> This is because musl use readdir, pread and lseek instead of readdir64,
> pread64 and lseek64.
> (IMO musl does this properly)
>
> Natanael Copa <ncopa@alpinelinux.org> created patch with which I build
> erofs-utils successfully. I'm attaching patch to this mail.
>
> Feel free to contact me if you more information or to try some new
> patches.
Thanks! I will look into that later and feedback.
Thanks,
Gao Xiang
>
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH] erofs-utils: fix build failure with musl libc
2025-05-06 12:11 build of erofs-utils 1.8.6 fails with musl libc Milan P. Stanić
2025-05-06 12:38 ` Gao Xiang
@ 2025-05-07 8:50 ` Gao Xiang
2025-05-07 13:25 ` [PATCH v2] " Gao Xiang
2 siblings, 0 replies; 6+ messages in thread
From: Gao Xiang @ 2025-05-07 8:50 UTC (permalink / raw)
To: linux-erofs; +Cc: Natanael Copa, Gao Xiang, Milan P . Stanić
because musl use readdir, pread and lseek instead of readdir64,
pread64 and lseek64.
Reported-by: Milan P. Stanić <ps@arvanta.net>
Thanks-to: Natanael Copa <ncopa@alpinelinux.org>
Signed-off-by: Gao Xiang <hsiangkao@linux.alibaba.com>
---
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@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
^ permalink raw reply related [flat|nested] 6+ messages in thread* [PATCH v2] erofs-utils: fix build failure with musl libc
2025-05-06 12:11 build of erofs-utils 1.8.6 fails with musl libc Milan P. Stanić
2025-05-06 12:38 ` Gao Xiang
2025-05-07 8:50 ` [PATCH] erofs-utils: fix build failure " Gao Xiang
@ 2025-05-07 13:25 ` Gao Xiang
2025-05-07 16:35 ` Natanael Copa
2 siblings, 1 reply; 6+ messages in thread
From: Gao Xiang @ 2025-05-07 13:25 UTC (permalink / raw)
To: linux-erofs; +Cc: Natanael Copa, Gao Xiang, Milan P . Stanić
because musl use readdir, pread and lseek instead of readdir64,
pread64 and lseek64.
Reported-by: Milan P. Stanić <mps@arvanta.net>
Thanks-to: Natanael Copa <ncopa@alpinelinux.org>
Signed-off-by: Gao Xiang <hsiangkao@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@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
^ permalink raw reply related [flat|nested] 6+ messages in thread* Re: [PATCH v2] erofs-utils: fix build failure with musl libc
2025-05-07 13:25 ` [PATCH v2] " Gao Xiang
@ 2025-05-07 16:35 ` Natanael Copa
2025-05-10 9:02 ` Milan P. Stanić
0 siblings, 1 reply; 6+ messages in thread
From: Natanael Copa @ 2025-05-07 16:35 UTC (permalink / raw)
To: Gao Xiang; +Cc: linux-erofs, Milan P . Stani*
On Wed, 7 May 2025 21:25:48 +0800
Gao Xiang <hsiangkao@linux.alibaba.com> wrote:
> because musl use readdir, pread and lseek instead of readdir64,
> pread64 and lseek64.
>
> Reported-by: Milan P. Stani* <mps@arvanta.net>
> Thanks-to: Natanael Copa <ncopa@alpinelinux.org>
> Signed-off-by: Gao Xiang <hsiangkao@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 <xiang@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;
> }
^ permalink raw reply [flat|nested] 6+ messages in thread* Re: [PATCH v2] erofs-utils: fix build failure with musl libc
2025-05-07 16:35 ` Natanael Copa
@ 2025-05-10 9:02 ` Milan P. Stanić
0 siblings, 0 replies; 6+ messages in thread
From: Milan P. Stanić @ 2025-05-10 9:02 UTC (permalink / raw)
To: Natanael Copa; +Cc: Gao Xiang, linux-erofs
On Wed, 2025-05-07 at 18:35, Natanael Copa wrote:
> On Wed, 7 May 2025 21:25:48 +0800
> Gao Xiang <hsiangkao@linux.alibaba.com> wrote:
>
> > because musl use readdir, pread and lseek instead of readdir64,
> > pread64 and lseek64.
> >
> > Reported-by: Milan P. Stani* <mps@arvanta.net>
> > Thanks-to: Natanael Copa <ncopa@alpinelinux.org>
> > Signed-off-by: Gao Xiang <hsiangkao@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@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;
> > }
>
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2025-05-10 9:02 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-05-06 12:11 build of erofs-utils 1.8.6 fails with musl libc Milan P. Stanić
2025-05-06 12:38 ` Gao Xiang
2025-05-07 8:50 ` [PATCH] erofs-utils: fix build failure " Gao Xiang
2025-05-07 13:25 ` [PATCH v2] " Gao Xiang
2025-05-07 16:35 ` Natanael Copa
2025-05-10 9:02 ` Milan P. Stanić
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.