aboutsummaryrefslogtreecommitdiff
path: root/src/stdio/setbuffer.c (unfollow)
Commit message (Collapse)AuthorFilesLines
2013-08-08sys/personality.h: add missing C++ compatrofl0r1-0/+7
2013-08-08sys/personality.h: add missing macrosrofl0r1-0/+33
2013-08-07add Big5 charset support to iconvRich Felker2-0/+1066
at this point, it is just the common base charset equivalent to Windows CP 950, with no further extensions. HKSCS and possibly other supersets will be added later. other aliases may need to be added too.
2013-08-07make fcvt decimal point location for zero make more senseRich Felker1-1/+1
the (obsolete) standard allows either 0 or 1 for the decimal point location in this case, but since the number of zero digits returned in the output string (in this implementation) is one more than the number of digits the caller requested, it makes sense for the decimal point to be logically "after" the first digit. in a sense, this change goes with the previous commit which fixed the value of the decimal point location for non-zero inputs.
2013-08-07fix ecvt/fcvt decimal point position outputRich Felker1-1/+1
these functions are obsolete and have no modern standard. the text in SUSv2 is highly ambiguous, specifying that "negative means to the left of the returned digits", which suggested to me that 0 would mean to the right of the first digit. however, this does not agree with historic practice, and the Linux man pages are more clear, specifying that a negative value means "that the decimal point is to the left of the start of the string" (in which case, 0 would mean the start of the string, in accordance with historic practice).
2013-08-05iconv support for legacy Korean encodingsRich Felker2-0/+678
like for other character sets, stateful iso-2022 form is not supported yet but everything else should work. all charset aliases are treated the same, as Windows codepage 949, because reportedly the EUC-KR charset name is in widespread (mis?)usage in email and on the web for data which actually uses the extended characters outside the standard 93x94 grid. this could easily be changed if desired. the principle of this converter for handling the giant bulk of rare Hangul syllables outside of the standard KS X 1001 93x94 grid is the same as the GB18030 converter's treatment of non-explicitly-coded Unicode codepoints: sequences in the extension range are mapped to an integer index N, and the converter explicitly computes the Nth Hangul syllable not explicitly encoded in the character map. empirically, this requires at most 7 passes over the grid. this approach reduces the table size required for Korean legacy encodings from roughly 44k to 17k and should have minimal performance impact on real-world text conversions since the "slow" characters are rare. where it does have impact, the cost is merely a large constant time factor.
2013-08-03have new timer threads unblock their own SIGTIMERRich Felker1-2/+2
unblocking it in the pthread_once init function is not sufficient, since multiple threads, some of them with the signal blocked, could already exist before this is called; timers started from such threads would be non-functional.
2013-08-03add system for resetting TLS to initial valuesRich Felker4-14/+56
this is needed for reused threads in the SIGEV_THREAD timer notification system, and could be reused elsewhere in the future if needed, though it should be refactored for such use. for static linking, __init_tls.c is simply modified to export the TLS info in a structure with external linkage, rather than using statics. this perhaps makes the code more clear, since the statics were poorly named for statics. the new __reset_tls.c is only linked if it is used. for dynamic linking, the code is in dynlink.c. sharing code with __copy_tls is not practical since __reset_tls must also re-zero thread-local bss.
2013-08-03fix multiple bugs in SIGEV_THREAD timersRich Felker6-22/+36
1. the thread result field was reused for storing a kernel timer id, but would be overwritten if the application code exited or cancelled the thread. 2. low pointer values were used as the indicator that the timer id is a kernel timer id rather than a thread id. this is not portable, as mmap may return low pointers on some conditions. instead, use the fact that pointers must be aligned and kernel timer ids must be non-negative to map pointers into the negative integer space. 3. signals were not blocked until after the timer thread started, so a race condition could allow a signal handler to run in the timer thread when it's not supposed to exist. this is mainly problematic if the calling thread was the only thread where the signal was unblocked and the signal handler assumes it runs in that thread.
2013-08-03add some new linux AT_* flagsRich Felker1-0/+2
2013-08-03fix faccessat to support AT_EACCESS flagRich Felker1-1/+46
this is another case of the kernel syscall failing to support flags where it needs to, leading to horrible workarounds in userspace. this time the workaround requires changing uid/gid, and that's not safe to do in the current process. in the worst case, kernel resource limits might prevent recovering the original values, and then there would be no way to safely return. so, use the safe but horribly inefficient alternative: forking. clone is used instead of fork to suppress signals from the child. fortunately this worst-case code is only needed when effective and real ids mismatch, which mainly happens in suid programs.
2013-08-03collapse euidaccess to a call to faccessatRich Felker1-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 prototypes for euidaccess/eaccessRich Felker1-0/+2