From 1c2fb80f178650da370cbf86e994a1d74be82a12 Mon Sep 17 00:00:00 2001 From: Laurent Bercot Date: Thu, 30 Jan 2020 23:01:10 +0000 Subject: Make sagethostname() work with all glibcs --- src/libstddjb/sagethostname.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) (limited to 'src/libstddjb') diff --git a/src/libstddjb/sagethostname.c b/src/libstddjb/sagethostname.c index b20db39..90108f8 100644 --- a/src/libstddjb/sagethostname.c +++ b/src/libstddjb/sagethostname.c @@ -2,23 +2,30 @@ #include #include +#include #include #include int sagethostname (stralloc *sa) { - size_t n = 128 ; + size_t n = 32 ; + int e = errno ; int wasnull = !sa->s ; for (;;) { if (!stralloc_readyplus(sa, n)) goto err ; sa->s[sa->len + n - 2] = 0 ; - if (gethostname(sa->s + sa->len, n) == -1) goto err ; - if (!sa->s[sa->len + n - 2]) break ; - n += 128 ; + errno = 0 ; + if (gethostname(sa->s + sa->len, n) < 0) + { + if (errno != ENAMETOOLONG) goto err ; + } + else if (!sa->s[sa->len + n - 2]) break ; + n += 32 ; } sa->len += strlen(sa->s + sa->len) ; + errno = e ; return 0 ; err: -- cgit v1.2.3