Skip to content

Conversation

@holishing
Copy link
Contributor

@holishing holishing commented Nov 1, 2025

Newer glibc (≥ 2.38) provides built-in implementations of strlcpy() and strlcat(). Projects that also define these functions will now fail to build due to symbol redefinition conflicts.

This patch is trying to verify whether strlcpy()/strlcat() are available at compile time and only compiles the compatibility implementation when missing. (e.g. glibc is older 2.38)

ref: https://sourceware.org/git/?p=glibc.git;a=commit;h=454a20c8756c9c1d55419153255fc7692b3d2199

related previous discussion: #135
related build test: https://github.com/bbsdocker/imageptt/actions/runs/19000701482

@IepIweidieng
Copy link
Contributor

7580913 failed because __has_builtin() only checks for functions built in the compiler, as listed in https://gcc.gnu.org/onlinedocs/gcc/Built-in-Functions.html. It never checks again glibc or other libraries.
In GCC, only some standard C functions have compiler built-in version. Nonstandard C library functions (here strlcpy() and strlcat()) do not have compiler built-in version.

Newer glibc (≥ 2.38) provides built-in implementations of strlcpy() and
strlcat(). Projects that also define these functions will now fail to
build due to symbol redefinition conflicts.

This patch is trying to verify whether strlcpy()/strlcat() are available
at compile time and only compiles the compatibility implementation
when missing. (e.g. glibc is older 2.38)

This commit also revert 7580913.

Because __has_builtin() only checks for functions built in the
compiler(*), as listed in [2].  It never checks again glibc or other
libraries. In GCC, only some standard C functions have compiler built-in
version.  Nonstandard C library functions (here strlcpy() and strlcat())
do not have compiler built-in version.

[1]: https://sourceware.org/git/?p=glibc.git;a=commit;h=454a20c8756c9c1d55419153255fc7692b3d2199
[2]: https://gcc.gnu.org/onlinedocs/gcc/Built-in-Functions.html

* Thanks to "Wei-Cheng Yeh (IID)" <iid@ccns.ncku.edu.tw> for helping confirm the root cause.
@holishing holishing force-pushed the r2/strlcpy-strlcat-compat branch from 6b1d8bf to 015f3a8 Compare November 2, 2025 03:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants