This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Fix BZ # 2074


On 04/11/2012 09:46 PM, Roland McGrath wrote:
Roland, what do you propose doing? Changing the code is out of my scope
for now.

For now, just updating the comments and manual to match reality is fine. Perhaps file a bug about the surprising nature of the interface, which could also investigate harmonizing with BSD's funopen.

I've filed BZ#13975.


   /* Write N bytes pointed to by BUF to COOKIE.  Write all N bytes
-   unless there is an error.  Return number of bytes written, or -1 if
+   unless there is an error.  Return number of bytes written, or 0 if
      there is an error without writing anything.  If the file has been

The sentence is not very clear. It could be interpreted as "If there is an error and nothing was written, return 0." I think the actual intent is "If there is an error, return 0 and do not write anything." But actually I'm entirely unsure which of those is the intent.

thanks!



Here's what I committed,


Andreas

diff --git a/ChangeLog b/ChangeLog
index 41e6190..c29f9a7 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2012-04-12  Roland McGrath  <roland@hack.frob.com>
+
+	[BZ #2074]
+	* libio/libio.h (__io_write_fn): Update comment.
+
+2012-04-12  Petr Baudis  <pasky@ucw.cz>
+
+	[BZ #2074]
+	* stdio.texi (Hook Functions): The user provided writer function
+	is not allowed to return -1.
+
 2012-04-11  David S. Miller  <davem@davemloft.net>

 	* sysdeps/sparc/fpu/libm-test-ulps: Update.
diff --git a/NEWS b/NEWS
index e7ae528..472b35e 100644
--- a/NEWS
+++ b/NEWS
@@ -9,19 +9,19 @@ Version 2.16

* The following bugs are resolved with this release:

- 174, 350, 369, 411, 706, 2541, 2547, 2548, 2551, 2552, 2553, 2554, 2562,
- 2563, 2565, 2566, 2576, 2636, 2678, 3335, 3866, 3868, 3976, 3992, 4026,
- 4108, 4596, 4822, 5077, 5461, 5805, 5993, 6471, 6486, 6578, 6649, 6730,
- 6770, 6884, 6890, 6894, 6895, 6907, 6911, 9739, 9902, 10110, 10135, 10140,
- 10153, 10210, 10254, 10346, 10545, 10716, 11174, 11322, 11365, 11451,
- 11494, 11521, 11959, 12047, 12340, 13058, 13525, 13526, 13527, 13528,
- 13529, 13530, 13531, 13532, 13533, 13547, 13551, 13552, 13553, 13555,
- 13559, 13566, 13583, 13592, 13618, 13637, 13656, 13658, 13673, 13691,
- 13695, 13704, 13705, 13706, 13726, 13738, 13760, 13761, 13786, 13792,
- 13806, 13824, 13840, 13841, 13844, 13846, 13851, 13852, 13854, 13871,
- 13872, 13873, 13879, 13883, 13892, 13895, 13908, 13910, 13911, 13912,
- 13913, 13915, 13916, 13917, 13918, 13919, 13920, 13921, 13926, 13928,
- 13938, 13963, 13967
+ 174, 350, 369, 411, 706, 2074, 2541, 2547, 2548, 2551, 2552, 2553, 2554,
+ 2562, 2563, 2565, 2566, 2576, 2636, 2678, 3335, 3866, 3868, 3976, 3992,
+ 4026, 4108, 4596, 4822, 5077, 5461, 5805, 5993, 6471, 6486, 6578, 6649,
+ 6730, 6770, 6884, 6890, 6894, 6895, 6907, 6911, 9739, 9902, 10110, 10135,
+ 10140, 10153, 10210, 10254, 10346, 10545, 10716, 11174, 11322, 11365,
+ 11451, 11494, 11521, 11959, 12047, 12340, 13058, 13525, 13526, 13527,
+ 13528, 13529, 13530, 13531, 13532, 13533, 13547, 13551, 13552, 13553,
+ 13555, 13559, 13566, 13583, 13592, 13618, 13637, 13656, 13658, 13673,
+ 13691, 13695, 13704, 13705, 13706, 13726, 13738, 13760, 13761, 13786,
+ 13792, 13806, 13824, 13840, 13841, 13844, 13846, 13851, 13852, 13854,
+ 13871, 13872, 13873, 13879, 13883, 13892, 13895, 13908, 13910, 13911,
+ 13912, 13913, 13915, 13916, 13917, 13918, 13919, 13920, 13921, 13926,
+ 13928, 13938, 13963, 13967


* ISO C11 support:

diff --git a/libio/libio.h b/libio/libio.h
index 702a666..bbfdd9d 100644
--- a/libio/libio.h
+++ b/libio/libio.h
@@ -346,11 +346,11 @@ extern _IO_FILE *_IO_stderr attribute_hidden;
typedef __ssize_t __io_read_fn (void *__cookie, char *__buf, size_t __nbytes);


 /* Write N bytes pointed to by BUF to COOKIE.  Write all N bytes
-   unless there is an error.  Return number of bytes written, or -1 if
-   there is an error without writing anything.  If the file has been
-   opened for append (__mode.__append set), then set the file pointer
-   to the end of the file and then do the write; if not, just write at
-   the current file pointer.  */
+   unless there is an error.  Return number of bytes written.  If
+   there is an error, return 0 and do not write anything.  If the file
+   has been opened for append (__mode.__append set), then set the file
+   pointer to the end of the file and then do the write; if not, just
+   write at the current file pointer.  */
 typedef __ssize_t __io_write_fn (void *__cookie, const char *__buf,
 				 size_t __n);

diff --git a/manual/stdio.texi b/manual/stdio.texi
index e870afb..c58ca22 100644
--- a/manual/stdio.texi
+++ b/manual/stdio.texi
@@ -5021,7 +5021,8 @@ ssize_t @var{writer} (void *@var{cookie}, const char *@var{buffer}, size_t @var{
This is very similar to the @code{write} function; see @ref{I/O
Primitives}. Your function should transfer up to @var{size} bytes from
the buffer, and return the number of bytes written. You can return a
-value of @code{-1} to indicate an error.
+value of @code{0} to indicate an error. You must not return any
+negative value.


 You should define the function to perform seek operations on the cookie
 as:


-- Andreas Jaeger aj@{suse.com,opensuse.org} Twitter/Identica: jaegerandi SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany GF: Jeff Hawn,Jennifer Guild,Felix Imendörffer,HRB16746 (AG Nürnberg) GPG fingerprint = 93A3 365E CE47 B889 DF7F FED1 389A 563C C272 A126


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]