[krbdev.mit.edu #8684] git commit
Greg Hudson via RT
rt-comment at KRBDEV-PROD-APP-1.mit.edu
Tue Oct 30 12:25:38 EDT 2018
Fix option parsing on Windows
Commit 8f9ade8ec50cde1176411085294f85ecfb2820a4 (ticket 8391) moved
the built-in getopt() and getopt_long() implementations from a static
library in util/windows to util/support, where (on Windows) it is
built into k5sprt32.dll or k5sprt64.dll. The getopt() interface uses
global variables opterr, optind, optopt, and optarg, each renamed via
macro to have a k5_ prefix when we use the built-in implementation.
Data objects exported from DLLs need special handling in Windows; they
must be marked as DATA in the DLL .def file, and they must be declared
with "__declspec(dllimport)" in calling code. Without this handling,
optind begins with a garbage value and getopt_long() returns -1
immediately, so client programs always behave as if they have no
arguments.
Stop unnecessarily declaring optind and optarg in client programs.
Declare the getopt() global variables with __declspec(dllimport) on
Windows, except when compiling getopt.c itself. When creating
libkrb5support.exports on Windows (this file is later used by
lib/Makefile.in to create k5sprt32.def), add a DATA tag to the data
objects.
(cherry picked from commit 63246cf3513a0e8bdfc734db985af14c8c5170c5)
https://github.com/krb5/krb5/commit/bbd9f7e7237d27ff7bad6e6587b35aae882c3125
Author: Greg Hudson <ghudson at mit.edu>
Commit: bbd9f7e7237d27ff7bad6e6587b35aae882c3125
Branch: krb5-1.16
src/clients/kdestroy/kdestroy.c | 3 ---
src/clients/klist/klist.c | 2 --
src/clients/kswitch/kswitch.c | 3 ---
src/clients/kvno/kvno.c | 3 ---
src/include/k5-platform.h | 14 ++++++++++----
src/util/support/Makefile.in | 4 +++-
src/util/support/getopt.c | 2 ++
7 files changed, 15 insertions(+), 16 deletions(-)
More information about the krb5-bugs
mailing list