summaryrefslogtreecommitdiff
path: root/src/legacy
AgeCommit message (Collapse)AuthorLines
2022-10-19remove LFS64 symbol aliases; replace with dynamic linker remappingRich Felker-2/+0
originally the namespace-infringing "large file support" interfaces were included as part of glibc-ABI-compat, with the intent that they not be used for linking, since our off_t is and always has been unconditionally 64-bit and since we usually do not aim to support nonstandard interfaces when there is an equivalent standard interface. unfortunately, having the symbols present and available for linking caused configure scripts to detect them and attempt to use them without declarations, producing all the expected ill effects that entails. as a result, commit 2dd8d5e1b8ba1118ff1782e96545cb8a2318592c was made to prevent this, using macros to redirect the LFS64 names to the standard names, conditional on _GNU_SOURCE or _LARGEFILE64_SOURCE. however, this has turned out to be a source of further problems, especially since g++ defines _GNU_SOURCE by default. in particular, the presence of these names as macros breaks a lot of valid code. this commit removes all the LFS64 symbols and replaces them with a mechanism in the dynamic linker symbol lookup failure path to retry with the spurious "64" removed from the symbol name. in the future, if/when the rest of glibc-ABI-compat is moved out of libc, this can be removed.
2021-02-13fix error return value for cuseridRich Felker-2/+3
the historical function was specified to return an empty string in the caller-provided buffer, not a null pointer, to indicate error when the argument is non-null. only when the argument is null should it return a null pointer on error.
2021-02-13fix misuse of getpwuid_r in cuseridRich Felker-1/+2
getpwuid_r can return 0 but without a result in the case where there was no error but no record exists. in that case cuserid was treating it as success and copying junk out of pw.pw_name to the output buffer.
2021-02-13cuserid: don't return truncated resultsRich Felker-1/+5
checking the length also drops the need to pull in snprintf.
2021-02-13cuserid: support invocation with a null pointer argumentSören Tempel-0/+2
this function was removed from the standard in 2001 but appeared in SUSv2 with an obligation to support calls with a null pointer argument, using a static buffer.
2020-11-29fix segfault in lutimes when tv argument is NULLÉrico Rolim-5/+7
calling lutimes with tv=0 is valid if the application wants to set the timestamps to the current time. this commit makes it so the timespec struct is populated with values from tv only if tv != 0 and calls utimensat with times=0 if tv == 0.
2018-09-12remove spurious inclusion of libc.h for LFS64 ABI aliasesRich Felker-2/+1
the LFS64 macro was not self-documenting and barely saved any characters. simply use weak_alias directly so that it's clear what's being done, and doesn't depend on a header to provide a strange macro.
2018-09-12reduce spurious inclusion of libc.hRich Felker-2/+0
libc.h was intended to be a header for access to global libc state and related interfaces, but ended up included all over the place because it was the way to get the weak_alias macro. most of the inclusions removed here are places where weak_alias was needed. a few were recently introduced for hidden. some go all the way back to when libc.h defined CANCELPT_BEGIN and _END, and all (wrongly implemented) cancellation points had to include it. remaining spurious users are mostly callers of the LOCK/UNLOCK macros and files that use the LFS64 macro to define the awful *64 aliases. in a few places, new inclusion of libc.h is added because several internal headers no longer implicitly include libc.h. declarations for __lockfile and __unlockfile are moved from libc.h to stdio_impl.h so that the latter does not need libc.h. putting them in libc.h made no sense at all, since the macros in stdio_impl.h are needed to use them correctly anyway.
2018-09-12remove or make static various unused __-prefixed symbolsRich Felker-1/+1
2018-09-12fix issues from public functions defined without declaration visibleRich Felker-0/+1
policy is that all public functions which have a public declaration should be defined in a context where that public declaration is visible, to avoid preventable type mismatches. an audit performed using GCC's -Wmissing-declarations turned up the violations corrected here. in some cases the public header had not been included; in others, a feature test macro needed to make the declaration visible had been omitted. in the case of gethostent and getnetent, the omission seems to have been intentional, as a hack to admit a single stub definition for both functions. this kind of hack is no longer acceptable; it's UB and would not fly with LTO or advanced toolchains. the hack is undone to make exposure of the declarations possible.
2017-03-14fix one-byte overflow in legacy getpass functionRich Felker-1/+1
if the length of the input was equal to the buffer size (128), a fixed value of zero was written one byte past the end of the static buffer.
2016-08-30getdtablesize: fix returning hard instead of soft rlimitOlivier Brunel-1/+1
This makes the result consistent with sysconf(_SC_OPEN_MAX).
2016-01-28add errno setting to stub utmpxname functionRich Felker-0/+2
2016-01-28legacy/utmpx: Add utmp{,x}name stubsKylie McClain-0/+7
2015-05-06fix futimes legacy function with null tv pointerRich Felker-0/+1
a null pointer is valid here and indicates that the current time should be used. based on patch by Felix Janda, simplified.
2015-02-25getloadavg: use sysinfo() instead of /proc/loadavgAlexander Monakov-11/+7
Based on a patch by Szabolcs Nagy.
2014-07-06fix multiple issues in legacy function getpassRich Felker-5/+6
1. failure to output a newline after the password is read 2. fd leaks via missing FD_CLOEXEC 3. fd leaks via failure-to-close when any of the standard streams are closed at the time of the call 4. wrongful fallback to use of stdin when opening /dev/tty fails 5. wrongful use of stderr rather than /dev/tty for prompt 6. failure to report error reading password
2013-12-12include cleanups: remove unused headers and add feature test macrosSzabolcs Nagy-4/+8
2013-11-21add legacy getloadavg apiSzabolcs Nagy-0/+18
2013-09-15support configurable page size on mips, powerpc and microblazeSzabolcs Nagy-2/+2
PAGE_SIZE was hardcoded to 4096, which is historically what most systems use, but on several archs it is a kernel config parameter, user space can only know it at execution time from the aux vector. PAGE_SIZE and PAGESIZE are not defined on archs where page size is a runtime parameter, applications should use sysconf(_SC_PAGE_SIZE) to query it. Internally libc code defines PAGE_SIZE to libc.page_size, which is set to aux[AT_PAGESZ] in __init_libc and early in __dynlink as well. (Note that libc.page_size can be accessed without GOT, ie. before relocations are done) Some fpathconf settings are hardcoded to 4096, these should be actually queried from the filesystem using statfs.
2013-08-21unbreak vwarn: print ": " before errno messageRich Felker-2/+5
patch by Strake. this seems to be a regression caused by fixing the behavior of perror("") to match perror(0) at some point in the past.
2013-08-03collapse euidaccess to a call to faccessatRich Felker-9/+1
it turns out Linux is buggy for faccessat, just like fchmodat: the kernel does not actually take a flags argument. so we're going to have to emulate it there.
2013-08-03add legacy euidaccess function and eaccess alias for itRich Felker-0/+18
this is mainly for ABI compat purposes.
2013-08-02add legacy function vallocRich Felker-0/+8
it was already declared in stdlib.h, but not defined anywhere.
2013-05-18make err.h functions print __prognameRich Felker-0/+4
patch by Strake. previously is was not feasible to duplicate this functionality of the functions these were modeled on, since argv[0] was not saved at program startup, but now that it's available it's easy to use.
2012-09-29more close-on-exec fixes, mostly using new "e" flag to fopenRich Felker-1/+1
2012-09-07cleanup src/linux and src/misc trees, etc.Rich Felker-0/+302
previously, it was pretty much random which one of these trees a given function appeared in. they have now been organized into: src/linux: non-POSIX linux syscalls (possibly shard with other nixen) src/legacy: various obsolete/legacy functions, mostly wrappers src/misc: still mostly uncategorized; some misc POSIX, some nonstd src/crypt: crypt hash functions further cleanup will be done later.