diff --git a/lib/http.js b/lib/http.js index 554f047d4b..da957eaece 100644 --- a/lib/http.js +++ b/lib/http.js @@ -707,8 +707,7 @@ exports.cat = function (url, encoding_, headers_) { }); client.addListener("error", function (err) { - // todo an error should actually be passed here... - if (callback) callback(new Error('Connection error')); + if (callback) callback(err); }); req.close(); diff --git a/lib/net.js b/lib/net.js index d4926c6471..191d872c07 100644 --- a/lib/net.js +++ b/lib/net.js @@ -443,20 +443,23 @@ Stream.prototype._writeOut = function (data, encoding) { allocNewPool(); } - if (encoding == 'utf8' || encoding == 'utf-8') { + if (encoding == 'binary') { + bytesWritten = pool.binaryWrite(data, pool.used); + charsWritten = bytesWritten; + } else if (encoding == 'ascii') { + bytesWritten = pool.asciiWrite(data, pool.used); + charsWritten = bytesWritten; + + } else { + // default to utf8 bytesWritten = pool.utf8Write(data, pool.used); + // Don't include the null + if (pool[pool.used + bytesWritten-1] == 0) bytesWritten--; // XXX Hacky way to find out the number of characters written. // Waiting for a more optimal way: http://codereview.chromium.org/1539013 var _s = pool.utf8Slice(pool.used, pool.used + bytesWritten); charsWritten = _s.length; - } else if (encoding == 'ascii') { - bytesWritten = pool.asciiWrite(data, pool.used); - charsWritten = bytesWritten; - assert(charsWritten <= data.length); - } else { - bytesWritten = pool.binaryWrite(data, pool.used); - charsWritten = bytesWritten; - assert(charsWritten <= data.length); + } assert(bytesWritten > 0); diff --git a/src/node.cc b/src/node.cc index 452c111b11..4965237024 100644 --- a/src/node.cc +++ b/src/node.cc @@ -218,7 +218,8 @@ ssize_t DecodeBytes(v8::Handle val, enum encoding encoding) { #endif // Returns number of bytes written. -ssize_t DecodeWrite(char *buf, size_t buflen, +ssize_t DecodeWrite(char *buf, + size_t buflen, v8::Handle val, enum encoding encoding) { HandleScope scope; diff --git a/test/simple/test-http-chunked.js b/test/simple/test-http-chunked.js index a838235472..a3395fcb9c 100644 --- a/test/simple/test-http-chunked.js +++ b/test/simple/test-http-chunked.js @@ -1,7 +1,7 @@ require("../common"); var http = require("http"); -var UTF8_STRING = "Il était tué"; +var UTF8_STRING = "南越国是前203年至前111年存在于岭南地区的一个国家,国都位于番禺,疆域包括今天中国的广东、广西两省区的大部份地区,福建省、湖南、贵州、云南的一小部份地区和越南的北部。南越国是秦朝灭亡后,由南海郡尉赵佗于前203年起兵兼并桂林郡和象郡后建立。前196年和前179年,南越国曾先后两次名义上臣属于西汉,成为西汉的“外臣”。前112年,南越国末代君主赵建德与西汉发生战争,被汉武帝于前111年所灭。南越国共存在93年,历经五代君主。南越国是岭南地区的第一个有记载的政权国家,采用封建制和郡县制并存的制度,它的建立保证了秦末乱世岭南地区社会秩序的稳定,有效的改善了岭南地区落后的政治、经济现状。"; var server = http.createServer(function(req, res) { res.writeHead(200, {"Content-Type": "text/plain; charset=utf8"}); @@ -12,6 +12,9 @@ server.listen(PORT); http.cat("http://127.0.0.1:"+PORT+"/", "utf8", function (err, data) { if (err) throw err; + assert.equal('string', typeof data); + puts('here is the response:'); assert.equal(UTF8_STRING, data); + puts(data); server.close(); })