*/
#include "config.h"
-#define _XOPEN_SOURCE 600 /**< make limits.h #define IOV_MAX */
-#define __EXTENSIONS__ 1 /**< make Solaris netinet/in.h know IPv6 */
+#ifdef IRCU_SOLARIS
+/* Solaris requires C99 support for SUSv3, but C99 support breaks other
+ * parts of the build. So fall back to SUSv2, but request IPv6 support
+ * by defining __EXTENSIONS__.
+ */
+#define _XOPEN_SOURCE 500
+#define __EXTENSIONS__ 1
+#else
+/* FreeBSD 6.0 requires SUSv3 to support IPv6. Apparently some other
+ * OS requires SUSv3 to define IOV_MAX, but its identity is lost for
+ * the time being.
+ */
+#define _XOPEN_SOURCE 600
+#endif
#include "ircd_osdep.h"
#include "msgq.h"
#define getrusage(a,b) syscall(SYS_GETRUSAGE, a, b)
#endif
+
+static void sockaddr_in_to_irc(const struct sockaddr_in *v4,
+ struct irc_sockaddr *irc)
+{
+ memset(&irc->addr, 0, 5*sizeof(int16_t));
+ irc->addr.in6_16[5] = 0xffff;
+ memcpy(&irc->addr.in6_16[6], &v4->sin_addr, sizeof(v4->sin_addr));
+ irc->port = ntohs(v4->sin_port);
+}
+
+
#ifdef IPV6
/** Native socket address type. */
#define sockaddr_native sockaddr_in6
irc->port = ntohs(v6->sin6_port);
}
else if (v6->sin6_family == AF_INET) {
- const struct sockaddr_in *v4 = (const struct sockaddr_in*)v6;
- memset(&irc->addr, 0, 5*sizeof(int16_t));
- irc->addr.in6_16[5] = 0xffff;
- memcpy(&irc->addr.in6_16[6], &v4->sin_addr, sizeof(v4->sin_addr));
- irc->port = ntohs(v4->sin_port);
+ sockaddr_in_to_irc((struct sockaddr_in *)v6, irc);
}
else assert(0 && "Unhandled native address family");
}
#else
#define sockaddr_native sockaddr_in
#define sn_family sin_family
-
-void sockaddr_to_irc(const struct sockaddr_in *v4, struct irc_sockaddr *irc)
-{
- assert(v4->sin_family == AF_INET);
- memset(&irc->addr, 0, 6*sizeof(irc->addr.in6_16[0]));
- memcpy(&irc->addr.in6_16[6], &v4->sin_addr, sizeof(v4->sin_addr));
- irc->port = ntohs(v4->sin_port);
-}
+#define sockaddr_to_irc sockaddr_in_to_irc
int sockaddr_from_irc(struct sockaddr_in *v4, const struct irc_sockaddr *irc, int compat_fd)
{
#endif
-/*
- * This is part of the STATS replies. There is no official numeric for this
- * since this isn't an official command, in much the same way as HASH isn't.
- * It is also possible that some systems wont support this call or have
- * different field names for "struct rusage".
- * -avalon
- */
-/** Send resource usage information to a client.
+#ifdef DEBUGMODE
+/** Send resource usage information to an enumerator function.
* @param[in] cptr Client requesting information.
* @param[in] uptime Wall time in seconds since the server started.
* @param[in] enumerator Function to call to send a line to \a cptr.
#endif /* HAVE_GETRUSAGE */
return 1;
}
+#endif
/** Look up the most recent socket error for a socket file descriptor.
* @param[in] fd File descriptor to check.