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