aboutsummaryrefslogtreecommitdiff
path: root/usr.bin/printf/printf.c
Commit message (Collapse)AuthorAgeFilesLines
* MFC r244407,r244409:Eitan Adler2013-02-031-1/+1
| | | | | | | | | | | | | POSIX requires that non-existent or null arguments be treated as if a zero argument were supplied. Add regression tests to catch this case as well. PR: bin/174521 Approved by: cperciva (mentor, implicit) Notes: svn path=/stable/9/; revision=246277
* MFC: r230027Pedro F. Giffuni2012-02-031-18/+18
| | | | | | | | | | | Style cleanups for printf. PR: bin/152934 Approved by: jhb (mentor) Obtained from: Illumos Notes: svn path=/stable/9/; revision=230961
* printf: Allow multibyte characters for '<char> form, avoid negative codes.Jilles Tjoelker2011-05-281-4/+18
| | | | | | | | | | | | | | | | Examples: LC_ALL=en_US.UTF-8 printf '%d\n' $(printf \'\\303\\244) LC_ALL=en_US.ISO8859-1 printf '%d\n' $(printf \'\\344) Both of these should print 228. Like some other shells, incomplete or invalid multibyte characters yield the value of the first byte without a warning. Note that there is no general way to go back from the character code to the character. Notes: svn path=/head/; revision=222418
* printf: Note that this is used both as a normal program and a shell builtin.Jilles Tjoelker2011-03-011-0/+4
| | | | Notes: svn path=/head/; revision=219153
* printf: Do not use sh memory functions in sh builtin.Jilles Tjoelker2010-12-291-13/+0
| | | | | | | | | These functions throw exceptions if they fail, possibly causing memory leaks. The normal out-of-memory handling suffices. The INTOFF around almost all of printf prevents memory leaks due to SIGINT. Notes: svn path=/head/; revision=216809
* sh: Make warnings in the printf builtin non-fatal, like in the program.Jilles Tjoelker2010-12-201-17/+13
| | | | | | | | | | | The #define for warnx now behaves much like the libc function (except that it uses sh command name and output). Also, it now uses C99 __VA_ARGS__ so there is no need for three different macros for 0, 1 or 2 parameters. Notes: svn path=/head/; revision=216606
* Revert r216423 per request from Jilles.Xin LI2010-12-141-10/+10
| | | | | | | | | | The new behavior prevents us from being able to bail out explicitly on unknown options that we have not implemented. BASH for instance have introduced a '-v' for printf(1) builtin and it seems to be bad to pretend that we supported it and have a script break silently. Notes: svn path=/head/; revision=216447
* When printf is being used as a sh(1) builtin, it can not callXin LI2010-12-141-3/+1
| | | | | | | | | | exit(3) as pointed out by jilles@ so revert to using return(), also change the return value back to 1 as requested by bde@. This is logically a revert of revision 216422. Notes: svn path=/head/; revision=216439
* We work on ctype's and not only on numbers so set LC_ALL instead ofXin LI2010-12-141-1/+1
| | | | | | | | | | | LC_NUMERIC. PR: bin/152934 Submitted by: Pedro F. Giffuni <giffunip tutopia.com> Obtained from: Illumos Notes: svn path=/head/; revision=216424
* IEEE Std 1003.1-2008, Section 1.4, Utility Description Defaults saysXin LI2010-12-141-10/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | that when the options section is listed as "None", utility shall recognize "--" as a first argument to be discarded. This implementation is largely based on OpenBSD implementation but we do slightly differently: a) We skip argv[0] as the first step; b) We test whether the next argument is "--" and ignore it. With this change one will get: %printf usage: printf format [arguments ...] %printf -v -v%printf -- -v -v% %printf -- usage: printf format [arguments ...] Which matches the behavior observed on a Debian system but different from the Illumos change. Notes: svn path=/head/; revision=216423
* Make use of EX_USAGE for usage().Xin LI2010-12-141-2/+4
| | | | Notes: svn path=/head/; revision=216422
* The only caller of mknum() provides a char instead of an int, so make itXin LI2010-12-131-2/+2
| | | | | | | | | | | match the definition. PR: bin/152934 Submitted by: Pedro F. Giffuni <giffunip tutopia.com> Obtained from: Illumos Notes: svn path=/head/; revision=216418
* Move locale.h include to the beginning header section as pointed out byXin LI2010-12-131-3/+2
| | | | | | | | | style(9) Submitted by: Pedro F. Giffuni <giffunip tutopia.com> Notes: svn path=/head/; revision=216417
* Remove the advertising clause from UCB copyrighted files in usr.bin. ThisJoel Dahl2010-12-111-4/+0
| | | | | | | | | | | | is in accordance with the information provided at ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change Also add $FreeBSD$ to a few files to keep svn happy. Discussed with: imp, rwatson Notes: svn path=/head/; revision=216370
* printf: Remove support for building as a csh builtin.Jilles Tjoelker2010-12-081-8/+2
| | | | | | | | | | | | | The #define BUILTIN was for building as a csh (not tcsh) builtin. Given that csh was replaced by tcsh years ago there is no point in keeping this. The #define SHELL is for building as an sh builtin and is in active use. This commit does not change the /bin/sh and /usr/bin/printf binaries. Notes: svn path=/head/; revision=216310
* sh: Add printf builtin.Jilles Tjoelker2010-11-191-6/+24
| | | | | | | | | | | | | | | | | | | | This was removed in 2001 but I think it is appropriate to add it back: * I do not want to encourage people to write fragile and non-portable echo commands by making printf much slower than echo. * Recent versions of Autoconf use it a lot. * Almost no software still wants to support systems that do not have printf(1) at all. * In many other shells printf is already a builtin. Side effect: printf is now always the builtin version (which behaves identically to /usr/bin/printf) and cannot be overridden via PATH (except via the undocumented %builtin mechanism). Code size increases about 5K on i386. Embedded folks might want to replace /usr/bin/printf with a hard link to /usr/bin/alias. Notes: svn path=/head/; revision=215520
* POSIX says that octal escapes have the format \ddd in the format string,David Schultz2008-08-021-1/+2
| | | | | | | | | | | | but \0ddd in a %b argument, with a length restriction of 3 octal digits in either case. This seems silly, but it needs to be right so it's possible to write an octal escape followed by an ordinary digit. Solaris printf(1) and GNU printf(1) also behave this way. Example: "printf '\0752'" now produces "=2" instead of garbage. Notes: svn path=/head/; revision=181153
* Prefer {u,}intmax_t over the deprecated {u_,}quad_t.Stefan Farfeleder2005-08-051-17/+18
| | | | Notes: svn path=/head/; revision=148721
* Sync program's usage() with manpage's SYNOPSIS.Ruslan Ermilov2005-05-211-1/+1
| | | | Notes: svn path=/head/; revision=146466
* Handle null characters in the format string. A \0 in the argument passed to %bStefan Farfeleder2005-04-141-7/+13
| | | | | | | still results in trucation but this is be much harder to fix. Notes: svn path=/head/; revision=145078
* No reason to write \a and \v as octal escape sequences.Stefan Farfeleder2005-04-141-2/+2
| | | | Notes: svn path=/head/; revision=145074
* - Move parts of the long main() function into a new function doformat().Stefan Farfeleder2005-04-141-153/+160
| | | | | | | - Rewrite the loop in main() to be more understandable. Notes: svn path=/head/; revision=145061
* Assign 0.0 to the variable passed to getfloating() if the argument is missing.Stefan Farfeleder2005-04-131-1/+3
| | | | | | | MFC after: 1 week Notes: svn path=/head/; revision=145027
* Replace buggy for-loops to skip certain character with strspn(). If *fmt wasStefan Farfeleder2005-04-111-3/+3
| | | | | | | | | | '\0' (eg in the invocation 'printf %'), the for-loop would miss the terminating null character. MFC after: 1 week Notes: svn path=/head/; revision=144902
* Support the L modifier for floating-point values as an extension.David Schultz2005-03-211-6/+34
| | | | | | | | | When L is omitted, double precision is used, so printf(1) gives reproducable results. When L is specified, long double precision is used, which may improve precision, depending on the machine. Notes: svn path=/head/; revision=143906
* Allow %' to be used as a format flag by printf(1). This makes itGiorgos Keramidas2004-09-241-1/+1
| | | | | | | | | | | | | possible to print the thousands separator in the locale setups that have one, by something like this: $ env -i LC_NUMERIC=en_US.ISO8859-1 ./printf "%'0.2f\n" 12345 12,345.00 Reviewed by: das Notes: svn path=/head/; revision=135751
* Enable support for the %a, %A, and %F format specifiers.David Schultz2004-06-051-1/+4
| | | | Notes: svn path=/head/; revision=130115
* Make it possible for the %[eEfgG] formats to not result in an errorColin Percival2004-03-071-1/+1
| | | | | | | | | | | | | being reported by /usr/bin/printf. This bug has been around for 22 months... either nobody uses printf with floating-point values, or people are forgetting to check their return codes. Approved by: rwatson (mentor) Notes: svn path=/head/; revision=126729
* ANSIify function definitions.David Malone2002-09-041-25/+14
| | | | | | | | | | | | Add some constness to avoid some warnings. Remove use register keyword. Deal with missing/unneeded extern/prototypes. Some minor type changes/casts to avoid warnings. Reviewed by: md5 Notes: svn path=/head/; revision=102944
* Fix duplicate % in %b format introduced in rev 1.22.Tim J. Robbins2002-06-191-5/+6
| | | | Notes: svn path=/head/; revision=98426
* Let printf(1) tell the difference between zero width/precision andTim J. Robbins2002-06-191-7/+9
| | | | | | | | | | | unspecified width/precision. PR: 39116 Submitted by: Egil Brendsdal <egilb@ife.no> MFC after: 1 week Notes: svn path=/head/; revision=98424
* Allow format strings containing "%%" to be reused.Tim J. Robbins2002-06-191-2/+2
| | | | | | | | | PR: 39116 Submitted by: Egil Brendsdal <egilb@ife.no> MFC after: 1 week Notes: svn path=/head/; revision=98420
* Allow `%' to be written out with an octal escape (\45 or \045).Tim J. Robbins2002-06-191-1/+5
| | | | | | | | | PR: 39116 Submitted by: Egil Brendsdal <egilb@ife.no> MFC after: 1 week Notes: svn path=/head/; revision=98419
* Handle numbers larger than QUAD_MAX for unsigned conversions correctly.Tim J. Robbins2002-04-251-50/+96
| | | | | | | | | | | Exit with nonzero status if a conversion failed. Play nice if used as a shell builtin (currently disabled). Submitted by: bde (partially) Approved by: mike Notes: svn path=/head/; revision=95409
* - printf shouldn't bail out if a conversion fails, it should just keepJuli Mallett2002-04-231-37/+66
| | | | | | | | | | | | | | | | | | processing them. - \c escape to immediately stop output (similar to echo's \c) - \0NNN should be allowed for octal character escapes (instead of just \NNN) - %b conversion, which is like %s but interprets \n \t etc. inside the string is missing. And I may not be any poet, but in lieu of an in-tree regression test: ref5% ./printf '%s%b%b%c%s%d\n' 'PR' '\0072' '\t' '3' '56' 0x10 PR: 35616 Submitted by: tjr MFC after: 1 week Notes: svn path=/head/; revision=95300
* remove __PWarner Losh2002-03-221-9/+9
| | | | Notes: svn path=/head/; revision=92921
* Warns cleanups.David Malone2001-12-031-5/+5
| | | | Notes: svn path=/head/; revision=87298
* Localize it (LC_NUMERIC)Andrey A. Chernov2001-02-101-0/+7
| | | | Notes: svn path=/head/; revision=72304
* Fix printf(1) for cases where a long string with no format specifiers isBen Smithurst2000-12-211-4/+16
| | | | | | | | | followed by a %d (probably others too) format specifier. Reviewed by: audit Notes: svn path=/head/; revision=70256
* When we have both a rcsid and sccsid, ifdef 0 the sccsid. ThisWarner Losh2000-09-041-0/+2
| | | | | | | | appears to be the standard FreeBSD way to do this. style(9) is silent about this, however. Notes: svn path=/head/; revision=65429
* Extend to deal with 64 bit numeric arguments.Stefan Eßer2000-07-101-14/+17
| | | | Notes: svn path=/head/; revision=62928
* Remove redundat extern declarationMartin Cracauer2000-04-201-1/+2
| | | | Notes: svn path=/head/; revision=59435
* Fixed warnx format errors in printf and csh, and snprintf format errorsBruce Evans1998-12-071-7/+11
| | | | | | | | | in sh, by using separate macros for the 1, 2 and 3-arg calls to warnx. (The 3-arg warnx macro in sh/bltin/bltin.h used to require bogus dummy args.) Notes: svn path=/head/; revision=41582
* Back out revision 1.10. It broke the build of sh, which compilesJohn Polstra1997-11-181-4/+5
| | | | | | | this file with warnx() defined as a macro. Notes: svn path=/head/; revision=31277
* Fix: too many arguments for format string in 4 calls to warnx().John Polstra1997-11-181-5/+4
| | | | Notes: svn path=/head/; revision=31224
* #include <unistd.h> for getopt(3) call.Steve Price1997-08-071-0/+1
| | | | Notes: svn path=/head/; revision=27966
* compare return value from getopt against -1 rather than EOF, per the finalWarner Losh1997-03-291-1/+1
| | | | | | | posix standard on the topic. Notes: svn path=/head/; revision=24360
* -Wall cleaning.Steve Price1996-12-141-2/+2
| | | | Notes: svn path=/head/; revision=20409
* Remove annoying -Wall warning.Steve Price1996-10-061-1/+1
| | | | Notes: svn path=/head/; revision=18732
* When used as a shell builtin, this program decoded a subset of argumentsPeter Wemm1996-10-011-4/+9
| | | | | | | | | | | | | | known to printf(3) and then used printf() to format it... The only problem what the #define printf out1fmt. The code was behaving differently when run as a shell builtin since out1fmt() isn't printf(3). Simple hack. Print to a buffer and fputs (also #defined for sh) the result. This should fix the printf builtin problem in PR#1673, rather than leaving the call commented out. (printf.o was being statically linked in anyway, we might as well use it) Notes: svn path=/head/; revision=18613