Skip to content

Commit efde1af

Browse files
committed
Fill fixed-length strings with zeros
1 parent 7c9320f commit efde1af

3 files changed

Lines changed: 111 additions & 4 deletions

File tree

source/utilities/type.bas

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -678,7 +678,7 @@ SUB clear_udt_with_varstrings (n$, udt, buf, base_offset)
678678
WriteBufLine buf, "(*(qbs**)(((char*)" + n$ + ")+" + STR$(array_offset) + "))->len=0;"
679679
NEXT
680680
ELSE
681-
WriteBufLine buf, "memset((char*)" + n$ + "+" + STR$(offset) + ",32," + STR$(udtesize(element) \ 8) + ");"
681+
WriteBufLine buf, "memset((char*)" + n$ + "+" + STR$(offset) + ",0," + STR$(udtesize(element) \ 8) + ");"
682682
END IF
683683
ELSEIF udtetype(element) AND ISUDT THEN
684684
FOR array_i = 0 TO udtearrayelements(element) - 1
@@ -692,7 +692,7 @@ SUB clear_udt_with_varstrings (n$, udt, buf, base_offset)
692692
IF (udtetype(element) AND ISFIXEDLENGTH) = 0 THEN
693693
WriteBufLine buf, "(*(qbs**)(((char*)" + n$ + ")+" + STR$(offset) + "))->len=0;"
694694
ELSE
695-
WriteBufLine buf, "memset((char*)" + n$ + "+" + STR$(offset) + ",32," + STR$(udtesize(element) \ 8) + ");"
695+
WriteBufLine buf, "memset((char*)" + n$ + "+" + STR$(offset) + ",0," + STR$(udtesize(element) \ 8) + ");"
696696
END IF
697697
ELSEIF udtetype(element) AND ISUDT THEN
698698
clear_udt_with_varstrings n$, udtetype(element) AND 511, buf, offset
@@ -720,7 +720,7 @@ SUB clear_array_udt_varstrings (n$, udt, base_offset, bytesperelement$, acc$)
720720
acc$ = acc$ + CHR$(13) + CHR$(10) + "(*(qbs**)(" + n$ + "[0]+" + bytesperelement$ + "*tmp_long+" + STR$(array_offset) + "))->len=0;"
721721
NEXT
722722
ELSE
723-
acc$ = acc$ + CHR$(13) + CHR$(10) + "memset((void*)(" + n$ + "[0]+" + bytesperelement$ + "*tmp_long+" + STR$(offset) + "),32," + STR$(udtesize(element) \ 8) + ");"
723+
acc$ = acc$ + CHR$(13) + CHR$(10) + "memset((void*)(" + n$ + "[0]+" + bytesperelement$ + "*tmp_long+" + STR$(offset) + "),0," + STR$(udtesize(element) \ 8) + ");"
724724
END IF
725725
ELSEIF udtetype(element) AND ISUDT THEN
726726
FOR array_i = 0 TO udtearrayelements(element) - 1
@@ -734,7 +734,7 @@ SUB clear_array_udt_varstrings (n$, udt, base_offset, bytesperelement$, acc$)
734734
IF (udtetype(element) AND ISFIXEDLENGTH) = 0 THEN
735735
acc$ = acc$ + CHR$(13) + CHR$(10) + "(*(qbs**)(" + n$ + "[0]+" + bytesperelement$ + "*tmp_long+" + STR$(offset) + "))->len=0;"
736736
ELSE
737-
acc$ = acc$ + CHR$(13) + CHR$(10) + "memset((void*)(" + n$ + "[0]+" + bytesperelement$ + "*tmp_long+" + STR$(offset) + "),32," + STR$(udtesize(element) \ 8) + ");"
737+
acc$ = acc$ + CHR$(13) + CHR$(10) + "memset((void*)(" + n$ + "[0]+" + bytesperelement$ + "*tmp_long+" + STR$(offset) + "),0," + STR$(udtesize(element) \ 8) + ");"
738738
END IF
739739
ELSEIF udtetype(element) AND ISUDT THEN
740740
clear_array_udt_varstrings n$, udtetype(element) AND 511, offset, bytesperelement$, acc$
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
$CONSOLE:ONLY
2+
OPTION _EXPLICIT
3+
4+
TYPE T
5+
Values(0 To 2) AS STRING * 5
6+
END TYPE
7+
8+
DIM plain(0 TO 2) AS STRING * 5
9+
DIM one AS T
10+
DIM many(1) AS T
11+
DIM i AS LONG, j AS LONG
12+
13+
plain(0) = "AB"
14+
plain(1) = "XYZ"
15+
plain(2) = "HELLO"
16+
17+
ERASE plain
18+
FOR i = 0 TO 2
19+
FOR j = 1 TO 5
20+
IF ASC(plain(i), j) <> 0 THEN
21+
PRINT "FAIL 47_zero_fill_fixed_strings_erase_redim.bas: ERASE plain mismatch at"; i; j
22+
SYSTEM
23+
END IF
24+
NEXT j
25+
NEXT i
26+
27+
one.Values(0) = "AA"
28+
one.Values(1) = "BB"
29+
one.Values(2) = "CC"
30+
31+
ERASE one.Values
32+
FOR i = 0 TO 2
33+
FOR j = 1 TO 5
34+
IF ASC(one.Values(i), j) <> 0 THEN
35+
PRINT "FAIL 47_zero_fill_fixed_strings_erase_redim.bas: ERASE one.Values mismatch at"; i; j
36+
SYSTEM
37+
END IF
38+
NEXT j
39+
NEXT i
40+
41+
one.Values(0) = "11"
42+
one.Values(1) = "22"
43+
one.Values(2) = "33"
44+
45+
REDIM one.Values(0 To 2)
46+
FOR i = 0 TO 2
47+
FOR j = 1 TO 5
48+
IF ASC(one.Values(i), j) <> 0 THEN
49+
PRINT "FAIL 47_zero_fill_fixed_strings_erase_redim.bas: REDIM one.Values mismatch at"; i; j
50+
SYSTEM
51+
END IF
52+
NEXT j
53+
NEXT i
54+
55+
many(0).Values(1) = "AB"
56+
many(1).Values(2) = "CD"
57+
58+
ERASE many(1).Values
59+
FOR i = 0 TO 2
60+
FOR j = 1 TO 5
61+
IF ASC(many(1).Values(i), j) <> 0 THEN
62+
PRINT "FAIL 47_zero_fill_fixed_strings_erase_redim.bas: ERASE many(1).Values mismatch at"; i; j
63+
SYSTEM
64+
END IF
65+
NEXT j
66+
NEXT i
67+
68+
IF ASC(many(0).Values(1), 1) <> 65 OR ASC(many(0).Values(1), 2) <> 66 THEN
69+
PRINT "FAIL 47_zero_fill_fixed_strings_erase_redim.bas: many(0) changed unexpectedly"
70+
SYSTEM
71+
END IF
72+
73+
many(0).Values(0) = "X"
74+
many(0).Values(2) = "Y"
75+
many(1).Values(0) = "Z"
76+
77+
REDIM many(1).Values(0 To 2)
78+
FOR i = 0 TO 2
79+
FOR j = 1 TO 5
80+
IF ASC(many(1).Values(i), j) <> 0 THEN
81+
PRINT "FAIL 47_zero_fill_fixed_strings_erase_redim.bas: REDIM many(1).Values mismatch at"; i; j
82+
SYSTEM
83+
END IF
84+
NEXT j
85+
NEXT i
86+
87+
IF ASC(many(0).Values(0), 1) <> 88 OR ASC(many(0).Values(2), 1) <> 89 THEN
88+
PRINT "FAIL 47_zero_fill_fixed_strings_erase_redim.bas: many(0) changed unexpectedly after REDIM many(1).Values"
89+
SYSTEM
90+
END IF
91+
92+
ERASE many
93+
FOR i = 0 TO 1
94+
DIM k AS LONG
95+
FOR k = 0 TO 2
96+
FOR j = 1 TO 5
97+
IF ASC(many(i).Values(k), j) <> 0 THEN
98+
PRINT "FAIL 47_zero_fill_fixed_strings_erase_redim.bas: ERASE many mismatch at"; i; k; j
99+
SYSTEM
100+
END IF
101+
NEXT j
102+
NEXT k
103+
NEXT i
104+
105+
PRINT "PASS 47_zero_fill_fixed_strings_erase_redim.bas"
106+
SYSTEM
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
PASS 47_zero_fill_fixed_strings_erase_redim.bas

0 commit comments

Comments
 (0)