* fake-addrinfo.h (fake_getnameinfo) [__GNUC__ && __mips__]: Don't call
authorKen Raeburn <raeburn@mit.edu>
Tue, 26 Mar 2002 22:46:57 +0000 (22:46 +0000)
committerKen Raeburn <raeburn@mit.edu>
Tue, 26 Mar 2002 22:46:57 +0000 (22:46 +0000)
inet_ntoa, struct passing doesn't work.  Format the output string locally.

git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@14293 dc483132-0cff-0310-8789-dd5450dbe970

src/include/ChangeLog
src/include/fake-addrinfo.h

index 18770f23a09ae1ec1cd636a9fd816e49d7098170..e0c72d623dcb1e1f39e68a8c6a7c6ae7a006b678 100644 (file)
@@ -4,6 +4,8 @@
        defined functions static, and inline if gcc is used.  Drop
        FAI_PREFIX renaming hacks.  Fix some bugs in the separation of
        getnameinfo from getaddrinfo/freeaddrinfo for wrapping purposes.
+       (fake_getnameinfo) [__GNUC__ && __mips__]: Don't call inet_ntoa,
+       struct passing doesn't work.  Format the output string locally.
        * fake-addrinfo.c: Delete.
 
 2002-03-11  Ken Raeburn  <raeburn@mit.edu>
index b0660501eb0d8fc8d2086ac46db5c8fea059386f..0b5fbf201a95ef2d24313a3085ba344343173e52 100644 (file)
@@ -435,10 +435,22 @@ fake_getnameinfo (const struct sockaddr *sa, socklen_t len,
 
     if (host) {
        if (flags & NI_NUMERICHOST) {
+#if defined(__GNUC__) && defined(__mips__)
+           /* The inet_ntoa call, passing a struct, fails on Irix 6.5
+              using gcc 2.95; we get back "0.0.0.0".  Since this in a
+              configuration still important at Athena, here's the
+              workaround....  */
+           unsigned char *uc = (unsigned char *) &sinp->sin_addr;
+           char tmpbuf[20];
+       numeric_host:
+           sprintf(tmpbuf, "%d.%d.%d.%d", uc[0], uc[1], uc[2], uc[3]);
+           strncpy(host, tmpbuf, hostlen);
+#else
            char *p;
        numeric_host:
            p = inet_ntoa (sinp->sin_addr);
            strncpy (host, p, hostlen);
+#endif
        } else {
            hp = gethostbyaddr ((const char *) &sinp->sin_addr,
                                sizeof (struct in_addr),