svn commit: r212374 - head/usr.bin/printf

Bruce Evans brde at optusnet.com.au
Thu Sep 16 11:36:47 UTC 2010


On Thu, 16 Sep 2010, David O'Brien wrote:

> On Thu, Sep 09, 2010 at 12:51:11PM -0700, Juli Mallett wrote:
>> On Thu, Sep 9, 2010 at 12:27, David E. O'Brien <obrien at freebsd.org> wrote:
>>> Author: obrien
>>> Date: Thu Sep  9 19:27:40 2010
>>> New Revision: 212374
>>> URL: http://svn.freebsd.org/changeset/base/212374
>>>
>>> Log:
>>>  Note bug in trying to printf(1) things like: '-%s\n' "foo"
>>
>> Should we also add something like this note to every manual page for a
>> program that operates on files as command line arguments after options
>> w.r.t. operating on files whose names begin with '-'?
>
> No.  Because most programs have a synopsis like:
>
>    ls [-ABCFGHILPRSTUWZabcdfghiklmnopqrstuwx1] [-D format] [file ...]
>
> However, printf(1)'s is
>
> printf format [arguments ...]
>
> Which does not say it takes ANY command-line options.  Thus why should
> one expect to have to trick out any command-line arguments "--" as one
> would with 'grep -- --i *.c'?
>
> Is a sentence or two a burden to the man page vs. saving someone the time
> I spent trying to figure out why printf(1) kept throwing up errors?

WHat about the lesser burder on a character or two for putting -- in the
synopsis where it is more visible:

 	printf [--] format [arguments ...]

POSIX doesn't do this, and it doesn't seem to say anything about the
problem of a leading - in the format either.  Presumably its general
utilities specs require _all_ utilities to support "--".  I wonder if
there are any utilities that don't use getopt(3) and as a result aren't
POSIX conformant since they don't support "--" and also need to support
a first argument starting with "-" (which won't cause problems because
getopt() is not there to mess it up, but the POSIX-specified way of a
"--" before the arg won't work.  sleep(1) was such a utility until
recently -- FreeBSD hacked on it to remove its getopt(3) call, but
didn't remove its man page's claim of "is expected to be (1003.2) POSIX
compatible".  1003.2 is almost 20 years old now, so someone should know
if sleep(1) was actually compatible with it.

Bruce


More information about the svn-src-all mailing list