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}