From: Greg Hudson Date: Wed, 23 Aug 2017 21:45:02 +0000 (-0400) Subject: Fix AIX build issues X-Git-Tag: krb5-1.16-beta1~8 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=795bcbfab036d9ffdafddc48b6159afd90c1b92e;p=thirdparty%2Fkrb5.git Fix AIX build issues In k5-platform.h, only test for SHARED and define the finalizer as static if we don't expect linker options to be used for finalizers. SHARED is not a robust test (it isn't defined when building objects for shared libraries on AIX, OSF/1, or sometimes IRIX because they don't use separate PIC objects), and as linker finalizer options are only applied when shared libraries are created, we don't have to worry about finalizers happening for static libraries. In expand_path.c, remove the unnecessary structure tag from "struct token" as it conflicts with on AIX. In localaddr.c, initialize output parameters at the beginning of get_ifreq_array(). Otherwise, gcc cannot be sure that they are always set when get_ifreq_array() returns 0, because we use errno as a return value in one case. Also remove two unused variables. Use socklen_t instead of int for socket lengths in sim_client.c and sim_client.h. Based on patches from Tony Reix. ticket: 8608 (new) --- diff --git a/src/appl/simple/client/sim_client.c b/src/appl/simple/client/sim_client.c index bd3c38c72a..cda7d220c4 100644 --- a/src/appl/simple/client/sim_client.c +++ b/src/appl/simple/client/sim_client.c @@ -62,7 +62,7 @@ int main(int argc, char *argv[]) { int sock, i; - unsigned int len; + socklen_t len; int flags = 0; /* flags for sendto() */ struct servent *serv; struct hostent *host; diff --git a/src/appl/simple/server/sim_server.c b/src/appl/simple/server/sim_server.c index fce5a9c6fd..f09489c35d 100644 --- a/src/appl/simple/server/sim_server.c +++ b/src/appl/simple/server/sim_server.c @@ -33,6 +33,7 @@ */ #include "krb5.h" +#include "port-sockets.h" #include #include #include @@ -64,7 +65,7 @@ int main(int argc, char *argv[]) { int sock, i; - unsigned int len; + socklen_t len; int flags = 0; /* for recvfrom() */ int on = 1; struct servent *serv; diff --git a/src/include/k5-platform.h b/src/include/k5-platform.h index d58710bab9..548c0486d5 100644 --- a/src/include/k5-platform.h +++ b/src/include/k5-platform.h @@ -361,16 +361,7 @@ typedef struct { int error; unsigned char did_run; } k5_init_t; -#if !defined(SHARED) && !defined(_WIN32) - -/* - * In this case, we just don't care about finalization. The code will still - * define the function, but we won't do anything with it. - */ -# define MAKE_FINI_FUNCTION(NAME) \ - static void NAME(void) UNUSED - -#elif defined(USE_LINKER_FINI_OPTION) || defined(_WIN32) +#if defined(USE_LINKER_FINI_OPTION) || defined(_WIN32) /* If we're told the linker option will be used, it doesn't really matter what compiler we're using. Do it the same way regardless. */ @@ -404,6 +395,15 @@ typedef struct { int error; unsigned char did_run; } k5_init_t; # endif +#elif !defined(SHARED) + +/* + * In this case, we just don't care about finalization. The code will still + * define the function, but we won't do anything with it. + */ +# define MAKE_FINI_FUNCTION(NAME) \ + static void NAME(void) UNUSED + #elif defined(__GNUC__) && defined(DESTRUCTOR_ATTR_WORKS) /* If we're using gcc, if the C++ support works, the compiler should build executables and shared libraries that support the use of diff --git a/src/lib/krb5/os/expand_path.c b/src/lib/krb5/os/expand_path.c index a8a14f4bb2..61fb234594 100644 --- a/src/lib/krb5/os/expand_path.c +++ b/src/lib/krb5/os/expand_path.c @@ -351,7 +351,7 @@ expand_null(krb5_context context, PTYPE param, const char *postfix, char **ret) return 0; } -static const struct token { +static const struct { const char *tok; PTYPE param; const char *postfix; diff --git a/src/lib/krb5/os/localaddr.c b/src/lib/krb5/os/localaddr.c index 21bc719d2c..58443f6e35 100644 --- a/src/lib/krb5/os/localaddr.c +++ b/src/lib/krb5/os/localaddr.c @@ -862,6 +862,9 @@ get_ifreq_array(char **bufp, size_t *np, int s) int numifs = -1; #endif + *bufp = NULL; + *np = 0; + /* At least on NetBSD, an ifreq can hold an IPv4 address, but isn't big enough for an IPv6 or ethernet address. So add a little more space. */ @@ -938,9 +941,9 @@ foreach_localaddr (/*@null@*/ void *data, #endif { struct ifreq *ifr, ifreq, *ifr2; - int s, code; + int s; char *buf = 0; - size_t size, n, i, j; + size_t n, i, j; int retval = 0; #ifdef LINUX_IPV6_HACK struct linux_ipv6_addr_list *linux_ipv6_addrs = get_linux_ipv6_addrs ();