From 73dda10b1a5d1e0dc910de9f687de6989ed6e52e Mon Sep 17 00:00:00 2001 From: Andrey Sidorov Date: Sat, 8 Mar 2014 19:04:49 +1100 Subject: [PATCH] glx error parsers #49 --- lib/ext/glx.js | 22 ++++++++++++++++++++++ lib/xcore.js | 27 ++++++++++----------------- 2 files changed, 32 insertions(+), 17 deletions(-) diff --git a/lib/ext/glx.js b/lib/ext/glx.js index 95e57d1..a24da66 100644 --- a/lib/ext/glx.js +++ b/lib/ext/glx.js @@ -294,6 +294,28 @@ exports.requireExt = function(display, callback) return require('./glxrender')(this, ctx); } + var errors = [ + "context", + "contect state", + "drawable", + "pixmap", + "context tag", + "current window", + "Render request", + "RenderLarge request", + "(unsupported) VendorPrivate request", + "FB config", + "pbuffer", + "current drawable", + "window" + ]; + + errors.forEach(function(message, code) { + X.errorParsers[ext.firstError + code] = function(err) { + err.message = "GLX: Bad " + message; + }; + }); + callback(ext); }); } diff --git a/lib/xcore.js b/lib/xcore.js index 956904e..f5c7ade 100644 --- a/lib/xcore.js +++ b/lib/xcore.js @@ -418,7 +418,6 @@ XClient.prototype.expectReplyHeader = function() var error = new Error(); error.error = error_code; error.seq = seq_num; - error.message = xerrors.errorText[error_code]; if (client.options.debug) { error.longstack = client.seq2stack[error.seq] console.log(client.seq2stack[error.seq].stack); @@ -426,24 +425,18 @@ XClient.prototype.expectReplyHeader = function() // unpack error packet (32 bytes for all error types, 8 of them in CCSL header) client.pack_stream.get(24, function(buf) { + + var res = buf.unpack('SC'); + error.message = xerrors.errorText[error_code]; + error.badParam = bad_value; + error.minorOpcode = res[0]; + error.majorOpcode = res[1]; - var extUnpacker = client.errorParsers[type]; - if (extUnpacker) { - var event = extUnpacker(type, seq_num, bad_value, body); - client.emit(error, event); - client.expectReplyHeader(); - return; - } - - // TODO: dispatch, use sequence number - //TODO: add more generic way to read common values - // if (error_code == 14) - { - var res = buf.unpack('SC'); - error.badParam = bad_value; - error.minorOpcode = res[0]; - error.majorOpcode = res[1]; + var extUnpacker = client.errorParsers[error_code]; + if (extUnpacker) { + extUnpacker(error, error_code, seq_num, bad_value, buf); } + var handler = client.replies[seq_num]; if (handler) { var callback = handler[1];