diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/regress/lib/libc/stdio/test_fflush.c | 83 |
1 files changed, 82 insertions, 1 deletions
diff --git a/src/regress/lib/libc/stdio/test_fflush.c b/src/regress/lib/libc/stdio/test_fflush.c index fe1772bdfc..76f2d88aba 100644 --- a/src/regress/lib/libc/stdio/test_fflush.c +++ b/src/regress/lib/libc/stdio/test_fflush.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: test_fflush.c,v 1.1 2025/05/24 11:07:21 yasuoka Exp $ */ | 1 | /* $OpenBSD: test_fflush.c,v 1.2 2025/05/25 05:35:13 yasuoka Exp $ */ |
| 2 | 2 | ||
| 3 | /* | 3 | /* |
| 4 | * Copyright (c) 2025 YASUOKA Masahiko <yasuoka@yasuoka.net> | 4 | * Copyright (c) 2025 YASUOKA Masahiko <yasuoka@yasuoka.net> |
| @@ -17,10 +17,12 @@ | |||
| 17 | */ | 17 | */ |
| 18 | 18 | ||
| 19 | #include <assert.h> | 19 | #include <assert.h> |
| 20 | #include <locale.h> | ||
| 20 | #include <stdio.h> | 21 | #include <stdio.h> |
| 21 | #include <stdlib.h> | 22 | #include <stdlib.h> |
| 22 | #include <string.h> | 23 | #include <string.h> |
| 23 | #include <unistd.h> | 24 | #include <unistd.h> |
| 25 | #include <wchar.h> | ||
| 24 | 26 | ||
| 25 | /* we use assert() */ | 27 | /* we use assert() */ |
| 26 | #undef NDEBUG | 28 | #undef NDEBUG |
| @@ -34,6 +36,8 @@ void test_fflush_read1(void); | |||
| 34 | void test_fflush_read2(void); | 36 | void test_fflush_read2(void); |
| 35 | void test_fflush_read3(void); | 37 | void test_fflush_read3(void); |
| 36 | void test_fflush_read4(void); | 38 | void test_fflush_read4(void); |
| 39 | void setupw(void); | ||
| 40 | void test_fflush_read5(void); | ||
| 37 | 41 | ||
| 38 | void | 42 | void |
| 39 | setup(void) | 43 | setup(void) |
| @@ -212,14 +216,91 @@ test_fflush_read4(void) | |||
| 212 | assert(r == 0); | 216 | assert(r == 0); |
| 213 | } | 217 | } |
| 214 | 218 | ||
| 219 | void | ||
| 220 | setupw(void) | ||
| 221 | { | ||
| 222 | FILE *fp; | ||
| 223 | |||
| 224 | /* common setup */ | ||
| 225 | unlink(TMPFILENAME); | ||
| 226 | fp = fopen(TMPFILENAME, "w+"); | ||
| 227 | assert(fp != NULL); | ||
| 228 | /* Konnitiwa Sekai(in Kanji) */ | ||
| 229 | fputws(L"\u3053\u3093\u306b\u3061\u308f \u4e16\u754c\n", fp); | ||
| 230 | fclose(fp); | ||
| 231 | } | ||
| 232 | |||
| 233 | /* fflush work with reading file and seekable + ungetwc */ | ||
| 234 | void | ||
| 235 | test_fflush_read5(void) | ||
| 236 | { | ||
| 237 | int r; | ||
| 238 | wchar_t buf[80]; | ||
| 239 | FILE *fp; | ||
| 240 | |||
| 241 | setupw(); | ||
| 242 | |||
| 243 | fp = fopen(TMPFILENAME, "r"); | ||
| 244 | |||
| 245 | assert(fp != NULL); | ||
| 246 | assert(fgetwc(fp) == L'\u3053'); /* Ko */ | ||
| 247 | assert(fgetwc(fp) == L'\u3093'); /* N */ | ||
| 248 | assert(fgetwc(fp) == L'\u306b'); /* Ni */ | ||
| 249 | assert(fgetwc(fp) == L'\u3061'); /* Ti */ | ||
| 250 | assert(fgetwc(fp) == L'\u308f'); /* Wa */ | ||
| 251 | |||
| 252 | /* push 263A(smile) back */ | ||
| 253 | assert(ungetwc(L'\u263a', fp)); | ||
| 254 | |||
| 255 | /* we support 1 push back wchar_t */ | ||
| 256 | assert(fgetwc(fp) == L'\u263a'); | ||
| 257 | |||
| 258 | /* can read reset of that */ | ||
| 259 | fgetws(buf, sizeof(buf), fp); | ||
| 260 | assert(wcscmp(buf, L" \u4e16\u754c\n") == 0); | ||
| 261 | |||
| 262 | r = fclose(fp); | ||
| 263 | assert(r == 0); | ||
| 264 | |||
| 265 | /* do the same thing + fflush */ | ||
| 266 | fp = fopen(TMPFILENAME, "r"); | ||
| 267 | |||
| 268 | assert(fp != NULL); | ||
| 269 | assert(fgetwc(fp) == L'\u3053'); /* Ko */ | ||
| 270 | assert(fgetwc(fp) == L'\u3093'); /* N */ | ||
| 271 | assert(fgetwc(fp) == L'\u306b'); /* Ni */ | ||
| 272 | assert(fgetwc(fp) == L'\u3061'); /* Ti */ | ||
| 273 | assert(fgetwc(fp) == L'\u308f'); /* Wa */ | ||
| 274 | |||
| 275 | /* push 263A(smile) back */ | ||
| 276 | assert(ungetwc(L'\u263a', fp)); | ||
| 277 | |||
| 278 | /* we support 1 push back wchar_t */ | ||
| 279 | assert(fgetwc(fp) == L'\u263a'); | ||
| 280 | |||
| 281 | /* then fflush */ | ||
| 282 | r = fflush(fp); | ||
| 283 | assert(r == 0); | ||
| 284 | |||
| 285 | /* fllush() clears the all pushed back chars */ | ||
| 286 | |||
| 287 | /* can read rest of that */ | ||
| 288 | fgetws(buf, sizeof(buf), fp); | ||
| 289 | assert(wcscmp(buf, L" \u4e16\u754c\n") == 0); | ||
| 290 | r = fclose(fp); | ||
| 291 | assert(r == 0); | ||
| 292 | } | ||
| 215 | int | 293 | int |
| 216 | main(int argc, char *argv[]) | 294 | main(int argc, char *argv[]) |
| 217 | { | 295 | { |
| 296 | setlocale(LC_ALL, "C.UTF-8"); | ||
| 297 | |||
| 218 | test_fflush_read0(); | 298 | test_fflush_read0(); |
| 219 | test_fflush_read1(); | 299 | test_fflush_read1(); |
| 220 | test_fflush_read2(); | 300 | test_fflush_read2(); |
| 221 | test_fflush_read3(); | 301 | test_fflush_read3(); |
| 222 | test_fflush_read4(); | 302 | test_fflush_read4(); |
| 303 | test_fflush_read5(); | ||
| 223 | 304 | ||
| 224 | exit(0); | 305 | exit(0); |
| 225 | } | 306 | } |
