Re: add non-option reordering to in-tree getopt_long

Noah Misch <noah@leadboat.com>

From: Noah Misch <noah@leadboat.com>
To: Nathan Bossart <nathandbossart@gmail.com>
Cc: Michael Paquier <michael@paquier.xyz>, Kyotaro Horiguchi <horikyota.ntt@gmail.com>, pgsql-hackers@postgresql.org
Date: 2023-06-14T22:11:54Z
Lists: pgsql-hackers
On Wed, Jun 14, 2023 at 02:28:16PM -0700, Nathan Bossart wrote:
> On Tue, Jun 13, 2023 at 05:17:37PM -0700, Noah Misch wrote:
> > If you have a test program to be run, I can run it on AIX.
> 
> Thanks.  The patch above [0] adjusts 040_createuser.pl to test modifying
> argv, so that's one test program.  And here's a few lines for reversing
> argv:
> 
> 	#include <stdio.h>
> 
> 	int
> 	main(int argc, char *argv[])
> 	{
> 		for (int i = 0; i < argc / 2; i++)
> 		{
> 			char	   *tmp = argv[i];
> 
> 			argv[i] = argv[argc - i - 1];
> 			argv[argc - i - 1] = tmp;
> 		}
> 
> 		for (int i = 0; i < argc; i++)
> 			printf("%s ", argv[i]);
> 		printf("\n");
> 	}

Here's some output from this program (on AIX 7.1, same output when compiled
32-bit or 64-bit):

$ ./a.out a b c d e f
f e d c b a ./a.out

Interesting discussion here, too:
https://github.com/libuv/libuv/pull/1187



Commits

  1. Simplify option handling in pg_ctl.

  2. Teach in-tree getopt_long() to move non-options to the end of argv.