diff --git a/hostname.c b/hostname.c index 5a8b2eb..4d068c8 100644 --- a/hostname.c +++ b/hostname.c @@ -15,7 +15,16 @@ usage(void) int main(int argc, char *argv[]) { - char host[HOST_NAME_MAX + 1]; + long sz; + char *host; + + sz = sysconf(_SC_HOST_NAME_MAX); + if (sz < 0) + sz = 255; + + host = malloc(sz + 1); + if (!host) + eprintf("malloc:"); ARGBEGIN { default: @@ -23,13 +32,15 @@ main(int argc, char *argv[]) } ARGEND; if (argc < 1) { - if (gethostname(host, sizeof(host)) < 0) + if (gethostname(host, sz + 1) < 0) eprintf("gethostname:"); puts(host); } else { - if (sethostname(argv[0], strlen(argv[0])) < 0) + if (sethostname(argv[0], sz + 1) < 0) eprintf("sethostname:"); } + free(host); + return EXIT_SUCCESS; }