[PATCH v7] ungetc: Guarantee single char pushback
Maciej W. Rozycki
macro@redhat.com
Tue Dec 17 18:18:29 GMT 2024
On Tue, 17 Dec 2024, Siddhesh Poyarekar wrote:
> diff --git a/libio/libioP.h b/libio/libioP.h
> index 70e2bdfc9d..714abbd549 100644
> --- a/libio/libioP.h
> +++ b/libio/libioP.h
[...]
> @@ -911,30 +912,30 @@ extern int _IO_vscanf (const char *, va_list) __THROW;
> # define FILEBUF_LITERAL(CHAIN, FLAGS, FD, WDP) \
> { _IO_MAGIC+_IO_LINKED+_IO_IS_FILEBUF+FLAGS, \
> NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, \
> - NULL, NULL, (FILE *) CHAIN, FD, \
> - 0, _IO_pos_BAD, 0, 0, { 0 }, &_IO_stdfile_##FD##_lock }
> + NULL, NULL, (FILE *) CHAIN, FD, 0, { 0 }, \
> + _IO_pos_BAD, 0, 0, { 0 }, &_IO_stdfile_##FD##_lock }
> # else
> # define FILEBUF_LITERAL(CHAIN, FLAGS, FD, WDP) \
> { _IO_MAGIC+_IO_LINKED+_IO_IS_FILEBUF+FLAGS, \
> NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, \
> - NULL, NULL, (FILE *) CHAIN, FD, \
> - 0, _IO_pos_BAD, 0, 0, { 0 }, &_IO_stdfile_##FD##_lock, _IO_pos_BAD,\
> - NULL, WDP, NULL }
> + NULL, NULL, (FILE *) CHAIN, FD, 0, { 0 }, \
> + _IO_pos_BAD, 0, 0, { 0 }, &_IO_stdfile_##FD##_lock, \
> + _IO_pos_BAD, NULL, WDP, NULL }
> # endif
> #else
> # ifdef _IO_USE_OLD_IO_FILE
> # define FILEBUF_LITERAL(CHAIN, FLAGS, FD, WDP) \
> { _IO_MAGIC+_IO_LINKED+_IO_IS_FILEBUF+FLAGS, \
> NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, \
> - NULL, NULL, (FILE *) CHAIN, FD, \
> - 0, _IO_pos_BAD }
> + NULL, NULL, (FILE *) CHAIN, FD, 0, { 0 }, \
> + _IO_pos_BAD }
> # else
> # define FILEBUF_LITERAL(CHAIN, FLAGS, FD, WDP) \
> { _IO_MAGIC+_IO_LINKED+_IO_IS_FILEBUF+FLAGS, \
> NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, \
> - NULL, NULL, (FILE *) CHAIN, FD, \
> - 0, _IO_pos_BAD, 0, 0, { 0 }, 0, _IO_pos_BAD, \
> - NULL, WDP, NULL }
> + NULL, NULL, (FILE *) CHAIN, FD, 0, { 0 }, \
> + _IO_pos_BAD, 0, 0, { 0 }, NULL, \
> + _IO_pos_BAD, NULL, WDP, NULL }
OK, line breaks now aligned, thank you. As mentioned for v6 please split
the final NULL fix off from this change.
> @@ -1040,6 +1041,15 @@ IO_validate_vtable (const struct _IO_jump_t *vtable)
> return vtable;
> }
>
> +/* In case of an allocation failure, we resort to using the fixed buffer
> + _SHORT_BACKUPBUF. Free PTR unless it points to that buffer. */
OK.
> +static __always_inline void
> +_IO_free_backup_buf (FILE *fp, char *ptr)
OK.
No need to repost as far as I'm concerned just for the NULL fix update
mentioned above; this is:
Reviewed-by: Maciej W. Rozycki <macro@redhat.com>
with said update applied. Thank you for your contribution.
Maciej
More information about the Libc-alpha
mailing list