summaryrefslogtreecommitdiff
path: root/lib/libc/stdlib
AgeCommit message (Collapse)Author
4 daystdestroy: don't visit one-child node twiceDoug Moore
Change tdestroy() to immediately free a node with no right child as soon as it is encountered. Currently, such nodes are visited twice before deletion. Reviewed by: kib Differential Revision: https://reviews.freebsd.org/D54699
5 dayslibc/stdlib: Port strtonumx() from IllumosHans Rosenfeld
Add strtonumx(), a companion to strtonum(3) that preserves its safety and error-reporting semantics while allowing the caller to specify a conversion base, similar to the strtol(3) family of functions. Reviewed by: emaste, kib, ziaee Obtained from: https://www.illumos.org/issues/15365 Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D54270
11 daysgetopt(3): be more explicit about :: extensionSimon Wollwage
Make it possible to search for literal two colons (::) and actually find something. Make the "x"/"x:"/"x::" examples more explicit and more visibile. Signed-off-by: Simon Wollwage <rootnode+freebsd@wollwage.com> Obtained from: NetBSD, nbuwe <uwe@stderr.spb.ru>, 856d5b6 PR: 291374 Reviewed by: imp, jlduran Pull Request: https://github.com/freebsd/freebsd-src/pull/1923
2025-12-29tdestroy(3) man pageKonstantin Belousov
Reviewed by: alc, emaste, ziaee Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D54365
2025-12-29libc: add glibc-compatible tdestroy(3)Konstantin Belousov
The function clears the whole tree. Relnotes: yes Reviewed by: alc, emaste Discussed with: dougm Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D54365
2025-12-29libc/stdlib/Makefile: one line for each source file nameKonstantin Belousov
Reviewed by: alc, emaste Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D54365
2025-11-26strfmon: Fix negative sign handling for C localeJose Luis Duran
If the locale's positive_sign and negative_sign values would both be returned by localeconv() as empty strings, strfmon() shall behave as if the negative_sign value was the string "-". This occurs with the C locale. The implementation previously assigned "0" to sign_posn (parentheses around the entire string); now it assigns it to "1" (sign before the string) when it is undefined (CHAR_MAX). Austin Group Defect 1199[1] is applied, changing the requirements for the '+' and '(' flags. [1]: https://www.austingroupbugs.net/view.php?id=1199 Reviewed by: kib MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D53913
2025-11-26strfmon: EINVAL if the '+' flag and both signs are emptyJose Luis Duran
According to the Open Group Base Specifications Issue 8[1], strfmon(3) should return EINVAL when the '+' flag was included in a conversion specification and the locale's positive_sign and negative_sign values would both be returned by localeconv(3) as empty strings. Austin Group Defect 1199[2] is applied, adding the [EINVAL] error. [1]: https://pubs.opengroup.org/onlinepubs/9799919799/functions/strfmon.html [2]: https://www.austingroupbugs.net/view.php?id=1199 Reviewed by: kib MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D53912
2025-11-26strfmon: Fix typo s/poistion/position/Jose Luis Duran
MFC after: 1 week
2025-11-25jemalloc: apply freebsd changes to jemalloc 5.3.0 man pageMinsoo Choo
Reviewed by: imp Pull Request: https://github.com/freebsd/freebsd-src/pull/1890
2025-11-25jemalloc: import jemalloc 5.3.0 man pageMinsoo Choo
Reviewed by: imp Pull Request: https://github.com/freebsd/freebsd-src/pull/1890
2025-11-19exit.3: Fix a typo in the manual pageGordon Bergling
- s/avaliable/available/ MFC after: 3 days
2025-11-12lib/libc: implement C23 memalignment()Robert Clausecker
This new function computes the alignment of a pointer. It is part of ISO/IEC 9899:2024, the new C standard. If the pointer is a null pointer, null is returned. I have tried to write an implementation that can cope with traditional address-based architectures, even if size_t and uintptr_t are of different length. Adjustments may be needed for CHERI though. A man page is provided, too. No unit test for now. Reviewed by: kib, imp, ziaee (manpages), pauamma@gundo.com Approved by: markj (mentor) MFC after: 1 month Relnotes: yes Differential Revision: https://reviews.freebsd.org/D53673
2025-10-13realpath: Belatedly document POSIX conformanceDag-Erling Smørgrav
We've been mostly POSIX-conforming since r236400 and fully since r240410, which fixed a corner case where a missing non-leaf directory would be reported as ENOTDIR instead of ENOENT. Sponsored by: Klara, Inc. Fixes: 7877ed7ce33e ("Avoid mapping ENOENT to ENOTDIR for non-existent path components.") Reviewed by: ziaee, markj Differential Revision: https://reviews.freebsd.org/D53027
2025-10-13realpath: Report correct path on failureDag-Erling Smørgrav
If lstat() fails with EACCES or ENOTDIR, the path we need to return in the caller-provided buffer is that of the parent directory (which is either unreadable or not a directory; the latter can only happen in the case of a race) rather than that of the child we attempted to stat. Sponsored by: Klara, Inc. Reviewed by: markj Differential Revision: https://reviews.freebsd.org/D53025
2025-10-03lib/libc: add recallocarray()Robert Clausecker
This function from OpenBSD is a hybrid of reallocarray() and calloc(). It reallocates an array, clearing any newly allocated items. reallocarray() ultimately originates from OpenBSD. The source is taken from lib/libopenbsd, which now no longer has the function unless when bootstrapping (needed for mandoc). Reviewed by: kib Differential Revision: https://reviews.freebsd.org/D52863
2025-10-03lib{c,openbsd}: use ckd_mul() for overflow checking in re(c)allocarrayRobert Clausecker
Summary: This makes the code easier to understand and slightly faster, but requires C23. calloc() would benefit, too, but I didn't want to touch the imported jemalloc code base. Reviewed by: kib Differential Revision: https://reviews.freebsd.org/D52854
2025-08-17jemalloc: don't error out on initializer warning in gccWarner Losh
gcc doesn't like something about the initializer that comes with jemalloc. Since it's vendor code, make this warning not an error for -Werror purposes. Sponsored by: Netflix
2025-08-15jemalloc: Merge from jemalloc 5.3.0 vendor branchWarner Losh
This brings in a merge from jemalloc 5.3.0. It's almost fully scripted, except: Three conflicts resolved by hand: include/jemalloc/internal/test_hooks.h Use the new name src/extent.c Use the new code src/jemalloc.c Use the new code since je_realloc has moved The script is recorded in FREEBSD-upgrade. The old script did svn commands that were basically a rebase of our changes. This update has a series of diff reduction changes before this. Note: I'd planned on fixing the above three conflicts with commits, but ran out of time when I did this work in January. I got discouraged when jemalloc was EOL'd and didn't pick this back up. I did the above by hand to get this into FreeBSD 15.0 This work is a repeat of the work by Minsoo Choo who did all these changes and created a pull request. Given the importance of jemalloc, I audited these changes by redoing them in this series of commits (and with the script that was checked in). I did this to confince myself and anybody else in doubt that there was no supply chain attack. The diffs between this series of commits and Minsoo's work are minor (though the version skew makes adds some noise). Interested parties can independent audit each step, I hope. I've listed Minsoo as a co-author since without his pull request to test again, this wouldn't have been possible. Thanks to brooks@ for help with getting the jemalloc 3 ABI compat symbols right. Co-authored-by: Minsoo Choo <minsoochoo0122@proton.me> Pull Request: https://github.com/freebsd/freebsd-src/pull/1337 Sponsored by: Netflix
2025-08-15libc: Drop incorrect qsort optimizationDag-Erling Smørgrav
As pointed out in the PR and the article linked below, the switch to insertion sort in the BSD qsort code is based on a misunderstanding of Knuth's TAOCP and is actually a pessimization. As demonstrated by the added test, it is trivially easy to construct pathological input which results in quadratic runtime. Without that misguided optimization, the same input runs in nearly linearithmic time. https://www.raygard.net/2022/02/26/Re-engineering-a-qsort-part-3 PR: 287089 MFC after: 1 week Reviewed by: imp Differential Revision: https://reviews.freebsd.org/D51907
2025-04-29getopt_long.3: Use "optstring" consistentlyEd Maste
The SYNOPSIS uses "optstring" as the argument name but the body text used a mixture of "optstr" and "optstring." Sponsored by: The FreeBSD Foundation
2025-04-29alloca.3: move to share/man/man3Brooks Davis
The alloca() API is a compiler builtin and not generally part of libc. Reviewed by: imp Differential Revision: https://reviews.freebsd.org/D50055
2025-04-27libc: Add getenv_r() function.Dag-Erling Smørgrav
This is a calque of the NetBSD function of the same name. MFC after: never Relontes: yes Sponsored by: Klara, Inc. Reviewed by: kevans Differential Revision: https://reviews.freebsd.org/D49979
2025-04-17issetugid() is a system call and belongs in section 2 (not 3).Jens Schweikhardt
2025-04-04libc: allow __cxa_atexit handlers to be added during __cxa_finalizeAurélien Croc de Suray
science/dlib-cpp reveals an interesting scenario that works fine on other platforms but not on FreeBSD; notably, it ends up creating a new global object from some destructor which is called during __cxa_finalize. This breaks when libdlib is dlopen()ed and then subsequently dlclose()ed, as we never end up invoking the created object's dtor until program exit when the shlib is already unmapped. Fix it by noting when we're in the middle of __cxa_finalize for a dso, and then restarting the search if __cxa_atexit() was called in the middle somewhere. We wait until we've processed the initial set before starting over and processing the newly added handlers as if it were a complete set of handlers added during runtime. The alternative is calling them as they're added to maintain a LIFO in terms of total ordering, but in theory a constructor could add another global object that also needs to be destroyed, and that object needs to be destroyed after the one that constructed it to avoid creating unexpected lifetime issues. This manifests in the pdlib PHP extension for dlib crashing, see [0]. [0] https://github.com/goodspb/pdlib/issues/39 PR: 285870 Reviewed by: kevans (also supplied commit message) MFC after: 1 week
2025-02-19libc: use __sys___realpathat directly in realpathBrooks Davis
We don't need to use an interposable symbol for this purpose and it's simpler to just call the syscall in libsys. This resolves a bug where we were incorrectly using __realpathat in libc not libsys. While here, drop support for running on a FreeBSD 12 kernel and simplify includes. Reviewed by: kib Differential Revision: https://reviews.freebsd.org/D49048
2024-12-13jemalloc: Move generated files into lib/libc treeWarner Losh
Make it easire to update jemalloc by moving the FreeBSD specific files and the generated files into lib/libc. This allows us to regenerate them more easily, and emphasizes a bit that we may have to regenerate stuff from upstream. This is necessary to also unthin the import from the vendor branch as well (which will be needed to simplify the imports in the future since we are trying to use contrib/jemalloc for two different things). No functional change. Sponsored by: Netflix
2024-12-13jemalloc: Move generated jemalloc.3 into lib/libc treeWarner Losh
The more generated things that are in contrib/jemalloc tree, the more chances for interference goes way up. So, move this file into our lib/libc tree. I didn't add a 'generated file' line / info, but this is funky enough I don't think we need that. We do add things to the man page, and that should be tracked in the contrib/jemalloc tree to allow better importing experience. Sponsored by: Netflix
2024-11-14libc: indicate existing functions that are POSIX 2024Ed Maste
Reviewed by: brooks, imp Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D47581
2024-10-25Revise qsort(3 reflect POSIX.1-2024 update.Xin LI
Reviewed by: emaste, trasz MFC after: 3 days Differential Revision: https://reviews.freebsd.org/D47262
2024-10-15manuals: Fix "unusual .Xr" warnings with a scriptGraham Percival
These were reported by `mandoc -T lint ...` as warnings: - unusual Xr order - unusual Xr punctuation Fixes made by script in https://github.com/Tarsnap/freebsd-doc-scripts Signed-off-by: Graham Percival <gperciva@tarsnap.com> Reviewed by: mhorne, Alexander Ziaee <concussious.bugzilla@runbox.com> Sponsored by: Tarsnap Backup Inc. Pull Request: https://github.com/freebsd/freebsd-src/pull/1464
2024-09-27jemalloc: set LG_VADDR to 64 on amd64Konstantin Belousov
and allow to revert it back to 48 with WITHOUT_JEMALLOC_LG_VADDR_WIDE build option. Reviewed by: andrew, emaste Sponsored by: Advanced Micro Devices (AMD) Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D46686
2024-09-18realpath(3): Minor style issues.Dag-Erling Smørgrav
Sponsored by: Klara, Inc. Reviewed by: kevans Differential Revision: https://reviews.freebsd.org/D46695
2024-08-22jemalloc: don't expose 3.0 compat symbolsBrooks Davis
Don't provide default linkage for jemalloc 3.0 compatability symbols. We stopped declaring these interfaces with the introduction of jemalloc 4.0 prior to FreeBSD 11.0. Any code using them would have had to declare them manually so stop declaring them and export the symbols directly for compatability. Arguably they should be x86 only as they were never declared on other Tier-1 architectures. Reviewed by: imp, kib Differential Revision: https://reviews.freebsd.org/D46407
2024-07-30exit(3): clarify how to obtain full exit status of the exited processKonstantin Belousov
Sponsored by: The FreeBSD Foundation MFC after: 3 days
2024-07-30exit(3): make it thread-safeKonstantin Belousov
It was explained by Rich Felker <dalias@libc.org> on libc-coord. See https://austingroupbugs.net/view.php?id=1845. Reviewed by: imp, markj Tested by: antoine (exp-run) Sponsored by: The FreeBSD Foundation MFC after: 1 month Differential revision: https://reviews.freebsd.org/D46108
2024-07-15Remove residual blank line at start of MakefileWarner Losh
This is a residual of the $FreeBSD$ removal. MFC After: 3 days (though I'll just run the command on the branches) Sponsored by: Netflix
2024-07-13include: ssp: fortify <stdlib.h>Kyle Evans
The immediately obvious and attractive targets from <stdlib.h> are arc4random_buf(3) and realpath(3) -- scraping the header didn't reveal much else of interest. Reviewed by: markj Sponsored by: Klara, Inc. Sponsored by: Stormshield Differential Revision: https://reviews.freebsd.org/D45681
2024-05-04__cxa_thread_call_dtors(3): fix dtor pointer validity checkKonstantin Belousov
When checking for the destructor pointer belonging to some still loaded dso, do not limit the possible dso to the one instantiated the destructor. For instance, dso could set up the dtr pointer to a function from libcxx. PR: 278701 Reported by: vd Reviewed by: dim, emaste, markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D45074
2024-04-12libc: Remove support for pre-C99 C standardsMinsoo Choo
Reviewed by: jhb Differential Revision: https://reviews.freebsd.org/D43254
2024-04-09exit.3: add the comma after an empty spacerilysh
exit(3) man page shows __cxa_atexit(3,) instead of __cxa_atexit(3), in a particular section. It seems the comma gets inside the parenthesis and with an extra space, it can be viewed as expected. Signed-off-by: rilysh <nightquick@proton.me> Reviewed by: imp Pull Request: https://github.com/freebsd/freebsd-src/pull/1006
2024-03-06bsearch_b: fix compilation with gccBrooks Davis
Reported by: rscheff Differential Revision: https://reviews.freebsd.org/D44256
2024-03-05libc: actually build bsearch_bBrooks Davis
Fixes: 46cdc14062f7 Add support for some block functions ... Reviewed by: theraven Differential Revision: https://reviews.freebsd.org/D44189
2024-01-12system(3): fix typo santized -> sanitizedSteve Kargl
PR: 276262 Reviewed by: imp
2023-12-10strfmon.c: Use the restrict keyword directlyKonstantin Belousov
libc sources assume C99 or even C11 compiler already, unlike headers. There is no reason to obfuscate the basic C constructs. Sponsored by: The FreeBSD Foundation MFC after: 1 week
2023-12-10strfmon: style fixesJose Luis Duran
Check style(9) with checkstyle9.pl and clang-format. No functional change intended. MFC after: 1 week
2023-12-09strfmon: Silence scan-build warningJose Luis Duran
The value stored to 'value' is never read. Reported by: Jenkins (scan-build) MFC after: 1 week
2023-12-09strfmon.3: Cleanup example codeJose Luis Duran
- xlocale.h would have been required if using strfmon_l(). Here, setlocale() just requires locale.h. - ANSIfy function declaration. - Add a final return(). MFC after: 1 week
2023-11-26lib: Automated cleanup of cdefs and other formattingWarner Losh
Apply the following automated changes to try to eliminate no-longer-needed sys/cdefs.h includes as well as now-empty blank lines in a row. Remove /^#if.*\n#endif.*\n#include\s+<sys/cdefs.h>.*\n/ Remove /\n+#include\s+<sys/cdefs.h>.*\n+#if.*\n#endif.*\n+/ Remove /\n+#if.*\n#endif.*\n+/ Remove /^#if.*\n#endif.*\n/ Remove /\n+#include\s+<sys/cdefs.h>\n#include\s+<sys/types.h>/ Remove /\n+#include\s+<sys/cdefs.h>\n#include\s+<sys/param.h>/ Remove /\n+#include\s+<sys/cdefs.h>\n#include\s+<sys/capsicum.h>/ Sponsored by: Netflix
2023-11-26lib: Remove ancient SCCS tags.Warner Losh
Remove ancient SCCS tags from the tree, automated scripting, with two minor fixup to keep things compiling. All the common forms in the tree were removed with a perl script. Sponsored by: Netflix