summaryrefslogtreecommitdiff
path: root/lib/xgethostname.c
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
commitfc949b713ed9f5c112ac98eeaf209641051d0987 (patch)
tree623bb69a079ea9e0eb78af8bf538e1f369838b3d /lib/xgethostname.c
parentfbc246ca8f593f504bb65645f4a04926f0be0959 (diff)
downloadcoreutils-fc949b713ed9f5c112ac98eeaf209641051d0987.tar.xz
(xgethostname): Work around bug in SunOS5.5's gethostname.
Diffstat (limited to 'lib/xgethostname.c')
-rw-r--r--lib/xgethostname.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/lib/xgethostname.c b/lib/xgethostname.c
index 7038ea42c..79da0ec9c 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)