aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2013-03-18 21:52:37 -0700
committerAlon Zakai <alonzakai@gmail.com>2013-03-18 21:52:37 -0700
commit8754ddc7e358b04aefbb453f3d07fd597474a1bf (patch)
treee2f9a1eb08cda1acd2c7ce09cdb427d4919d4b7b
parent10f6f6303cc8bf691ccebd75410b953a0e9dde12 (diff)
parentec8e3e0ade3fd5554a5303834d308891a3fca5d2 (diff)
Merge pull request #945 from ting-yuan/incoming
Fix the return value of fgets().
-rw-r--r--AUTHORS1
-rw-r--r--src/library.js2
-rwxr-xr-xtests/runner.py24
3 files changed, 26 insertions, 1 deletions
diff --git a/AUTHORS b/AUTHORS
index 0eb8f7df..0fa41dd2 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -54,4 +54,5 @@ a license to everyone to use it as detailed in LICENSE.)
* Lorant Pinter <lorant.pinter@prezi.com>
* Tobias Doerffel <tobias.doerffel@gmail.com>
* Martin von Gagern <martin@von-gagern.net>
+* Ting-Yuan Huang <thuang@mozilla.com>
diff --git a/src/library.js b/src/library.js
index d7efb34f..d5f11cf3 100644
--- a/src/library.js
+++ b/src/library.js
@@ -3170,7 +3170,7 @@ LibraryManager.library = {
for (var i = 0; i < n - 1 && byte_ != {{{ charCode('\n') }}}; i++) {
byte_ = _fgetc(stream);
if (byte_ == -1) {
- if (streamObj.error) return 0;
+ if (streamObj.error || (streamObj.eof && i == 0)) return 0;
else if (streamObj.eof) break;
}
{{{ makeSetValue('s', 'i', 'byte_', 'i8') }}}
diff --git a/tests/runner.py b/tests/runner.py
index 1a030eae..529dcc48 100755
--- a/tests/runner.py
+++ b/tests/runner.py
@@ -5795,6 +5795,30 @@ def process(filename):
self.emcc_args += ['--embed-file', 'file_with_byte_234.txt']
self.do_run(src, '*234\n')
+ def test_fgets_eol(self):
+ if self.emcc_args is None: return self.skip('requires emcc')
+ src = r'''
+ #include <stdio.h>
+ char buf[32];
+ int main()
+ {
+ char *r = "SUCCESS";
+ FILE *f = fopen("eol.txt", "r");
+ while (fgets(buf, 32, f) != NULL) {
+ if (buf[0] == '\0') {
+ r = "FAIL";
+ break;
+ }
+ }
+ printf("%s\n", r);
+ fclose(f);
+ return 0;
+ }
+ '''
+ open('eol.txt', 'wb').write('\n')
+ self.emcc_args += ['--embed-file', 'eol.txt']
+ self.do_run(src, 'SUCCESS\n')
+
def test_folders(self):
add_pre_run = '''
def process(filename):