+#if HAVE_GETDOMAINNAME /* Mac OS X, FreeBSD, AIX, IRIX, OSF/1 */
+ extern int getdomainname (char *, int);
+
+ if (len > INT_MAX)
+ len = INT_MAX;
+ return getdomainname (name, (int) len);
+#elif HAVE_SYSINFO && HAVE_SYS_SYSTEMINFO_H && defined SI_SRPC_DOMAIN
+ /* Solaris */
+ int ret;
+
+ /* The third argument is a 'long', but the return value must fit in an
+ 'int', therefore it's better to avoid arguments > INT_MAX. */
+ ret = sysinfo (SI_SRPC_DOMAIN, name, len > INT_MAX ? INT_MAX : len);
+ if (ret < 0)
+ /* errno is set here. */
+ return -1;
+ if (ret > len)
+ {
+ errno = EINVAL;
+ return -1;
+ }
+ return 0;
+#else /* HP-UX, Cygwin, mingw */
+ const char *result = ""; /* Hardcode your domain name if you want. */