Fix BZ # 2074

Andreas Jaeger aj@suse.com
Thu Apr 12 19:12:00 GMT 2012


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



More information about the Libc-alpha mailing list