diff options
author | Alon Zakai <alonzakai@gmail.com> | 2013-07-29 19:52:53 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2013-07-29 19:52:53 -0700 |
commit | acf2390683de5b0616cb705ec6467d1ddf29d24d (patch) | |
tree | 635874a0997a9bc78a571fb0009e7e2a2bf43494 /src | |
parent | 0fb0ee563b287d022877a30e265bcc96687d628f (diff) |
use fgetc/ungetc in fscanf; properly fixes #1436
Diffstat (limited to 'src')
-rw-r--r-- | src/library.js | 16 |
1 files changed, 3 insertions, 13 deletions
diff --git a/src/library.js b/src/library.js index 59f2f6c6..893bd32a 100644 --- a/src/library.js +++ b/src/library.js @@ -3653,29 +3653,19 @@ LibraryManager.library = { ___setErrNo(ERRNO_CODES.EAGAIN); return -1; }, - fscanf__deps: ['$FS', '__setErrNo', '$ERRNO_CODES', - '_scanString', 'fgetc', 'fseek', 'ftell'], + fscanf__deps: ['$FS', '_scanString', 'fgetc', 'ungetc'], fscanf: function(stream, format, varargs) { // int fscanf(FILE *restrict stream, const char *restrict format, ... ); // http://pubs.opengroup.org/onlinepubs/000095399/functions/scanf.html if (FS.streams[stream]) { - var i = _ftell(stream), SEEK_SET = 0; - // if the stream does not support seeking backwards (e.g. stdin), buffer it here - var buffer = [], bufferIndex = 0; + var buffer = []; var get = function() { - if (bufferIndex < buffer.length) { - return buffer[bufferIndex++]; - } - i++; - bufferIndex++; var c = _fgetc(stream); buffer.push(c); return c; }; var unget = function() { - if (_fseek(stream, --i, SEEK_SET) !== 0) { - bufferIndex--; - } + _ungetc(buffer.pop(), stream); }; return __scanString(format, get, unget, varargs); } else { |