summaryrefslogtreecommitdiff
path: root/src/stage4/lib
diff options
context:
space:
mode:
authorspv420 <spv@spv.sh>2022-07-31 23:17:04 -0400
committerspv420 <spv@spv.sh>2022-07-31 23:17:04 -0400
commit4e83accca238c1c064042bdbfa5fe2579032dbfe (patch)
tree6c7e28da83a73389e18c50ee44732b28247490b5 /src/stage4/lib
parent4c1c94baadd86802320cb1fd9b058df98a3b78ad (diff)
fuck
Diffstat (limited to 'src/stage4/lib')
-rw-r--r--src/stage4/lib/native_ptr.js56
1 files changed, 44 insertions, 12 deletions
diff --git a/src/stage4/lib/native_ptr.js b/src/stage4/lib/native_ptr.js
index 8c11306..47d23ca 100644
--- a/src/stage4/lib/native_ptr.js
+++ b/src/stage4/lib/native_ptr.js
@@ -1,28 +1,24 @@
class native_ptr {
// constructor(addy, size = 4, buf_to_obj = u8x4_to_u32) {
constructor() {
- this.addy = arguments[0];
+ this.addy = arguments[1];
+ this.count = arguments[0];
var our_proto = Object.getPrototypeOf(this);
p0laris_log(JSON.stringify(Object.getPrototypeOf(this)));
if (our_proto.predef == true) {
- p0laris_log("lol");
this.size = our_proto.size;
this.buf_to_obj = our_proto.buf_to_obj;
this.obj_to_buf = our_proto.obj_to_buf;
} else {
- this.size = arguments[1];
- this.buf_to_obj = arguments[2];
- this.obj_to_buf = arguments[3];
+ this.size = arguments[2];
+ this.buf_to_obj = arguments[3];
+ this.obj_to_buf = arguments[4];
}
- if (this.addy === undefined) {
- this.addy = shit_heap(this.size);
- }
-
- if (our_proto.predef == true) {
- return;
+ if (this.count === undefined) {
+ this.count = 1;
}
if (this.size === undefined) {
@@ -32,9 +28,14 @@ class native_ptr {
if (this.buf_to_obj === undefined) {
this.buf_to_obj = u8x4_to_u32;
}
+
if (this.obj_to_buf === undefined) {
this.obj_to_buf = u32_to_u8x4;
}
+
+ if (this.addy === undefined) {
+ this.addy = shit_heap(this.size * this.count);
+ }
}
deref() {
@@ -94,6 +95,37 @@ function mach_msg_ool_ports_descriptor_t_buf_to_obj(buf) {
return ret;
}
+function mach_msg_ool_ports_descriptor_t_obj_to_buf(obj) {
+ var ret = new Uint8Array(12);
+ var tmp;
+
+ tmp = u32_to_u8x4(obj.address);
+
+ ret[0] = tmp[0];
+ ret[1] = tmp[1];
+ ret[2] = tmp[2];
+ ret[3] = tmp[3];
+
+ tmp = u32_to_u8x4(obj.count);
+
+ ret[0 + 4] = tmp[0];
+ ret[1 + 4] = tmp[1];
+ ret[2 + 4] = tmp[2];
+ ret[3 + 4] = tmp[3];
+
+ if (typeof obj.deallocate === 'boolean') {
+ ret[8] = obj.deallocate ? 1 : 0;
+ } else {
+ ret[8] = obj.deallocate;
+ }
+
+ ret[9] = obj.copy;
+ ret[10] = obj.disposition;
+ ret[11] = obj.type;
+
+ return ret;
+}
+
var mach_msg_ool_ports_descriptor_t = native_ptr_type(12,
mach_msg_ool_ports_descriptor_t_buf_to_obj,
- function(){}); \ No newline at end of file
+ mach_msg_ool_ports_descriptor_t_obj_to_buf); \ No newline at end of file