File tree Expand file tree Collapse file tree 1 file changed +31
-26
lines changed Expand file tree Collapse file tree 1 file changed +31
-26
lines changed Original file line number Diff line number Diff line change 55 public _strlcat
66
77_strlcat:
8- push ix
9- ld ix, 0
10- lea bc, ix
11- add ix, sp
12- ld hl, (ix + 9) ; src
8+ ld iy, 0
9+ lea bc, iy
10+ add iy, sp
11+ ld hl, (iy + 6) ; src
1312 xor a, a
1413 cpir
1514 sbc hl, hl
16- scf
15+ dec hl
1716 sbc hl, bc
18- push hl ; src_len
17+ ; carry is clear
18+ ex de, hl
1919
20- ld de, (ix + 12) ; max_size
20+ ; inlined strnlen
21+ ld bc, (iy + 9) ; max_size
2122 sbc hl, hl
22- adc hl, de
23+ sbc hl, bc
2324 ; Allows dst to be NULL when max_size is zero
24- jr z, .zero_size
25-
26- push de
27- ld hl, (ix + 6) ; dst
28- push hl
29- call _strnlen
30- pop af
31- pop af
25+ jr z, .zero_size ; return src_len
26+ add hl, bc
27+ push de ; src_len
28+ ld de, (iy + 3) ; dst
29+ sbc hl, de
30+ ex de, hl
31+ cpir
32+ add hl, de
33+ jr z, .finish_strnlen
34+ inc hl
35+ .finish_strnlen:
3236
3337 ex de, hl
34- ld hl, (ix + 12 ) ; max_size
38+ ld hl, (iy + 9 ) ; max_size
3539 ; (copy_size + 1) = max_size - dst_len
3640 xor a, a
3741 sbc hl, de
42+ jr z, .no_room
43+
3844 pop bc ; src_len
3945 push bc
40- jr z, .no_room
46+
4147 ; (copy_size + 1) - src_len - 1
4248 scf
4349 sbc hl, bc
@@ -50,22 +56,21 @@ _strlcat:
5056 xor a, a
5157 adc hl, bc
5258 jr z, .zero_copy_size
53- push de ; dst_len
5459 push hl
5560 pop bc
56- ld hl, (ix + 6) ; dst
61+
62+ push de ; dst_len
63+ ld hl, (iy + 3) ; dst
5764 add hl, de ; dst + dst_len
5865 ex de, hl
59- ld hl, (ix + 9 ) ; src
66+ ld hl, (iy + 6 ) ; src
6067 ldir
6168 ld (de), a ; null terminate
6269 pop de ; dst_len
6370.zero_copy_size:
6471.no_room:
65- .zero_size:
6672 pop hl ; src_len
73+ .zero_size:
74+ ; return src_len + dst_len
6775 add hl, de
68- pop ix
6976 ret
70-
71- extern _strnlen
You can’t perform that action at this time.
0 commit comments