Mercurial > hg > octave-kai > gnulib-hg
changeset 16145:b5b93138d21d
Tweak last commit.
* lib/sethostname.c: Don't include <string.h>.
(sethostname): No need to copy the argument string to the stack. Don't
call clearerr. Preserve errno when fprintf failed.
* m4/sethostname.m4 (gl_FUNC_SETHOSTNAME): Comment about HOST_NAME_MAX.
Don't invoke AC_REPLACE_FUNCS.
* modules/sethostname (Link): Remove empty section.
* doc/glibc-functions/sethostname.texi: Gnulib does not fix the ENOSYS
failure problem.
author | Bruno Haible <bruno@clisp.org> |
---|---|
date | Sat, 03 Dec 2011 14:09:14 +0100 |
parents | 5c82a0f82eef |
children | caaefe18d91b |
files | ChangeLog doc/glibc-functions/sethostname.texi lib/sethostname.c m4/sethostname.m4 modules/sethostname |
diffstat | 5 files changed, 26 insertions(+), 20 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2011-12-03 Bruno Haible <bruno@clisp.org> + + Tweak last commit. + * lib/sethostname.c: Don't include <string.h>. + (sethostname): No need to copy the argument string to the stack. Don't + call clearerr. Preserve errno when fprintf failed. + * m4/sethostname.m4 (gl_FUNC_SETHOSTNAME): Comment about HOST_NAME_MAX. + Don't invoke AC_REPLACE_FUNCS. + * modules/sethostname (Link): Remove empty section. + * doc/glibc-functions/sethostname.texi: Gnulib does not fix the ENOSYS + failure problem. + 2011-12-01 Ben Walton <bwalton@artsci.utoronto.ca> New module 'sethostname'.
--- a/doc/glibc-functions/sethostname.texi +++ b/doc/glibc-functions/sethostname.texi @@ -9,6 +9,7 @@ @item This function is missing on some platforms: Minix 3.1.8, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. +Note that the Gnulib replacement may fail with ENOSYS on some platforms. @item This function is not declared on some platforms: AIX 7.1, OSF/1 5.1, Solaris 10. @@ -16,8 +17,6 @@ On Solaris 10, the first argument is @code{char *} instead of @code{const char *} and the second parameter is @code{int} instead of @code{size_t}. -@item -On some platforms the Gnulib replacement always fails with ENOSYS. @end itemize Portability problems not fixed by Gnulib:
--- a/lib/sethostname.c +++ b/lib/sethostname.c @@ -26,7 +26,6 @@ #include <errno.h> #include <stdio.h> -#include <string.h> #include <limits.h> /* Set up to LEN chars of NAME as system hostname. @@ -43,12 +42,6 @@ return -1; } - /* NAME does not need to be null terminated so leave room to terminate - regardless of input. */ - char hostname[HOST_NAME_MAX + 1]; - memcpy ((void *) hostname, (const void *) name, len); - hostname[len] = '\0'; - #ifdef __minix /* Minix */ { FILE *hostf; @@ -63,24 +56,28 @@ r = -1; else { - fprintf (hostf, "%s\n", hostname); + fprintf (hostf, "%.*s\n", (int) len, name); if (ferror (hostf)) { - clearerr (hostf); + /* Close hostf, preserving the errno from the fprintf call. */ + int saved_errno = errno; + fclose (hostf); + errno = saved_errno; r = -1; } - - /* use return value of fclose for function return value as it - matches our needs. fclose will also set errno on - failure */ - r = fclose (hostf); + else + { + if (fclose (hostf)) + /* fclose sets errno on failure. */ + r = -1; + } } return r; } #else /* For platforms that we don't have a better option for, simply bail - out */ + out. */ errno = ENOSYS; return -1; #endif
--- a/m4/sethostname.m4 +++ b/m4/sethostname.m4 @@ -6,13 +6,13 @@ # Ensure # - the sethostname() function, +# - the HOST_NAME_MAX macro in <limits.h>. AC_DEFUN([gl_FUNC_SETHOSTNAME], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) gl_PREREQ_HOST_NAME_MAX - AC_REPLACE_FUNCS([sethostname]) AC_CHECK_FUNCS([sethostname]) if test $ac_cv_func_sethostname = no; then HAVE_SETHOSTNAME=0