diff options
Diffstat (limited to 'libshouldbeinlibc/localhost.c')
-rw-r--r-- | libshouldbeinlibc/localhost.c | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/libshouldbeinlibc/localhost.c b/libshouldbeinlibc/localhost.c index f0c67541..f21f970d 100644 --- a/libshouldbeinlibc/localhost.c +++ b/libshouldbeinlibc/localhost.c @@ -39,18 +39,25 @@ localhost () errno = 0; if (buf) { + char *new; buf_len += buf_len; - buf = realloc (buf, buf_len); + new = realloc (buf, buf_len); + if (! new) + { + errno = ENOMEM; + return 0; + } + else + buf = new; } else { buf_len = 128; /* Initial guess */ buf = malloc (buf_len); + if (! buf) + { + errno = ENOMEM; + return 0; + } } - - if (! buf) - { - errno = ENOMEM; - return 0; - } } while ((gethostname(buf, buf_len) == 0 && !memchr (buf, '\0', buf_len)) || errno == ENAMETOOLONG); |