aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2013-07-29 19:52:53 -0700
committerAlon Zakai <alonzakai@gmail.com>2013-07-29 19:52:53 -0700
commitacf2390683de5b0616cb705ec6467d1ddf29d24d (patch)
tree635874a0997a9bc78a571fb0009e7e2a2bf43494 /src
parent0fb0ee563b287d022877a30e265bcc96687d628f (diff)
use fgetc/ungetc in fscanf; properly fixes #1436
Diffstat (limited to 'src')
-rw-r--r--src/library.js16
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 {