diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/libstddjb/sagethostname.c | 15 |
1 files changed, 11 insertions, 4 deletions
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 <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: |