agora inbox for pgsql-hackers@postgresql.org  
help / color / mirror / Atom feed
[PATCH v3 2/7] Row pattern recognition patch (parse/analysis).
144+ messages / 2 participants
[nested] [flat]

* [PATCH v3 2/7] Row pattern recognition patch (parse/analysis).
@ 2023-07-26 10:49 Tatsuo Ishii <ishii@postgresql.org>
  0 siblings, 0 replies; 144+ messages in thread

From: Tatsuo Ishii @ 2023-07-26 10:49 UTC (permalink / raw)

---
 src/backend/parser/parse_agg.c    |   7 ++
 src/backend/parser/parse_clause.c | 190 +++++++++++++++++++++++++++++-
 src/backend/parser/parse_expr.c   |   4 +
 src/backend/parser/parse_func.c   |   3 +
 4 files changed, 203 insertions(+), 1 deletion(-)

diff --git a/src/backend/parser/parse_agg.c b/src/backend/parser/parse_agg.c
index 85cd47b7ae..aa7a1cee80 100644
--- a/src/backend/parser/parse_agg.c
+++ b/src/backend/parser/parse_agg.c
@@ -564,6 +564,10 @@ check_agglevels_and_constraints(ParseState *pstate, Node *expr)
 			errkind = true;
 			break;
 
+		case EXPR_KIND_RPR_DEFINE:
+			errkind = true;
+			break;
+
 			/*
 			 * There is intentionally no default: case here, so that the
 			 * compiler will warn if we add a new ParseExprKind without
@@ -953,6 +957,9 @@ transformWindowFuncCall(ParseState *pstate, WindowFunc *wfunc,
 		case EXPR_KIND_CYCLE_MARK:
 			errkind = true;
 			break;
+		case EXPR_KIND_RPR_DEFINE:
+			errkind = true;
+			break;
 
 			/*
 			 * There is intentionally no default: case here, so that the
diff --git a/src/backend/parser/parse_clause.c b/src/backend/parser/parse_clause.c
index 334b9b42bd..ea2decc579 100644
--- a/src/backend/parser/parse_clause.c
+++ b/src/backend/parser/parse_clause.c
@@ -100,7 +100,10 @@ static WindowClause *findWindowClause(List *wclist, const char *name);
 static Node *transformFrameOffset(ParseState *pstate, int frameOptions,
 								  Oid rangeopfamily, Oid rangeopcintype, Oid *inRangeFunc,
 								  Node *clause);
-
+static void  transformRPR(ParseState *pstate, WindowClause *wc, WindowDef *windef);
+static List *transformDefineClause(ParseState *pstate, WindowClause *wc, WindowDef *windef);
+static void transformPatternClause(ParseState *pstate, WindowClause *wc, WindowDef *windef);
+static List *transformMeasureClause(ParseState *pstate, WindowClause *wc, WindowDef *windef);
 
 /*
  * transformFromClause -
@@ -2950,6 +2953,10 @@ transformWindowDefinitions(ParseState *pstate,
 											 rangeopfamily, rangeopcintype,
 											 &wc->endInRangeFunc,
 											 windef->endOffset);
+
+		/* Process Row Pattern Recognition related clauses */
+		transformRPR(pstate, wc, windef);
+
 		wc->runCondition = NIL;
 		wc->winref = winref;
 
@@ -3815,3 +3822,184 @@ transformFrameOffset(ParseState *pstate, int frameOptions,
 
 	return node;
 }
