Merge pull request #28 from santigimeno/fix_unpack_bufferx

Add support for signed data in unpackbuffer
This commit is contained in:
Andrey Sidorov 2013-05-21 06:35:31 -07:00
commit 877d263a93
2 changed files with 23 additions and 19 deletions

View file

@ -488,7 +488,7 @@ module.exports = {
},
function(buf)
{
var res = buf.unpack('LSS');
var res = buf.unpack('Lss');
ext = {};
ext.child = res[0];
ext.destX = res[1];
@ -682,7 +682,7 @@ module.exports = {
PolyText8: [
function(drawable, gc, x, y, items) {
var format = 'CxSLLSS';
var format = 'CxSLLss';
var numItems = items.length;
var reqLen = 16;
var args = [74, 0, drawable, gc, x, y];
@ -801,7 +801,7 @@ module.exports = {
},
function(buff)
{
var res = buff.unpack('LSSSSSx');
var res = buff.unpack('LssSSSx');
var ext = {};
ext.windowid = res[0]
ext.xPos = res[1];
@ -821,7 +821,7 @@ module.exports = {
SetScreenSaver: [
function(timeout, interval, preferBlanking, allowExposures) {
return [ 'CxSSSCCxx', [107, 3, timeout, interval, preferBlanking, allowExposures]];
return [ 'CxSssCCxx', [107, 3, timeout, interval, preferBlanking, allowExposures]];
}
],

View file

@ -22,27 +22,31 @@ module.exports.addUnpack = function(Buffer)
{
var arg = format[current_arg];
switch (arg) {
case 'C':
data.push(this[offset++]);
case 'C':
data.push(this.readUInt8(offset++));
break;
case 'c':
data.push(this.readInt8(offset++));
break;
case 'S':
case 's': //TODO: 16bit signed unpack
var b1 = this[offset++];
var b2 = this[offset++];
data.push(b2*256+b1);
data.push(this.readUInt16LE(offset));
offset += 2;
break;
case 's':
data.push(this.readInt16LE(offset));
offset += 2;
break;
case 'n':
var b1 = this[offset++];
var b2 = this[offset++];
data.push(b1*256+b2);
data.push(this.readUInt16BE(offset));
offset += 2;
break;
case 'L':
case 'l': //TODO: 32bit signed unpack
var b1 = this[offset++];
var b2 = this[offset++];
var b3 = this[offset++];
var b4 = this[offset++];
data.push(((b4*256+b3)*256 + b2)*256 + b1);
data.push(this.readUInt32LE(offset));
offset += 4;
break;
case 'l':
data.push(this.readInt32LE(offset));
offset += 4;
break;
case 'x':
offset++;