Re: Complier warnings on mingw gcc 4.5.0
Andrew Dunstan <andrew@dunslane.net>
From: Andrew Dunstan <andrew@dunslane.net>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: Magnus Hagander <magnus@hagander.net>, Alvaro Herrera <alvherre@commandprompt.com>, Itagaki Takahiro <itagaki.takahiro@gmail.com>, Hiroshi Inoue <inoue@tpf.co.jp>, PostgreSQL Hackers <pgsql-hackers@postgresql.org>
Date: 2010-12-15T21:20:06Z
Lists: pgsql-hackers
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Make the win32 putenv() override update *all* present versions of the
- 741e4ad7de9e 9.0.0 cited
-
Remove the use of the pg_auth flat file for client authentication.
- e710b65c1c56 9.0.0 cited
On 12/15/2010 03:52 PM, Tom Lane wrote:
> Andrew Dunstan<andrew@dunslane.net> writes:
>> And here is where it changed:
>> <http://sourceforge.net/project/shownotes.php?release_id=24832>
>> * A replacement implementation for the getopt() family of functions,
>> adding support for the GNU getopt_long_only() function. Users
>> should note that this intentionally *removes* support for the BSD
>> or Mac OS-X specific, and non-standard, `optreset' global variable;
>> to reset the getopt() scanner, use `optind = 0;' instead of relying
>> on this non-standard, non-portable and now-unsupported feature.
> Great. So instead of a nonstandard but pretty portable API, they
> decided on a nonstandard interpretation of optind ... which absolutely
> will not work for our usage, because we need to be able to tell getopt
> to skip over --single, even if we were willing to figure out whether
> getopt behaves this way or the more usual way. Dolts.
>
> While I don't mind forcing use of our getopt() on mingw, I'm a mite
> concerned by the idea that this might represent an upstream change we'll
> soon see elsewhere, rather than just mingw-specific brain damage.
> Anybody know?
>
>
On my Fedora box, man 3 getopt says this:
A program that scans multiple argument vectors, or rescans the same
vector more than once, and wants to make use of GNU extensions such
as '+' and '-' at the start of optstring, or changes the value of
POSIXLY_CORRECT between scans, must reinitialize getopt() by
resetting optind to 0, rather than the traditional value of 1.
(Resetting to 0 forces the invocation of an internal initialization
routine that rechecks POSIXLY_CORRECT and checks for GNU extensions
in optstring.)
Modulo the --single issue, we don't have to force use of our getopt on
Mingw. This patch seems to work, at least to get regression working:
diff --git a/src/backend/postmaster/postmaster.c
b/src/backend/postmaster/postmaster.c
index 90854f4..9ae3767 100644
--- a/src/backend/postmaster/postmaster.c
+++ b/src/backend/postmaster/postmaster.c
@@ -753,6 +753,8 @@ PostmasterMain(int argc, char *argv[])
optind = 1;
#ifdef HAVE_INT_OPTRESET
optreset = 1; /* some systems need this too */
+#elsif defined (WIN32) && !defined(_MSC_VER)
+ optind = 0; /* modern Mingw needs this instead */
#endif
/* For debugging: display postmaster environment */
diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c
index ff2e9bd..ea4ae79 100644
--- a/src/backend/tcop/postgres.c
+++ b/src/backend/tcop/postgres.c
@@ -3444,6 +3444,8 @@ process_postgres_switches(int argc, char
*argv[], GucContext ctx)
optind = 1;
#ifdef HAVE_INT_OPTRESET
optreset = 1; /* some systems need this too */
+#elsif defined (WIN32) && !defined(_MSC_VER)
+ optind = 0; /* modern Mingw
needs this instead */
#endif
cheers
andrew