[krbdev.mit.edu #8684] git commit
"Greg Hudson via RT" <[email protected]>
| Newsgroups | gmane.comp.encryption.kerberos.bugs |
|---|---|
| Message-ID | <[email protected]> |
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/8b8cad8b9ff92e2a2d344fc7c4d77277c9c09829 Author: Greg Hudson <[email protected]> Commit: 8b8cad8b9ff92e2a2d344fc7c4d77277c9c09829 Branch: krb5-1.15 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(-)