code wiki / _hdl_build / nx_album_probe.nx

nx_album_probe.nx source

↩ module page · 51 lines · 2096 B

1// nx_album_probe.nx -- bisect the containment segfault. Print between every step so the last line printed 2// names the call that died. Diagnose, do not guess. 3// license_tier: ORIGINAL expect_exit: 0 4import "nx_connect_album.nx" 5const PB_MAGIC_7001: i64 = 7001 6 7const PB_OUT: i64 = 8192 8func p_w(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(1,s,n); return 0 } 9 10func main() -> i64 { 11 let out: *u8 = sys_mmap(PB_OUT) 12 let pfx: *u8 = sys_mmap(128); var o: i64 = 0 13 o = rb_cat(pfx, o, "/tmp/albprobe_" as *u8); o = rb_catn(pfx, o, sys_now_us()); o = rb_cat(pfx, o, "_" as *u8) 14 pfx[o] = 0 as u8 15 16 p_w("1 claim...\n" as *u8) 17 al_do(pfx, "claim" as *u8, 1001, 0, "album\x00" as *u8, PB_MAGIC_7001, "-\x00" as *u8, out, PB_OUT) 18 p_w(" -> " as *u8); p_w(out); p_w("\n" as *u8) 19 20 p_w("2 sg_may ADD (the permission the add verb checks)...\n" as *u8) 21 let may_add: i64 = sg_may(pfx, 1001, "album\x00" as *u8, PB_MAGIC_7001, SG_ADD) 22 p_w(" -> ok\n" as *u8) 23 24 p_w("3 al_item_obj...\n" as *u8) 25 let iob: *u8 = sys_mmap(256) 26 al_item_obj("cid_aaa\x00" as *u8, iob) 27 p_w(" -> " as *u8); p_w(iob); p_w("\n" as *u8) 28 29 p_w("4 rb_put contains-tuple...\n" as *u8) 30 let alb: *u8 = sys_mmap(256); sg_obj("album\x00" as *u8, PB_MAGIC_7001, alb) 31 let asub: *u8 = sys_mmap(64); sg_sub(1001, asub) 32 rb_put(pfx, alb, AL_R_CONTAINS, iob, asub, 1) 33 p_w(" -> ok\n" as *u8) 34 35 p_w("5 rb_list_subjects contains...\n" as *u8) 36 let it: *i64 = sys_mmap(8*64) as *i64 37 let n: i64 = rb_list_subjects(pfx, alb, AL_R_CONTAINS, it, 64) 38 p_w(" -> ok\n" as *u8) 39 40 p_w("6 add verb end-to-end...\n" as *u8) 41 al_do(pfx, "add" as *u8, 1001, 0, "album\x00" as *u8, PB_MAGIC_7001, "cid_bbb\x00" as *u8, out, PB_OUT) 42 p_w(" -> " as *u8); p_w(out); p_w("\n" as *u8) 43 44 p_w("7 items verb...\n" as *u8) 45 al_do(pfx, "items" as *u8, 1001, 0, "album\x00" as *u8, PB_MAGIC_7001, "-\x00" as *u8, out, PB_OUT) 46 p_w(" -> " as *u8); p_w(out); p_w("\n" as *u8) 47 48 p_w("ALL STEPS SURVIVED\n" as *u8) 49 sys_exit(0) 50 return 0 51}