+
+/*
+ * transformRPR
+ *		Process Row Pattern Recognition related clauses
+ */
+static void
+transformRPR(ParseState *pstate, WindowClause *wc, WindowDef *windef)
+{
+	/* Check Frame option. Frame must start at current row */
+
+	/*
+	 * Window definition exists?
+	 */
+	if (windef == NULL)
+		return;
+
+	/*
+	 * Row Pattern Common Syntax clause exists?
+	 */
+	if (windef->rpCommonSyntax == NULL)
+		return;
+
+	if ((wc->frameOptions & FRAMEOPTION_START_CURRENT_ROW) == 0)
+		ereport(ERROR,
+				(errcode(ERRCODE_SYNTAX_ERROR),
+				 errmsg("FRAME must start at current row when row patttern recognition is used")));
+
+	/* Transform AFTER MACH SKIP TO clause */
+	wc->rpSkipTo = windef->rpCommonSyntax->rpSkipTo;
+
+	/* Transform SEEK or INITIAL clause */
+	wc->initial = windef->rpCommonSyntax->initial;
+
+	/* Transform DEFINE clause into list of TargetEntry's */
+	wc->defineClause = transformDefineClause(pstate, wc, windef);
+
+	/* Check PATTERN clause and copy to patternClause */
+	transformPatternClause(pstate, wc, windef);
+
+	/* Transform MEASURE clause */
+	transformMeasureClause(pstate, wc, windef);
+}
+
+/*
+ * transformDefineClause Process DEFINE clause and transform ResTarget into
+ *		list of TargetEntry.
+ *
+ * XXX we only support column reference in row pattern definition search
+ * condition, e.g. "price". <row pattern definition variable name>.<column
+ * reference> is not supported, e.g. "A.price".
+ */
+static List *
+transformDefineClause(ParseState *pstate, WindowClause *wc, WindowDef *windef)
+{
+	ListCell	*lc;
+	ResTarget	*restarget, *r;
+	List		*restargets;
+
+
+	/*
+	 * If Row Definition Common Syntax exists, DEFINE clause must exist.
+	 * (the raw parser should have already checked it.)
+	 */
+	Assert(windef->rpCommonSyntax->rpDefs != NULL);
+
+	/*
+	 * Check for duplicate row pattern definition variables.  The standard
+	 * requires that no two row pattern definition variable names shall be
+	 * equivalent.
+	 */
+	restargets = NIL;
+	foreach(lc, windef->rpCommonSyntax->rpDefs)
+	{
+		char	*name;
+		ListCell	*l;
+
+		restarget = (ResTarget *)lfirst(lc);
+		name = restarget->name;
+
+		/*
+		 * Make sure that row pattern definition search condition is a boolean
+		 * expression.
+		 */
+		transformWhereClause(pstate, restarget->val,
+							 EXPR_KIND_RPR_DEFINE, "DEFINE");
+
+		foreach(l, restargets)
+		{
+			char		*n;
+
+			r = (ResTarget *) lfirst(l);
+			n = r->name;
+
+			if (!strcmp(n, name))
+				ereport(ERROR,
+						(errcode(ERRCODE_SYNTAX_ERROR),
+						 errmsg("row pattern definition variable name \"%s\" appears more than once in DEFINE clause",
+								name),
+						 parser_errposition(pstate, exprLocation((Node *)r))));
+		}
+		restargets = lappend(restargets, restarget);
+	}
+	list_free(restargets);
+
+	return transformTargetList(pstate, windef->rpCommonSyntax->rpDefs,
+							   EXPR_KIND_RPR_DEFINE);
+}
+
+/*
+ * transformPatternClause
+ *		Process PATTERN clause and return PATTERN clause in the raw parse tree
+ */
+static void
+transformPatternClause(ParseState *pstate, WindowClause *wc, WindowDef *windef)
+{
+	ListCell	*lc, *l;
+
+	/*
+	 * Row Pattern Common Syntax clause exists?
+	 */
+	if (windef->rpCommonSyntax == NULL)
+		return;
+
+	/*
+	 * Primary row pattern variable names in PATTERN clause must appear in
+	 * DEFINE clause as row pattern definition variable names.
+	 */
+	wc->patternVariable = NIL;
+	wc->patternRegexp = NIL;
+	foreach(lc, windef->rpCommonSyntax->rpPatterns)
+	{
+		A_Expr	*a;
+		char	*name;
+		char	*regexp;
+		bool	found = false;
+
+		if (!IsA(lfirst(lc), A_Expr))
+			ereport(ERROR,
+					errmsg("node type is not A_Expr"));
+
+		a = (A_Expr *)lfirst(lc);
+		name = strVal(a->lexpr);
+
+		foreach(l, windef->rpCommonSyntax->rpDefs)
+		{
+			ResTarget	*restarget = (ResTarget *)lfirst(l);
+
+			if (!strcmp(restarget->name, name))
+			{
+				found = true;
+				break;
+			}
+		}
+
+		if (!found)
+			ereport(ERROR,
+					(errcode(ERRCODE_SYNTAX_ERROR),
+					 errmsg("primary row pattern variable name \"%s\" does not appear in DEFINE clause",
+							name),
+					 parser_errposition(pstate, exprLocation((Node *)a))));
+		wc->patternVariable = lappend(wc->patternVariable, makeString(pstrdup(name)));
+		regexp = strVal(lfirst(list_head(a->name)));
+		wc->patternRegexp = lappend(wc->patternRegexp, makeString(pstrdup(regexp)));
+	}
+}
+
+/*
+ * transformMeasureClause
+ *		Process MEASURE clause
+ */
+static List *
+transformMeasureClause(ParseState *pstate, WindowClause *wc, WindowDef *windef)
+{
+	if (windef->rowPatternMeasures == NIL)
+		return NIL;
+
+	ereport(ERROR,
+			(errcode(ERRCODE_SYNTAX_ERROR),
+			 errmsg("%s","MEASURE clause is not supported yet"),
+			 parser_errposition(pstate, exprLocation((Node *)windef->rowPatternMeasures))));
+}
diff --git a/src/backend/parser/parse_expr.c b/src/backend/parser/parse_expr.c
index fed8e4d089..8921b7ae01 100644
--- a/src/backend/parser/parse_expr.c
+++ b/src/backend/parser/parse_expr.c
@@ -557,6 +557,7 @@ transformColumnRef(ParseState *pstate, ColumnRef *cref)
 		case EXPR_KIND_COPY_WHERE:
 		case EXPR_KIND_GENERATED_COLUMN:
 		case EXPR_KIND_CYCLE_MARK:
+		case EXPR_KIND_RPR_DEFINE:
 			/* okay */
 			break;
 
@@ -1770,6 +1771,7 @@ transformSubLink(ParseState *pstate, SubLink *sublink)
 		case EXPR_KIND_VALUES:
 		case EXPR_KIND_VALUES_SINGLE:
 		case EXPR_KIND_CYCLE_MARK:
+		case EXPR_KIND_RPR_DEFINE:
 			/* okay */
 			break;
 		case EXPR_KIND_CHECK_CONSTRAINT:
@@ -3149,6 +3151,8 @@ ParseExprKindName(ParseExprKind exprKind)
 			return "GENERATED AS";
 		case EXPR_KIND_CYCLE_MARK:
 			return "CYCLE";
+		case EXPR_KIND_RPR_DEFINE:
+			return "DEFINE";
 
 			/*
 			 * There is intentionally no default: case here, so that the
diff --git a/src/backend/parser/parse_func.c b/src/backend/parser/parse_func.c
index b3f0b6a137..2ff3699538 100644
--- a/src/backend/parser/parse_func.c
+++ b/src/backend/parser/parse_func.c
@@ -2656,6 +2656,9 @@ check_srf_call_placement(ParseState *pstate, Node *last_srf, int location)
 		case EXPR_KIND_CYCLE_MARK:
 			errkind = true;
 			break;
+		case EXPR_KIND_RPR_DEFINE:
+			errkind = true;
+			break;
 
 			/*
 			 * There is intentionally no default: case here, so that the
-- 
2.25.1


----Next_Part(Wed_Jul_26_21_21_34_2023_317)--
Content-Type: Text/X-Patch; charset=us-ascii
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="v3-0003-Row-pattern-recognition-patch-planner.patch"



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread

* [PATCH v2 1/2] Add a binary to test getopt_long()
@ 2026-07-22 03:55 Japin Li <japinli@hotmail.com>
  0 siblings, 0 replies; 144+ messages in thread

From: Japin Li @ 2026-07-22 03:55 UTC (permalink / raw)

---
 src/bin/Makefile                            |  1 +
 src/bin/getopt_long_test/Makefile           | 26 +++++++++++++++++++++
 src/bin/getopt_long_test/getopt_long_test.c | 25 ++++++++++++++++++++
 3 files changed, 52 insertions(+)
 create mode 100644 src/bin/getopt_long_test/Makefile
 create mode 100644 src/bin/getopt_long_test/getopt_long_test.c

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 538af88a523..b25305f9db5 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -14,6 +14,7 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
+	getopt_long_test \
 	initdb \
 	pg_amcheck \
 	pg_archivecleanup \
diff --git a/src/bin/getopt_long_test/Makefile b/src/bin/getopt_long_test/Makefile
new file mode 100644
index 00000000000..f7de6ef872c
--- /dev/null
+++ b/src/bin/getopt_long_test/Makefile
@@ -0,0 +1,26 @@
+PGFILEDESC = "getopt_long_test - test PostgreSQL getopt_long() function"
+PGAPPICON = win32
+
+subdir = src/bin/getopt_long_test
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PG_CPPFLAGS += -I$(top_srcdir)/src/port
+
+OBJS = \
+	$(WIN32RES) \
+	getopt_long.o \
+	getopt_long_test.o
+
+all: getopt_long_test
+
+getopt_long_test: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+getopt_long_test.o: getopt_long_test.c $(top_builddir)/src/Makefile.global
+
+getopt_long.c:
+	ln -s $(top_srcdir)/src/port/getopt_long.c .
+
+clean distclean:
+	rm -f getopt_long_test$(X) $(OBJS) getopt_long.c
diff --git a/src/bin/getopt_long_test/getopt_long_test.c b/src/bin/getopt_long_test/getopt_long_test.c
new file mode 100644
index 00000000000..4abd042bbaa
--- /dev/null
+++ b/src/bin/getopt_long_test/getopt_long_test.c
@@ -0,0 +1,25 @@
+
+#include "postgres.h"
+
+#include "getopt_long.h"
+
+int
+main(int argc, char **argv)
+{
+	int c;
+	const char		*shortopts = ":f:";
+	struct option	 longopts[] = {
+		{"log-filename", required_argument, NULL, 'f'},
+		{NULL, 0, NULL, 0},
+	};
+
+	while ((c = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1)
+	{
+		if (c == ':')
+			fprintf(stderr, "option '%s' requires an argument\n", argv[optind - 1]);
+		else if (c == '?')
+			fprintf(stderr, "unrecognized option '%s'\n", argv[optind - 1]);
+	}
+
+	return 0;
+}
-- 
2.53.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0002-Fix-optind-handling-inconsistency-in-getopt_long-.patch



^ permalink  raw  reply  [nested|flat] 144+ messages in thread


end of thread, other threads:[~2026-07-22 03:55 UTC | newest]

Thread overview: 144+ messages (download: mbox mbox.gz follow: Atom feed)
-- links below jump to the message on this page --
2023-07-26 10:49 [PATCH v3 2/7] Row pattern recognition patch (parse/analysis). Tatsuo Ishii <ishii@postgresql.org>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>
2026-07-22 03:55 [PATCH v2 1/2] Add a binary to test getopt_long() Japin Li <japinli@hotmail.com>

This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox