skalibs

Mirror/fork of https://skarnet.org/software/skalibs/
git clone https://ccx.te2000.cz/git/skalibs
Log | Files | Refs | README | LICENSE

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:
Msrc/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: