Beispiel #1
0
function setRef (buffer, offset, value) {
  debug('Array reference "type" setter for buffer at offset', offset)
  var ptr
  if (value instanceof this) {
    ptr = value.buffer
  } else {
    ptr = new this(value).buffer
  }
  _ref.writePointer(buffer, offset, ptr)
}
Beispiel #2
0
    function completer(text, start, end) {
      var result = null;
      rl_attempted_completion_over.writeUInt8(1);
      //opts.completer(text, (results) => fs.writeFileSync(pipe[1], JSON.stringify(results) + "\n"));
      //var rl_line_buffer = libreadline_so.get('rl_line_buffer');
      text = rl_line_buffer.readPointer().readCString();
      opts.completer(text, function(err, results) {
        var j = new Buffer(JSON.stringify(results) + "\n");
        libc.write(pipe[1], j, Buffer.byteLength(j));
      });
      var bytes = libc.read(pipe[0], buffer, buffer.length - 1);
      if (bytes >= 0)
        buffer.writeUInt8(0, bytes);
      else
        console.log("read() failed!");

      try {
        result = JSON.parse(ref.readCString(buffer, 0));
        result = result[0].map((s) => s.substring(start).trimRight()).filter((s) => s.trim().length);
      } catch(e) {
        console.log("Cannot read JSON at " + ref.readCString(buffer, 0) + " / " + util.inspect(ref.readCString(buffer,0)));
        console.log(e);
        return ref.NULL_POINTER.deref();
      }
      if (result === null) result = [];
      if (result.length > 1)
        result.unshift(text.substring(start));
      else if (result.length === 0)
        return ref.NULL_POINTER.deref();
      var out = ref.alloc(ArrayType('string', result.length + 1));
      var cstr = result.map((s) => ref.allocCString(s));
      cstr = cstr.map((s) => libc.strdup(s));
      for(var i = 0; i < result.length; i++)
        ref._writePointer(out, i * ref.sizeof.pointer, cstr[i]);
      ref.writePointer(out, result.length * ref.sizeof.pointer, ref.NULL_POINTER.deref());
      var mem = libc.malloc(out.length);
      libc.memcpy(mem, out, out.length);
      //libc.abort(mem);
      return mem;
    }