From 820fa6ad064bf3ba81dc9e2cd7fa2b98bb270902 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Thu, 16 Feb 2017 00:17:56 -0800 Subject: [PATCH] xbinary-io: rename from xsetmode This patch is taken from suggestions by Bruno Haible in: http://lists.gnu.org/archive/html/bug-gnulib/2017-02/msg00060.html http://lists.gnu.org/archive/html/bug-gnulib/2017-02/msg00061.html * lib/binary-io.c (__gl_setmode_check): Set errno to EINVAL, not ENOTTY, when it is an inappropriate device. * lib/binary-io.h (SET_BINARY): Resurrect. * lib/xbinary-io.c: Rename from lib/xsetmode.c. (xset_binary_mode_error): Rename from xsetmode_error. * lib/xbinary-io.h: Rename from lib/xsetmode.h. (xset_binary_mode): Rename from xsetmode. All uses changed. * modules/xbinary-io: Rename from modules/xsetmode. Update file names. * tests/test-binary-io.sh (tmpfiles): Remove no-longer-used file name. * NEWS: Update to match revised behavior. --- ChangeLog | 19 +++++++++++++++++++ NEWS | 5 ++--- lib/binary-io.c | 2 +- lib/binary-io.h | 12 +++++++++--- lib/{xsetmode.c => xbinary-io.c} | 4 ++-- lib/{xsetmode.h => xbinary-io.h} | 23 +++++++++++++---------- modules/{xsetmode => xbinary-io} | 10 +++++----- tests/test-binary-io.sh | 2 +- 8 files changed, 52 insertions(+), 25 deletions(-) rename lib/{xsetmode.c => xbinary-io.c} (95%) rename lib/{xsetmode.h => xbinary-io.h} (67%) rename modules/{xsetmode => xbinary-io} (65%) diff --git a/ChangeLog b/ChangeLog index f7bccee8ca..ec7c004857 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,22 @@ +2017-02-16 Paul Eggert + + xbinary-io: rename from xsetmode + This patch is taken from suggestions by Bruno Haible in: + http://lists.gnu.org/archive/html/bug-gnulib/2017-02/msg00060.html + http://lists.gnu.org/archive/html/bug-gnulib/2017-02/msg00061.html + * lib/binary-io.c (__gl_setmode_check): Set errno to EINVAL, + not ENOTTY, when it is an inappropriate device. + * lib/binary-io.h (SET_BINARY): Resurrect. + * lib/xbinary-io.c: Rename from lib/xsetmode.c. + (xset_binary_mode_error): Rename from xsetmode_error. + * lib/xbinary-io.h: Rename from lib/xsetmode.h. + (xset_binary_mode): Rename from xsetmode. + All uses changed. + * modules/xbinary-io: Rename from modules/xsetmode. + Update file names. + * tests/test-binary-io.sh (tmpfiles): Remove no-longer-used file name. + * NEWS: Update to match revised behavior. + 2017-02-15 Paul Eggert tests: Adjust to recent SET_BINARY change diff --git a/NEWS b/NEWS index 294aa224ce..bd40347174 100644 --- a/NEWS +++ b/NEWS @@ -42,9 +42,8 @@ User visible incompatible changes Date Modules Changes -2017-02-15 binary-io On MS-DOS and OS/2, set_binary_mode now fails - on ttys, and sets errno == ENOTTY. SET_BINARY - has been removed; use set_binary_mode instead. +2017-02-16 binary-io On MS-DOS and OS/2, set_binary_mode now fails + on ttys, and sets errno == EINVAL. 2017-01-20 parse-datetime The parse_datetime2 function now takes two more arguments TZ and TZSTRING, for the diff --git a/lib/binary-io.c b/lib/binary-io.c index c721650cc5..a7558b20fd 100644 --- a/lib/binary-io.c +++ b/lib/binary-io.c @@ -28,7 +28,7 @@ __gl_setmode_check (int fd) { if (isatty (fd)) { - errno = ENOTTY; + errno = EINVAL; return -1; } else diff --git a/lib/binary-io.h b/lib/binary-io.h index ae7690de28..9f1dde108e 100644 --- a/lib/binary-io.h +++ b/lib/binary-io.h @@ -55,9 +55,6 @@ __gl_setmode (int fd, int mode) } #endif -/* Set FD's mode to MODE. Return the old mode if successful, -1 - (setting errno) on failure. */ - #if defined __DJGPP__ || defined __EMX__ extern int __gl_setmode_check (int); #else @@ -65,6 +62,12 @@ BINARY_IO_INLINE int __gl_setmode_check (int fd) { return 0; } #endif +/* Set FD's mode to MODE, which should be either O_TEXT or O_BINARY. + Return the old mode if successful, -1 (setting errno) on failure. + Ordinarily this function would be called 'setmode', since that is + its name on MS-Windows, but it is called 'set_binary_mode' here + to avoid colliding with a BSD function of another name. */ + BINARY_IO_INLINE int set_binary_mode (int fd, int mode) { @@ -72,6 +75,9 @@ set_binary_mode (int fd, int mode) return r != 0 ? r : __gl_setmode (fd, mode); } +/* This macro is obsolescent. */ +#define SET_BINARY(fd) ((void) set_binary_mode (fd, O_BINARY)) + _GL_INLINE_HEADER_END #endif /* _BINARY_H */ diff --git a/lib/xsetmode.c b/lib/xbinary-io.c similarity index 95% rename from lib/xsetmode.c rename to lib/xbinary-io.c index 628f4f07e2..7fc8d0b207 100644 --- a/lib/xsetmode.c +++ b/lib/xbinary-io.c @@ -17,7 +17,7 @@ #include #define XSETMODE_INLINE _GL_EXTERN_INLINE -#include "xsetmode.h" +#include "xbinary-io.h" #include #include @@ -28,7 +28,7 @@ #if O_BINARY _Noreturn void -xsetmode_error (void) +xset_binary_mode_error (void) { error (exit_failure, errno, _("failed to set file descriptor text/binary mode")); diff --git a/lib/xsetmode.h b/lib/xbinary-io.h similarity index 67% rename from lib/xsetmode.h rename to lib/xbinary-io.h index c88d915901..28b20285c4 100644 --- a/lib/xsetmode.h +++ b/lib/xbinary-io.h @@ -14,8 +14,8 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -#ifndef _XSETMODE_H -#define _XSETMODE_H +#ifndef _XBINARY_IO_H +#define _XBINARY_IO_H #include "binary-io.h" @@ -23,23 +23,26 @@ #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN -#ifndef XSETMODE_INLINE -# define XSETMODE_INLINE _GL_INLINE +#ifndef XBINARY_IO_INLINE +# define XBINARY_IO_INLINE _GL_INLINE #endif #if O_BINARY -extern _Noreturn void xsetmode_error (void); +extern _Noreturn void xset_binary_mode_error (void); #else -XSETMODE_INLINE void xsetmode_error (void) {} +XBINARY_IO_INLINE void xset_binary_mode_error (void) {} #endif -XSETMODE_INLINE void -xsetmode (int fd, int mode) +/* Set the mode of FD to MODE, which should be either O_TEXT or O_BINARY. + Report an error and exit if this fails. */ + +XBINARY_IO_INLINE void +xset_binary_mode (int fd, int mode) { if (set_binary_mode (fd, mode) < 0) - xsetmode_error (); + xset_binary_mode_error (); } _GL_INLINE_HEADER_END -#endif /* _XSETMODE_H */ +#endif /* _XBINARY_IO_H */ diff --git a/modules/xsetmode b/modules/xbinary-io similarity index 65% rename from modules/xsetmode rename to modules/xbinary-io index 360a054718..5344805fc5 100644 --- a/modules/xsetmode +++ b/modules/xbinary-io @@ -2,8 +2,8 @@ Description: Checked Binary mode I/O. Files: -lib/xsetmode.h -lib/xsetmode.c +lib/xbinary-io.h +lib/xbinary-io.c Depends-on: binary-io @@ -16,13 +16,13 @@ verify configure.ac: Makefile.am: -lib_SOURCES += xsetmode.h xsetmode.c +lib_SOURCES += xbinary-io.h xbinary-io.c Include: -"xsetmode.h" +"xbinary-io.h" License: -LGPLv2+ +LGPL Maintainer: all diff --git a/tests/test-binary-io.sh b/tests/test-binary-io.sh index 3af53c6b8b..38af09957b 100755 --- a/tests/test-binary-io.sh +++ b/tests/test-binary-io.sh @@ -3,7 +3,7 @@ tmpfiles="" trap 'rm -fr $tmpfiles' 1 2 3 15 -tmpfiles="$tmpfiles t-bin-out0.tmp t-bin-out1.tmp t-bin-out2.tmp" +tmpfiles="$tmpfiles t-bin-out0.tmp t-bin-out1.tmp" ./test-binary-io${EXEEXT} 1 > t-bin-out1.tmp || exit 1 cmp t-bin-out0.tmp t-bin-out1.tmp > /dev/null || exit 1 -- 2.39.5