On Tue, Mar 29, 2022 at 2:37 PM Tom Lane <t...@sss.pgh.pa.us> wrote: > Robert Haas <robertmh...@gmail.com> writes: > > On Tue, Mar 29, 2022 at 2:17 PM Tom Lane <t...@sss.pgh.pa.us> wrote: > >> it's some random algorithm that they probably feel at liberty > >> to change. > > > I guess that characterization surprises me. The man page for > > getopt_long() says this, and has for a long time at least on systems > > I've used: > > Yeah, they say they follow the POSIX spec when you set POSIXLY_CORRECT. > What they don't spell out in any detail is what they do when you don't. > We know that it involves rearranging the argv[] array behind the > application's back, but not what the rules are for doing that. In > particular, they must have some undocumented and probably not very safe > method for deciding which arguments are neither switches nor switch > arguments.
I mean, I think of an option as something that starts with '-'. The documentation contains a caveat that says: "The special argument ‘--’ forces in all cases the end of option scanning." So I think I would expect it just looks for arguments starting with '-' that do not follow an argument that is exactly "--". <looks around for the source code> https://github.com/gcc-mirror/gcc/blob/master/libiberty/getopt.c If an element of ARGV starts with '-', and is not exactly "-" or "--", then it is an option element. The characters of this element (aside from the initial '-') are option characters. If `getopt' is called repeatedly, it returns successively each of the option characters from each of the option elements. OK - so I was off slightly. Either "-" or "--" terminates the options list. Apart from that anything starting with "-" is an option. I think you're overestimating the level of mystery that's present here, as well as the likelihood that the rules could ever be changed. -- Robert Haas EDB: http://www.enterprisedb.com