commit 1c2fb80f178650da370cbf86e994a1d74be82a12 parent d200635a4c624c687b3387f937425d12239eb5c3 Author: Laurent Bercot <ska-skaware@skarnet.org> Date: Thu, 30 Jan 2020 23:01:10 +0000 Make sagethostname() work with all glibcs Diffstat:
M | src/libstddjb/sagethostname.c | | | 15 | +++++++++++---- |
1 file changed, 11 insertions(+), 4 deletions(-)
diff --git a/src/libstddjb/sagethostname.c b/src/libstddjb/sagethostname.c @@ -2,23 +2,30 @@ #include <unistd.h> #include <string.h> +#include <errno.h> #include <skalibs/stralloc.h> #include <skalibs/djbunix.h> 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: