ungetc.c 537 B

1234567891011121314151617181920212223242526
  1. /*
  2. * ungetc.c - push a character back onto an input stream
  3. */
  4. /* $Id$ */
  5. #include <stdio.h>
  6. #include "loc_incl.h"
  7. int
  8. ungetc(int ch, FILE *stream)
  9. {
  10. unsigned char *p;
  11. if (ch == EOF || !io_testflag(stream,_IOREADING))
  12. return EOF;
  13. if (stream->_ptr == stream->_buf) {
  14. if (stream->_count != 0) return EOF;
  15. stream->_ptr++;
  16. }
  17. stream->_count++;
  18. p = --(stream->_ptr); /* ??? Bloody vax assembler !!! */
  19. /* ungetc() in sscanf() shouldn't write in rom */
  20. if (*p != (unsigned char) ch)
  21. *p = (unsigned char) ch;
  22. return ch;
  23. }