krb5 commit: Fix AIX build issues

Greg Hudson ghudson at mit.edu
Mon Sep 11 11:32:54 EDT 2017


https://github.com/krb5/krb5/commit/795bcbfab036d9ffdafddc48b6159afd90c1b92e
commit 795bcbfab036d9ffdafddc48b6159afd90c1b92e
Author: Greg Hudson <ghudson at mit.edu>
Date:   Wed Aug 23 17:45:02 2017 -0400

    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)

 src/appl/simple/client/sim_client.c |    2 +-
 src/appl/simple/server/sim_server.c |    3 ++-
 src/include/k5-platform.h           |   20 ++++++++++----------
 src/lib/krb5/os/expand_path.c       |    2 +-
 src/lib/krb5/os/localaddr.c         |    7 +++++--
 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 ();


More information about the cvs-krb5 mailing list