aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGreg Hudson <ghudson@mit.edu>2017-08-23 17:45:02 -0400
committerGreg Hudson <ghudson@mit.edu>2017-09-11 11:21:35 -0400
commit795bcbfab036d9ffdafddc48b6159afd90c1b92e (patch)
tree90c35987059a54972cd2d9f95f13438cd51ad504
parent54e58755368b58ba5894a14c1d02626da42d8003 (diff)
downloadkrb5-795bcbfab036d9ffdafddc48b6159afd90c1b92e.zip
krb5-795bcbfab036d9ffdafddc48b6159afd90c1b92e.tar.gz
krb5-795bcbfab036d9ffdafddc48b6159afd90c1b92e.tar.bz2
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 <net/if_arp.h> 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)
-rw-r--r--src/appl/simple/client/sim_client.c2
-rw-r--r--src/appl/simple/server/sim_server.c3
-rw-r--r--src/include/k5-platform.h20
-rw-r--r--src/lib/krb5/os/expand_path.c2
-rw-r--r--src/lib/krb5/os/localaddr.c7
5 files changed, 19 insertions, 15 deletions
diff --git a/src/appl/simple/client/sim_client.c b/src/appl/simple/client/sim_client.c
index bd3c38c..cda7d22 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 fce5a9c..f09489c 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 <stdio.h>
#include <string.h>
#include <unistd.h>
@@ -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 d58710b..548c048 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 a8a14f4..61fb234 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 21bc719..58443f6 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 ();