nx_wflow_bind_event_owned_t282.nx source
↩ module page · 44 lines · 1388 B
1import "nx_wflow_engine.nx"
2func wf_bind_event_owned(cx: *i64, rid: *u8, ev: *u8) -> i64 {
3 let n:i64=slen(ev)
4 if n==9223372036854775807{return WF_EVIDENCE_ERROR}
5 let bytes:i64=n+1
6 let kb:*u8=sys_mmap_try(bytes)
7 if (kb as i64)<=0{return WF_EVIDENCE_ERROR}
8 let vb:*u8=sys_mmap_try(bytes)
9 if (vb as i64)<=0{sys_munmap(kb,bytes);return WF_EVIDENCE_ERROR}
10 var i:i64=0
11 var bound:i64=0
12 var result:i64=0
13 while i<n {
14 if ev[i]!=(126 as u8){i=i+1}
15 else {
16 var j:i64=i+1
17 var kn:i64=0
18 var haseq:i64=0
19 while j<n {
20 if ev[j]==(126 as u8){break}
21 if ev[j]==(61 as u8){haseq=1;j=j+1;break}
22 kb[kn]=ev[j];kn=kn+1;j=j+1
23 }
24 kb[kn]=0 as u8
25 if haseq==1 {
26 var vn:i64=0
27 while j<n {
28 if ev[j]==(126 as u8){break}
29 vb[vn]=ev[j];vn=vn+1;j=j+1
30 }
31 vb[vn]=0 as u8
32 if kn>0 {
33 if wf_emit_var(cx[2] as *u8,rid,kb,vb)!=0{result=WF_EVIDENCE_ERROR;break}
34 bound=bound+1
35 }
36 }
37 i=j
38 }
39 }
40 let kr:i64=sys_munmap(kb,bytes)
41 let vr:i64=sys_munmap(vb,bytes)
42 if result!=0||kr!=0||vr!=0{return WF_EVIDENCE_ERROR}
43 return bound
44}