aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2011-08-24 07:36:16 -0700
committerAlon Zakai <alonzakai@gmail.com>2011-08-24 07:36:16 -0700
commit66bd589944ccdb9b9c9f6278784b92dac5eb1085 (patch)
tree016419c2c694def47ca26bb3a77b58893c2bfa20
parent2d927106834107f492ade2be6b183375be84555e (diff)
tweak some allocations in library to prevent problems with debug printing inside malloc calls
-rw-r--r--src/library.js35
1 files changed, 16 insertions, 19 deletions
diff --git a/src/library.js b/src/library.js
index a7ac6fc0..e6ca3851 100644
--- a/src/library.js
+++ b/src/library.js
@@ -393,6 +393,10 @@ LibraryManager.library = {
// Once initialized, permissions start having effect.
FS.ignorePermissions = false;
+
+ // Allocate some necessary buffers now
+ FS.buffer1 = allocate([0], 'i8', ALLOC_STATIC);
+ FS.errno = allocate([0], 'i32', ALLOC_STATIC)
}
},
@@ -728,9 +732,8 @@ LibraryManager.library = {
return -1;
} else {
var pathArray = intArrayFromString(FS.streams[fildes].path);
- var pathPtr = allocate(pathArray, 'i8', ALLOC_NORMAL);
+ var pathPtr = allocate(pathArray, 'i8', ALLOC_STACK);
var result = _stat(pathPtr, buf);
- _free(pathPtr);
return result;
}
},
@@ -791,9 +794,8 @@ LibraryManager.library = {
return -1;
} else {
var pathArray = intArrayFromString(FS.streams[fildes].path);
- var pathPtr = allocate(pathArray, 'i8', ALLOC_NORMAL);
+ var pathPtr = allocate(pathArray, 'i8', ALLOC_STACK);
var result = _chmod(pathPtr, mode);
- _free(pathPtr);
return result;
}
},
@@ -2634,10 +2636,9 @@ LibraryManager.library = {
// int fgetc(FILE *stream);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/fgetc.html
if (!(stream in FS.streams)) return -1;
- if (!_fgetc.buffer) _fgetc.buffer = _malloc(1);
var streamObj = FS.streams[stream];
if (streamObj.eof || streamObj.error) return -1;
- var ret = _read(stream, _fgetc.buffer, 1);
+ var ret = _read(stream, FS.buffer1, 1);
if (ret == 0) {
streamObj.eof = true;
return -1;
@@ -2645,7 +2646,7 @@ LibraryManager.library = {
streamObj.error = true;
return -1;
} else {
- return {{{ makeGetValue('_fgetc.buffer', '0', 'i8') }}};
+ return {{{ makeGetValue('FS.buffer1', '0', 'i8') }}};
}
},
getc: 'fgetc',
@@ -2750,14 +2751,13 @@ LibraryManager.library = {
var ret = _open(filename, flags, 0x1FF); // All creation permissions.
return (ret == -1) ? 0 : ret;
},
- fputc__deps: ['write'],
+ fputc__deps: ['$FS', 'write'],
fputc: function(c, stream) {
// int fputc(int c, FILE *stream);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/fputc.html
- if (!_fputc.buffer) _fputc.buffer = _malloc(1);
var chr = unSign(c & 0xFF);
- {{{ makeSetValue('_fputc.buffer', '0', 'chr', 'i8') }}}
- var ret = _write(stream, _fputc.buffer, 1);
+ {{{ makeSetValue('FS.buffer1', '0', 'chr', 'i8') }}}
+ var ret = _write(stream, FS.buffer1, 1);
if (ret == -1) {
if (stream in FS.streams) FS.streams[stream].error = true;
return -1;
@@ -3087,9 +3087,8 @@ LibraryManager.library = {
var args = Array.prototype.slice.call(arguments, 1);
args.unshift(false);
var result = __formatString.apply(null, args);
- var buffer = allocate(result, 'i8', ALLOC_NORMAL);
+ var buffer = allocate(result, 'i8', ALLOC_STACK);
var ret = _fwrite(buffer, 1, result.length, stream);
- _free(buffer);
return ret;
},
printf__deps: ['fprintf'],
@@ -3112,9 +3111,8 @@ LibraryManager.library = {
// int vfprintf(FILE *restrict stream, const char *restrict format, va_list ap);
// http://pubs.opengroup.org/onlinepubs/000095399/functions/vprintf.html
var result = __formatString(true, format, ap);
- var buffer = allocate(result, 'i8', ALLOC_NORMAL);
+ var buffer = allocate(result, 'i8', ALLOC_STACK);
var ret = _fwrite(buffer, 1, result.length, stream);
- _free(buffer);
return ret;
},
vsnprintf__deps: ['_formatString'],
@@ -5087,17 +5085,16 @@ LibraryManager.library = {
26: 'Text file busy',
18: 'Invalid cross-device link'
},
+ __setErrNo__deps: ['$FS'],
__setErrNo: function(value) {
// For convenient setting and returning of errno.
var me = ___setErrNo;
- if (!me.ptr) me.ptr = allocate([0], 'i32', ALLOC_NORMAL);
- {{{ makeSetValue('me.ptr', '0', 'value', 'i32') }}}
+ {{{ makeSetValue('FS.errno', '0', 'value', 'i32') }}}
return value;
},
__errno_location__deps: ['__setErrNo'],
__errno_location: function() {
- if (!___setErrNo.ptr) ___setErrNo(0);
- return ___setErrNo.ptr;
+ return FS.errno;
},
// ==========================================================================