code wiki / (root) / nx_wflow_bind_event_owned_t282.nx

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}