From 6145922589f55aa4dcb1336146dae0b81ea014e1 Mon Sep 17 00:00:00 2001 From: Alex Shinn Date: Sun, 11 Dec 2011 21:52:12 +0900 Subject: [PATCH] The non-string-stream variant of sexp_push_char shouldn't push EOF. Probably this shouldn't actually write the char to the buffer, I need to verify we never push a char that wasn't just read. --- include/chibi/sexp.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/chibi/sexp.h b/include/chibi/sexp.h index 119b209b..9e032aa3 100755 --- a/include/chibi/sexp.h +++ b/include/chibi/sexp.h @@ -1143,7 +1143,7 @@ enum sexp_context_globals { #else #define sexp_read_char(x, p) (sexp_port_buf(p) ? ((sexp_port_offset(p) < sexp_port_size(p)) ? sexp_port_buf(p)[sexp_port_offset(p)++] : sexp_buffered_read_char(x, p)) : getc(sexp_port_stream(p))) -#define sexp_push_char(x, c, p) (sexp_port_buf(p) ? (sexp_port_buf(p)[--sexp_port_offset(p)] = ((char)(c))) : ungetc(c, sexp_port_stream(p))) +#define sexp_push_char(x, c, p) ((c!=EOF) && (sexp_port_buf(p) ? (sexp_port_buf(p)[--sexp_port_offset(p)] = ((char)(c))) : ungetc(c, sexp_port_stream(p)))) #define sexp_write_char(x, c, p) (sexp_port_buf(p) ? ((sexp_port_offset(p) < sexp_port_size(p)) ? ((((sexp_port_buf(p))[sexp_port_offset(p)++]) = (char)(c)), SEXP_VOID) : sexp_buffered_write_char(x, c, p)) : (putc(c, sexp_port_stream(p)), SEXP_VOID)) #define sexp_write_string(x, s, p) (sexp_port_buf(p) ? sexp_buffered_write_string(x, s, p) : (fputs(s, sexp_port_stream(p)), SEXP_VOID)) #define sexp_flush(x, p) (sexp_port_buf(p) ? sexp_buffered_flush(x, p) : (fflush(sexp_port_stream(p)), SEXP_VOID))