Hi, David Turner wrote: > If the full hostname doesn't fit in the buffer supplied to > gethostname, POSIX does not specify whether the buffer will be > null-terminated, so to be safe, we should do it ourselves. [...] > +++ b/wrapper.c > @@ -655,3 +655,16 @@ void sleep_millisec(int millisec) > { > poll(NULL, 0, millisec); > } > + > +int xgethostname(char *buf, size_t len) > +{ > + /* > + * If the full hostname doesn't fit in buf, POSIX does not > + * specify whether the buffer will be null-terminated, so to > + * be safe, do it ourselves. > + */ > + int ret = gethostname(buf, len); > + if (!ret) > + buf[len - 1] = 0; > + return ret; I wonder if after null-terminating we would want to report this as an error, instead of silently using a truncated result. I.e. something like > + if (!ret) > + buf[len - 1] = 0; > + if (strlen(buf) >= len - 1) { > + errno = ENAMETOOLONG; > + return -1; > + } (or EINVAL --- either is equally descriptive). Also POSIX requires that hostnames are <= 255 bytes. Maybe we can force the buffer to be large enough. Thoughts? Jonathan