summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormillert <>2020-08-17 16:17:39 +0000
committermillert <>2020-08-17 16:17:39 +0000
commit8eca2e9fea473ab72db7d9f6df82c1d3bf24d0bc (patch)
tree29979e982ccae07d7cf1524f90bdbdbf9131ef70
parentc20bfd5166b74749f0c5ef7c88a2d31259002f9e (diff)
downloadopenbsd-8eca2e9fea473ab72db7d9f6df82c1d3bf24d0bc.tar.gz
openbsd-8eca2e9fea473ab72db7d9f6df82c1d3bf24d0bc.tar.bz2
openbsd-8eca2e9fea473ab72db7d9f6df82c1d3bf24d0bc.zip
Fix append mode so it always writes to the end and expand regress.libressl-v3.2.1
OK deraadt@ martijn@
-rw-r--r--src/regress/lib/libc/fmemopen/fmemopentest.c103
1 files changed, 77 insertions, 26 deletions
diff --git a/src/regress/lib/libc/fmemopen/fmemopentest.c b/src/regress/lib/libc/fmemopen/fmemopentest.c
index 203c93be65..dd0c123fe6 100644
--- a/src/regress/lib/libc/fmemopen/fmemopentest.c
+++ b/src/regress/lib/libc/fmemopen/fmemopentest.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: fmemopentest.c,v 1.3 2013/03/28 09:35:58 mpi Exp $ */ 1/* $OpenBSD: fmemopentest.c,v 1.4 2020/08/17 16:17:39 millert Exp $ */
2 2
3/* 3/*
4 * Copyright (c) 2011 Martin Pieuchot <mpi@openbsd.org> 4 * Copyright (c) 2011 Martin Pieuchot <mpi@openbsd.org>
@@ -70,7 +70,7 @@ simpletest(void)
70} 70}
71 71
72int 72int
73updatetest(void) 73appendtest(const char *mode)
74{ 74{
75 FILE *s1; 75 FILE *s1;
76 char string[] = "hello\0 test number 2"; 76 char string[] = "hello\0 test number 2";
@@ -78,35 +78,44 @@ updatetest(void)
78 size_t len; 78 size_t len;
79 int failures = 0; 79 int failures = 0;
80 80
81 s1 = fmemopen(string, 19, "a+"); 81 s1 = fmemopen(string, 19, mode);
82 if (s1 == NULL) 82 if (s1 == NULL)
83 return (1); 83 return (1);
84 84
85 fseek(s1, 0, SEEK_SET);
86 if (ftell(s1) != 0) {
87 warnx("failed seek test [%s] (4)", mode);
88 failures++;
89 }
90
91 /* write should append even though seek position is 0 */
85 len = fwrite(" world", 1, 6, s1); 92 len = fwrite(" world", 1, 6, s1);
86 if (len != 6) { 93 if (len != 6) {
87 warnx("failed write test (4)"); 94 warnx("failed write test [%s] (5)", mode);
88 failures++; 95 failures++;
89 } 96 }
90 97
91 fseek(s1, 0, SEEK_SET); 98 if (ftell(s1) != strlen("hello world")) {
92 if (ftell(s1) != 0) { 99 warnx("failed seek test [%s] (6)", mode);
93 warnx("failed seek test (5)");
94 failures++; 100 failures++;
95 } 101 }
96 102
97 len = fread(buffer, 1, sizeof(buffer) - 1, s1); 103 if (mode[1] == '+') {
98 if (strncmp(string, buffer, len)) { 104 fseek(s1, 0, SEEK_SET);
99 warnx("failed compare test (6)"); 105 len = fread(buffer, 1, sizeof(buffer) - 1, s1);
100 failures++; 106 if (len == 0 || strncmp(string, buffer, len)) {
107 warnx("failed compare test [%s] (7)", mode);
108 failures++;
109 }
101 } 110 }
102 111
103 if (strcmp(string, "hello world")) { 112 if (strcmp(string, "hello world")) {
104 warnx("failed compare test (7)"); 113 warnx("failed compare test [%s] (8)", mode);
105 failures++; 114 failures++;
106 } 115 }
107 116
108 if (strcmp(string + strlen(string) + 1, "number 2")) { 117 if (strcmp(string + strlen(string) + 1, "number 2")) {
109 warnx("failed compare test (8)"); 118 warnx("failed compare test [%s] (9)", mode);
110 failures++; 119 failures++;
111 } 120 }
112 121
@@ -114,7 +123,46 @@ updatetest(void)
114} 123}
115 124
116int 125int
117writetest(void) 126updatetest(void)
127{
128 FILE *s1;
129 char string[] = "bah, what a day";
130 char buffer[256];
131 size_t len;
132 int failures = 0;
133
134 s1 = fmemopen(string, 19, "r+");
135 if (s1 == NULL)
136 return (1);
137
138 if (ftell(s1) != 0) {
139 warnx("failed seek test (10)");
140 failures++;
141 }
142
143 len = fwrite("oh frabjous", 1, 11, s1);
144 if (len != 11) {
145 warnx("failed write test (11)");
146 failures++;
147 }
148
149 fseek(s1, 0, SEEK_SET);
150 len = fread(buffer, 1, sizeof(buffer) - 1, s1);
151 if (len == 0 || strncmp(string, buffer, len)) {
152 warnx("failed compare test (12)");
153 failures++;
154 }
155
156 if (strcmp(string, "oh frabjous day")) {
157 warnx("failed compare test (13)");
158 failures++;
159 }
160
161 return (failures);
162}
163
164int
165writetest(const char *mode)
118{ 166{
119 FILE *s1; 167 FILE *s1;
120 char string[] = "super test number 3"; 168 char string[] = "super test number 3";
@@ -124,36 +172,36 @@ writetest(void)
124 172
125 slen = strlen(string) + 1; 173 slen = strlen(string) + 1;
126 174
127 s1 = fmemopen(string, slen, "w"); 175 s1 = fmemopen(string, slen, mode);
128 if (s1 == NULL) 176 if (s1 == NULL)
129 return (1); 177 return (1);
130 178
131 len = fwrite("short", 1, 5, s1); 179 len = fwrite("short", 1, 5, s1);
132 if (len != strlen("short")) { 180 if (len != strlen("short")) {
133 warnx("failed write test (9)"); 181 warnx("failed write test [%s] (14)", mode);
134 failures++; 182 failures++;
135 } 183 }
136 fclose(s1); 184 fclose(s1);
137 185
138 s1 = fmemopen(string, slen, "r"); 186 s1 = fmemopen(string, slen, "r");
139 if (s1 == NULL) { 187 if (s1 == NULL) {
140 warnx("failed open test (10)"); 188 warnx("failed open test [%s] (15)", mode);
141 failures++; 189 failures++;
142 } 190 }
143 191
144 len = fread(buffer, 1, sizeof(buffer) - 1, s1); 192 len = fread(buffer, 1, sizeof(buffer) - 1, s1);
145 if (strncmp(string, buffer, len)) { 193 if (len == 0 || strncmp(string, buffer, len)) {
146 warnx("failed compare test (11)"); 194 warnx("failed compare test [%s] (16)", mode);
147 failures++; 195 failures++;
148 } 196 }
149 197
150 if (strcmp(string, "short")) { 198 if (strcmp(string, "short")) {
151 warnx("failed compare test (12)"); 199 warnx("failed compare test [%s] (17)", mode);
152 failures++; 200 failures++;
153 } 201 }
154 202
155 if (strcmp(string + strlen(string) + 1, "test number 3")) { 203 if (strcmp(string + strlen(string) + 1, "test number 3")) {
156 warnx("failed compare test (13)"); 204 warnx("failed compare test [%s] (18)", mode);
157 failures++; 205 failures++;
158 } 206 }
159 207
@@ -175,23 +223,23 @@ seektest(void)
175 return (1); 223 return (1);
176 224
177 if (fseek(s1, 8, SEEK_SET) != 0) { 225 if (fseek(s1, 8, SEEK_SET) != 0) {
178 warnx("failed to fseek. (14)"); 226 warnx("failed to fseek. (19)");
179 failures++; 227 failures++;
180 } 228 }
181 229
182 if (ftell(s1) != 8) { 230 if (ftell(s1) != 8) {
183 warnx("failed seek test. (15)"); 231 warnx("failed seek test. (20)");
184 failures++; 232 failures++;
185 } 233 }
186 234
187 /* Try to seek backward */ 235 /* Try to seek backward */
188 if (fseek(s1, -1, SEEK_CUR) != 0) { 236 if (fseek(s1, -1, SEEK_CUR) != 0) {
189 warnx("failed to fseek. (16)"); 237 warnx("failed to fseek. (21)");
190 failures++; 238 failures++;
191 } 239 }
192 240
193 if (ftell(s1) != 7) { 241 if (ftell(s1) != 7) {
194 warnx("failed seeking backward. (17)"); 242 warnx("failed seeking backward. (22)");
195 failures++; 243 failures++;
196 } 244 }
197 245
@@ -204,8 +252,11 @@ main(void)
204 int failures = 0; 252 int failures = 0;
205 253
206 failures += simpletest(); 254 failures += simpletest();
255 failures += appendtest("a");
256 failures += appendtest("a+");
207 failures += updatetest(); 257 failures += updatetest();
208 failures += writetest(); 258 failures += writetest("w");
259 failures += writetest("w+");
209 failures += seektest(); 260 failures += seektest();
210 261
211 return (failures); 262 return (failures);