summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJim Meyering <jim@meyering.net>1996-11-21 02:38:40 +0000
committerJim Meyering <jim@meyering.net>1996-11-21 02:38:40 +0000
commitd3f0665a868c84f31b01c697f0526123b45beef5 (patch)
tree0b27af425c0ddc35e53e232fb57fe9f57a56f58d
parentbbcee5700a76243936bfa29de9460772a6cbcd8b (diff)
downloadgnulib-d3f0665a868c84f31b01c697f0526123b45beef5.tar.gz
(xgethostname): Work around bug in SunOS5.5's gethostname.
-rw-r--r--lib/xgethostname.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/lib/xgethostname.c b/lib/xgethostname.c
index 7038ea42ce..79da0ec9c2 100644
--- a/lib/xgethostname.c
+++ b/lib/xgethostname.c
@@ -39,7 +39,7 @@ char *xmalloc ();
char *xrealloc ();
#ifndef INITIAL_HOSTNAME_LENGTH
-# define INITIAL_HOSTNAME_LENGTH 33
+# define INITIAL_HOSTNAME_LENGTH 34
#endif
char *
@@ -53,10 +53,15 @@ xgethostname ()
hostname = xmalloc (size);
while (1)
{
+ /* Use size - 2 here rather than size - 1 to work around the bug
+ in SunOS5.5's gethostname whereby it NUL-terminates HOSTNAME
+ even when the name is longer than the supplied buffer. */
+ int k = size - 2;
+
errno = 0;
- hostname[size - 1] = '\0';
+ hostname[k] = '\0';
err = gethostname (hostname, size);
- if (err == 0 && hostname[size - 1] == '\0')
+ if (err == 0 && hostname[k] == '\0')
break;
#ifdef ENAMETOOLONG
else if (err != 0 && errno != ENAMETOOLONG && errno != 0)