| aubi_io_write_data_wl#(PNUM, N, BUF; APEBS; ERR) {if ubi-io-write-data-wl-pre(PNUM, N, BUF, APEBS) then {fail_or_success#(; ; ERR); if ERR = ESUCCESS then APEBS[PNUM] := mkpeb(APEBS[PNUM].echdr, APEBS[PNUM].vidhdr, subarray(BUF, 0, N) + mkempbuf(LEB_SIZE - N), N, APEBS[PNUM].bad) else choose BUF0 with # BUF0 ≤ N ∧ is-aligned(# BUF0, EB_PAGE_SIZE) ∧ ( datasize(BUF0, # BUF0) < datasize(BUF, N) ∨ checksum(BUF0 + mkempbuf(N - # BUF0), datasize(BUF, N)) ≠ checksum(BUF, datasize(BUF, N))) in APEBS[PNUM] := mkpeb(APEBS[PNUM].echdr, APEBS[PNUM].vidhdr, BUF0 + mkempbuf(LEB_SIZE - # BUF0), # BUF0, APEBS[PNUM].bad)} else abort } |