summaryrefslogtreecommitdiffstats
path: root/lib/libc/stdio/vfprintf.c
Commit message (Collapse)AuthorAgeFilesLines
* Implement __hdtoa() and __hldtoa() and enable printf() support for %adas2004-01-181-5/+2
| | | | and %A, which print floating-point numbers in hexadecimal.
* Fix some bugs affecting the %a and %A format specifiers. Sincedas2004-01-181-6/+16
| | | | | | | | | | | | | these are not fully implemented and ifdef'd out, the bugs have never manifested themselves. Specifically: - Fix a memory leak in the case where %a follows another floating-point format. - Make the %a/%A code behave like %e/%E with respect to precision. - It is no longer valid to assume that '-' and '0x' are mutually exclusive. - Address other minor issues.
* Pass NULL instead of a pointer to a zeroed mbstate_t object.tjr2003-11-051-9/+4
|
* %E-like %g and %G conversions should remove trailing zeroes unlessdas2003-04-191-0/+7
| | | | | | | | the # flag is present. Implement this behavior and add a comment describing it. Noticed by: Enache Adrian <enache@rdslink.ro> Pointy hat to: das
* Fix a bug where printf was erroneously printing a decimal point fordas2003-04-141-8/+10
| | | | | | | | | %f and sufficiently short %g specifiers where the precision was explicitly zero, no '#' flag was specified, and the floating point argument was > 0 and <= 0.5. While at it, add some comments to better explain the relevant bits of code. Noticed by: Christoph Kukulies <kuku@physik.rwth-aachen.de>
* __wcsconv(): free(convbuf) before returning NULLache2003-04-071-2/+4
|
* Today just isn't my day. Remove some old commented out code that snuckdas2003-04-071-1/+1
| | | | | | into the last commit. Noticed by: mike
* - %e conversions with precision 0 should not cause a decimal point todas2003-04-071-18/+22
| | | | | | | | be printed. - Fix %f conversions where the number of significant digits is < expt. This would be a one-line change were it not for thousands separators. Noticed by tjr. - Remove some unnecessary code in the parsing of precision specifiers.
* Rework the floating point code in printf(). Significant changes:das2003-04-051-151/+189
| | | | | | | | | | | | | | | | | | - We used to round long double arguments to double. Now we print them properly. - Bugs involving '%F', corner cases of '#' and 'g' format specifiers, and the '.*' precision specifier have been fixed. - Added support for the "'" specifier to print thousands' grouping characters in a locale-dependent manner. - Implement the __vfprintf() side of hexadecimal floating point support. All that is still needed is a routine to convert the mantissa to hex digits one nibble at a time in the style of ultoa(). Reviewed by: silence on standards@
* Correct some buffer sizes.das2003-04-051-10/+16
| | | | | | | | | | - __vfprintf()'s 'buf' has never been used for floating point, so don't define it in terms of (incorrect) constants describing floating point numbers. The actual size needed depends on sizeof(uintmax_t) and locale details, so I slightly overestimated. - We don't need a 308-character buffer to store the string "308". With long doubles and %a we need more than three characters, though.
* Kludge around a bug that results from printf() assuming thatdas2003-03-141-1/+1
| | | | | | | | | dtoa() is buggy. The bug would cause incorrect output to be generated when format strings such as '%5.0f' were used with nonzero numbers whose magnitude is less than 1. Reported by: df(1) by way of periodic(8) Reviewed by: mike
* Replace our ancient dtoa/strtod implementation with the gdtoadas2003-03-121-9/+10
| | | | | | | | | | | | | | | | | | package, a more recent, generalized set of routines. Among the changes: - Declare strtof() and strtold() in stdlib.h. - Add glue to libc to support these routines for all kinds of ``long double''. - Update printf() to reflect the fact that dtoa works slightly differently now. As soon as I see that nothing has blown up, I will kill src/lib/libc/stdlib/strtod.c. Soon printf() will be able to use the new routines to output long doubles without loss of precision, but numerous bugs in the existing code must be addressed first. Reviewed by: bde (briefly), mike (mentor), obrien
* Set the error bit on the stream if an encoding error occurs. Improvetjr2002-10-161-2/+6
| | | | handling of multibyte sequences representing null wide characters.
* Add support for the XSI %C and %S formats, which are the same as %lctjr2002-10-161-0/+12
| | | | and %ls.
* Use the new va_copy macro to copy variable argument lists instead oftjr2002-09-241-1/+1
| | | | | | | | assignment. This is needed on powerpc but is also more correct for the other ports. Submitted by: grehan Tested on: alpha, i386, sparc64
* Implement the %ls and %lc conversions for printing wide character stringstjr2002-09-191-6/+110
| | | | | | and wide characters. These were already documented in the manual page, with an entry mentioning that they were not implemented yet. The XSI %S and %C synoyms have not been added.
* Convert eight space indents to tabs in the "*" format handling code.tjr2002-09-161-43/+43
|
* Style: One space between "restrict" qualifier and "*".tjr2002-09-061-1/+1
|
* Print a '-' sign for negative zero. Tested withschweikh2002-08-271-7/+2
| | | | | | | | | | | | | | | | | | | | | #include <stdio.h> int main(void) { printf("%+f\n", -0.0); printf("%+f\n", +0.0); printf("%+f\n", 0.0); return 0; } to output -0.000000 +0.000000 +0.000000 PR: bin/41823 Submitted by: GOTO Kentaro <gotoken@notwork.org> Liked by: bde MFC after: 3 weeks
* - For compliance with IEEE Std 1003.1-2001, add the 'restrict'robert2002-08-151-1/+2
| | | | | | qualifier to function prototypes and definitions where appropriate using the '__restrict' macro. - Update the manual page.
* Basic support for wide character I/O: getwc(), fgetwc(), getwchar(),tjr2002-08-131-0/+1
| | | | putwc(), fputwc(), putwchar(), ungetwc(), fwide().
* Assume __STDC__, remove non-__STDC__ code.alfred2002-05-281-4/+0
| | | | Submitted by: keramida
* Fix the style of the SCM ID's.obrien2002-03-221-4/+2
| | | | I believe have made all of libc .c's as consistent as possible.
* Remove multi-line __P() usage.obrien2002-03-221-5/+5
|
* Remove __P() usage.obrien2002-03-211-6/+6
|
* Remove 'register' keyword.obrien2002-03-211-2/+2
|
* Fix some style bugsphantom2001-12-171-15/+18
| | | | Prompted by: mike
* Also fix cases when thousands separator should be put before number. Forphantom2001-12-131-2/+4
| | | | | example before for grouping sequence "\003\003" number 123456 was formated as ",123,456", now "123,456".
* Respect locale while handling of \' flag.phantom2001-12-131-22/+63
| | | | | | | | | | In original version grouping was hardcoded. It assumed that thousands separator should be inserted to separate each 3 numbers. I.e. grouping string "\003" was assumed for all cases. In correct case (per POSIX) vfprintf should respect locale defined non-monetary (LC_NUMERIC category) grouping sequence. Also simplify thousands_sep handling.
* * localeconv() usage is not FLOATING_POINT specific anymore (due to "'" flagphantom2001-12-071-3/+3
| | | | | addition) so move locale.h inclusion out of FLOATING_POINT ifdef's. * add more comments
* Implement several of the c99 updates to printf(3):fenner2001-11-301-115/+233
| | | | | | | | | | | | | | | | - New length modifiers: hh, j, t, z. - New flag: '. Note that %'f is not yet implemented. - Use "inf"/"nan" for efg formats, "INF"/"NAN" for EFG formats. - Implemented %q in terms of %ll; if "quad_t" is not "long long" %q will break. Still to do: - %C, %S, %lc, %ls (wide character support) - %'f (thousands in integer portion of %f) - %a/%A (exact hex representation of floating-point numbers) Garrett Wollman wrote the first version of the vfprintf.c update; Mike Barcroft wrote the first version of the printf.3 changes.
* Fixed style bugs in previous commit.bde2001-10-151-15/+15
|
* Make this compile on ia64.dfr2001-10-141-25/+46
|
* Mark some functions as __printflike() and/or taking const char * argumentskris2001-08-201-1/+1
| | | | | | instead of char *. MFC after: 2 weeks
* Remove freelists managed by Balloc/Bfree.tegge2001-02-151-5/+18
| | | | | | | | Change __dtoa to not free the string it allocated the previous time it was called. The caller now frees the string after usage if appropiate. PR: 15070 Reviewed by: deischen
* Take decimal point from locale instead of hardcoded '.' (SUSv2)ache2001-02-101-9/+10
|
* Backout previous commit. Use of spinlocks was not approved.tegge2001-02-091-18/+5
| | | | PR: 15070
* Protect freelists managed by Balloc/Bfree with a spinlock.tegge2001-02-081-5/+18
| | | | | | | Change __dtoa to not free the string it allocated the previous time it was called. The caller now frees the string after usage if appropiate. PR: 15070
* Remove _THREAD_SAFE and make libc thread-safe by default bydeischen2001-01-241-62/+49
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | adding (weak definitions to) stubs for some of the pthread functions. If the threads library is linked in, the real pthread functions will pulled in. Use the following convention for system calls wrapped by the threads library: __sys_foo - actual system call _foo - weak definition to __sys_foo foo - weak definition to __sys_foo Change all libc uses of system calls wrapped by the threads library from foo to _foo. In order to define the prototypes for _foo(), we introduce namespace.h and un-namespace.h (suggested by bde). All files that need to reference these system calls, should include namespace.h before any standard includes, then include un-namespace.h after the standard includes and before any local includes. <db.h> is an exception and shouldn't be included in between namespace.h and un-namespace.h namespace.h will define foo to _foo, and un-namespace.h will undefine foo. Try to eliminate some of the recursive calls to MT-safe functions in libc/stdio in preparation for adding a mutex to FILE. We have recursive mutexes, but would like to avoid using them if possible. Remove uneeded includes of <errno.h> from a few files. Add $FreeBSD$ to a few files in order to pass commitprep. Approved by: -arch
* Fix bugs in the handling of > 8 positional arguments:archie2001-01-061-14/+18
| | | | | | | | - The stack was getting smashed by __grow_type_table() - reallocf() was being called with the wrong pointer - The maximum argument number was being incorrectly computed PR: misc/23521
* $Id$ -> $FreeBSD$peter1999-08-281-1/+1
|
* Add support for long long modifier (e.g. %llx, %lld).dfr1999-03-111-3/+9
| | | | Reviewed by: bde
* Replace memory leaking instances of realloc with non-leaking reallocf.imp1998-09-161-2/+2
| | | | | | | | | | | In some cases replace if (a == null) a = malloc(x); else a = realloc(a, x); with simple reallocf(a, x). Per ANSI-C, this is guaranteed to be the same thing. I've been running these on my system here w/o ill effects for some time. However, the CTM-express is at part 6 of 34 for the CAM changes, so I've not been able to do a build world with the CAM in the tree with these changes. Shouldn't impact anything, but...
* Don't assign the va_list variable 'ap' directly to the argtable becausejb1998-05-081-19/+18
| | | | | va_list is not a pointer on alpha. Instead, use the va_arg() macro to return the address that is stored in the argtable.
* Add FILE locking stubs for libc.jb1998-04-111-17/+6
| | | | | | | | Change the FILE locking to support kernel threads when linked with libpthread (which you haven't see yet). This requires that libc become thread-safe and thread-aware, testing __isthreaded before attempting to do lock/unlock calls. The impact on non-threaded programs is minor. This change works with libc_r, so it's the best compromise.
* size_t -> unsignedache1998-01-041-3/+3
| | | | | in arguments length INT_MAX overflow check Suggested-by: bde
* Add overflow checks: if output size becomes bigger than INT_MAX,ache1997-12-251-2/+13
| | | | just return EOF
* Return back to BSD snprintf semantics which recent C9x standard adoptsache1997-12-241-9/+5
| | | | | | | | | | instead of Singe Unix, thanx Bruce for explaining, I am not realize standards war was there. But now, fix n == 0 case to not return error and fix check for too big n. Things left to do: check for overflow in arguments.
* Fix snprintf(...%n...)ache1997-12-241-5/+9
| | | | | | to pass not more than buffer size to %n agrument, old variant always assume infinite buffer. %n is for actually transmitted characters, not for planned ones.
* Comment that long double is poorly implemented, not that it is unimplemented.bde1997-12-191-2/+3
|
OpenPOWER on IntegriCloud