diff options
| author | cvs2svn <admin@example.com> | 2025-08-02 06:16:35 +0000 |
|---|---|---|
| committer | cvs2svn <admin@example.com> | 2025-08-02 06:16:35 +0000 |
| commit | a397c95f8aea58533e72379d6e0de12683ecd0dc (patch) | |
| tree | 45ccaccd0ce2ea01650f0a9f5e9268a656e17e51 /src/regress/lib/libc/stdio | |
| parent | a79e90e7342954ae2287db505811ca3c1cd336d7 (diff) | |
| download | openbsd-tb_20250802.tar.gz openbsd-tb_20250802.tar.bz2 openbsd-tb_20250802.zip | |
This commit was manufactured by cvs2git to create tag 'tb_20250802'.tb_20250802
Diffstat (limited to 'src/regress/lib/libc/stdio')
| -rw-r--r-- | src/regress/lib/libc/stdio/Makefile | 29 | ||||
| -rw-r--r-- | src/regress/lib/libc/stdio/test___fpending.c | 58 | ||||
| -rw-r--r-- | src/regress/lib/libc/stdio/test___freadahead.c | 71 | ||||
| -rw-r--r-- | src/regress/lib/libc/stdio/test___freading.c | 125 | ||||
| -rw-r--r-- | src/regress/lib/libc/stdio/test___freadptr.c | 78 | ||||
| -rw-r--r-- | src/regress/lib/libc/stdio/test___fseterr.c | 60 | ||||
| -rw-r--r-- | src/regress/lib/libc/stdio/test___fwriting.c | 83 | ||||
| -rw-r--r-- | src/regress/lib/libc/stdio/test_fflush.c | 345 | ||||
| -rw-r--r-- | src/regress/lib/libc/stdio/test_ungetwc.c | 90 |
9 files changed, 0 insertions, 939 deletions
diff --git a/src/regress/lib/libc/stdio/Makefile b/src/regress/lib/libc/stdio/Makefile deleted file mode 100644 index f1e980f688..0000000000 --- a/src/regress/lib/libc/stdio/Makefile +++ /dev/null | |||
| @@ -1,29 +0,0 @@ | |||
| 1 | # $OpenBSD: Makefile,v 1.4 2025/06/03 14:35:27 yasuoka Exp $ | ||
| 2 | |||
| 3 | PROGS= test_fflush | ||
| 4 | CLEANFILES= test_fflush.tmp | ||
| 5 | |||
| 6 | PROGS+= test_ungetwc | ||
| 7 | CLEANFILES+= test_ungetwc.tmp | ||
| 8 | |||
| 9 | PROGS+= test___freading | ||
| 10 | CLEANFILES+= test___freading.tmp | ||
| 11 | |||
| 12 | PROGS+= test___fwriting | ||
| 13 | CLEANFILES+= test___fwriting.tmp | ||
| 14 | |||
| 15 | PROGS+= test___fpending | ||
| 16 | CLEANFILES+= test___fpending.tmp | ||
| 17 | |||
| 18 | PROGS+= test___freadahead | ||
| 19 | CLEANFILES+= test___freadahead.tmp | ||
| 20 | |||
| 21 | PROGS+= test___freadptr | ||
| 22 | CLEANFILES+= test___freadptr.tmp | ||
| 23 | |||
| 24 | PROGS+= test___fseterr | ||
| 25 | CLEANFILES+= test___fseterr.tmp | ||
| 26 | |||
| 27 | WARNINGS= yes | ||
| 28 | |||
| 29 | .include <bsd.regress.mk> | ||
diff --git a/src/regress/lib/libc/stdio/test___fpending.c b/src/regress/lib/libc/stdio/test___fpending.c deleted file mode 100644 index 96ace2e481..0000000000 --- a/src/regress/lib/libc/stdio/test___fpending.c +++ /dev/null | |||
| @@ -1,58 +0,0 @@ | |||
| 1 | /* $OpenBSD: test___fpending.c,v 1.1 2025/05/25 00:20:54 yasuoka Exp $ */ | ||
| 2 | |||
| 3 | /* | ||
| 4 | * Copyright (c) 2025 YASUOKA Masahiko <yasuoka@yasuoka.net> | ||
| 5 | * | ||
| 6 | * Permission to use, copy, modify, and distribute this software for any | ||
| 7 | * purpose with or without fee is hereby granted, provided that the above | ||
| 8 | * copyright notice and this permission notice appear in all copies. | ||
| 9 | * | ||
| 10 | * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | ||
| 11 | * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | ||
| 12 | * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | ||
| 13 | * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | ||
| 14 | * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | ||
| 15 | * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | ||
| 16 | * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | ||
| 17 | */ | ||
| 18 | |||
| 19 | #include <assert.h> | ||
| 20 | #include <stdio.h> | ||
| 21 | #include <stdio_ext.h> | ||
| 22 | #include <stdlib.h> | ||
| 23 | |||
| 24 | /* we use assert() */ | ||
| 25 | #undef NDEBUG | ||
| 26 | |||
| 27 | #define TMPFILENAME "test___fpending.tmp" | ||
| 28 | |||
| 29 | void test___fpending0(void); | ||
| 30 | |||
| 31 | void | ||
| 32 | test___fpending0(void) | ||
| 33 | { | ||
| 34 | FILE *fp; | ||
| 35 | int r; | ||
| 36 | size_t s; | ||
| 37 | |||
| 38 | fp = fopen(TMPFILENAME, "w"); | ||
| 39 | assert(fp != NULL); | ||
| 40 | r = fputs("Hello world", fp); | ||
| 41 | assert(r >= 0); | ||
| 42 | s = __fpending(fp); | ||
| 43 | assert(s > 0); /* assume buffered */ | ||
| 44 | r = fflush(fp); | ||
| 45 | assert(r == 0); | ||
| 46 | s = __fpending(fp); | ||
| 47 | assert(s == 0); /* buffer must be 0 */ | ||
| 48 | r = fclose(fp); | ||
| 49 | assert(r == 0); | ||
| 50 | } | ||
| 51 | |||
| 52 | int | ||
| 53 | main(int argc, char *argv[]) | ||
| 54 | { | ||
| 55 | test___fpending0(); | ||
| 56 | |||
| 57 | exit(0); | ||
| 58 | } | ||
diff --git a/src/regress/lib/libc/stdio/test___freadahead.c b/src/regress/lib/libc/stdio/test___freadahead.c deleted file mode 100644 index 66d5e3492a..0000000000 --- a/src/regress/lib/libc/stdio/test___freadahead.c +++ /dev/null | |||
| @@ -1,71 +0,0 @@ | |||
| 1 | /* $OpenBSD: test___freadahead.c,v 1.2 2025/06/03 14:35:27 yasuoka Exp $ */ | ||
| 2 | |||
| 3 | /* | ||
| 4 | * Copyright (c) 2025 YASUOKA Masahiko <yasuoka@yasuoka.net> | ||
| 5 | * | ||
| 6 | * Permission to use, copy, modify, and distribute this software for any | ||
| 7 | * purpose with or without fee is hereby granted, provided that the above | ||
| 8 | * copyright notice and this permission notice appear in all copies. | ||
| 9 | * | ||
| 10 | * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | ||
| 11 | * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | ||
| 12 | * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | ||
| 13 | * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | ||
| 14 | * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | ||
| 15 | * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | ||
| 16 | * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | ||
| 17 | */ | ||
| 18 | |||
| 19 | #include <assert.h> | ||
| 20 | #include <errno.h> | ||
| 21 | #include <stdio.h> | ||
| 22 | #include <stdio_ext.h> | ||
| 23 | #include <stdlib.h> | ||
| 24 | |||
| 25 | /* we use assert() */ | ||
| 26 | #undef NDEBUG | ||
| 27 | |||
| 28 | #define TMPFILENAME "test___freadahead.tmp" | ||
| 29 | |||
| 30 | void test___freadahead0(void); | ||
| 31 | |||
| 32 | void | ||
| 33 | test___freadahead0(void) | ||
| 34 | { | ||
| 35 | FILE *fp; | ||
| 36 | int r; | ||
| 37 | size_t s; | ||
| 38 | |||
| 39 | fp = fopen(TMPFILENAME, "w"); | ||
| 40 | assert(fp != NULL); | ||
| 41 | r = fputs("Hello world", fp); | ||
| 42 | assert(r >= 0); | ||
| 43 | r = fclose(fp); | ||
| 44 | |||
| 45 | fp = fopen(TMPFILENAME, "r"); | ||
| 46 | s = __freadahead(fp); | ||
| 47 | assert(s == 0); | ||
| 48 | assert(fgetc(fp) == 'H'); | ||
| 49 | s = __freadahead(fp); | ||
| 50 | assert(s == 10); | ||
| 51 | r = fflush(fp); | ||
| 52 | #if 0 | ||
| 53 | /* fflush() to reading file is not supported (yet) */ | ||
| 54 | assert(errno == EBADF); | ||
| 55 | #else | ||
| 56 | assert(r == 0); | ||
| 57 | s = __freadahead(fp); | ||
| 58 | assert(s == 0); | ||
| 59 | #endif | ||
| 60 | |||
| 61 | r = fclose(fp); | ||
| 62 | assert(r == 0); | ||
| 63 | } | ||
| 64 | |||
| 65 | int | ||
| 66 | main(int argc, char *argv[]) | ||
| 67 | { | ||
| 68 | test___freadahead0(); | ||
| 69 | |||
| 70 | exit(0); | ||
| 71 | } | ||
diff --git a/src/regress/lib/libc/stdio/test___freading.c b/src/regress/lib/libc/stdio/test___freading.c deleted file mode 100644 index f74eb78d35..0000000000 --- a/src/regress/lib/libc/stdio/test___freading.c +++ /dev/null | |||
| @@ -1,125 +0,0 @@ | |||
| 1 | /* $OpenBSD: test___freading.c,v 1.2 2025/06/12 07:39:26 yasuoka Exp $ */ | ||
| 2 | |||
| 3 | /* | ||
| 4 | * Copyright (c) 2025 YASUOKA Masahiko <yasuoka@yasuoka.net> | ||
| 5 | * | ||
| 6 | * Permission to use, copy, modify, and distribute this software for any | ||
| 7 | * purpose with or without fee is hereby granted, provided that the above | ||
| 8 | * copyright notice and this permission notice appear in all copies. | ||
| 9 | * | ||
| 10 | * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | ||
| 11 | * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | ||
| 12 | * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | ||
| 13 | * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | ||
| 14 | * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | ||
| 15 | * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | ||
| 16 | * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | ||
| 17 | */ | ||
| 18 | |||
| 19 | #include <assert.h> | ||
| 20 | #include <stdio.h> | ||
| 21 | #include <stdio_ext.h> | ||
| 22 | #include <stdlib.h> | ||
| 23 | #include <string.h> | ||
| 24 | #include <unistd.h> | ||
| 25 | |||
| 26 | /* we use assert() */ | ||
| 27 | #undef NDEBUG | ||
| 28 | |||
| 29 | #define TMPFILENAME "test___freading.tmp" | ||
| 30 | |||
| 31 | void setup(void); | ||
| 32 | |||
| 33 | void test___freading0(void); | ||
| 34 | void test___freading1(void); | ||
| 35 | void test___freading2(void); | ||
| 36 | |||
| 37 | void | ||
| 38 | setup(void) | ||
| 39 | { | ||
| 40 | FILE *fp; | ||
| 41 | |||
| 42 | /* common setup */ | ||
| 43 | unlink(TMPFILENAME); | ||
| 44 | fp = fopen(TMPFILENAME, "w+"); | ||
| 45 | assert(fp != NULL); | ||
| 46 | fputs("Hello world\n", fp); | ||
| 47 | fclose(fp); | ||
| 48 | } | ||
| 49 | |||
| 50 | void | ||
| 51 | test___freading0(void) | ||
| 52 | { | ||
| 53 | FILE *fp; | ||
| 54 | int r; | ||
| 55 | char buf[80]; | ||
| 56 | |||
| 57 | fp = popen("echo Hello world", "r"); | ||
| 58 | assert(fp != NULL); | ||
| 59 | assert(__freading(fp) != 0); | ||
| 60 | assert(fgets(buf, sizeof(buf), fp) != NULL); | ||
| 61 | assert(strcmp(buf, "Hello world\n") == 0); | ||
| 62 | r = pclose(fp); | ||
| 63 | assert(r == 0); | ||
| 64 | } | ||
| 65 | |||
| 66 | void | ||
| 67 | test___freading1(void) | ||
| 68 | { | ||
| 69 | FILE *fp; | ||
| 70 | int r; | ||
| 71 | |||
| 72 | /* when the last operaiton is read, __freading() returns true */ | ||
| 73 | fp = fopen(TMPFILENAME, "w+"); | ||
| 74 | assert(fp != NULL); | ||
| 75 | assert(__freading(fp) == 0); | ||
| 76 | r = fputs("Hello world\n", fp); | ||
| 77 | assert(r >= 0); | ||
| 78 | assert(__freading(fp) == 0); | ||
| 79 | rewind(fp); | ||
| 80 | assert(fgetc(fp) == 'H'); | ||
| 81 | assert(__freading(fp) != 0); | ||
| 82 | /* write */ | ||
| 83 | fseek(fp, 0, SEEK_END); | ||
| 84 | r = fputs("\n", fp); | ||
| 85 | assert(__freading(fp) == 0); | ||
| 86 | /* ungetc */ | ||
| 87 | rewind(fp); | ||
| 88 | assert(ungetc('X', fp) != 0); | ||
| 89 | assert(__freading(fp) != 0); /* reading */ | ||
| 90 | |||
| 91 | r = fclose(fp); | ||
| 92 | assert(r == 0); | ||
| 93 | } | ||
| 94 | |||
| 95 | void | ||
| 96 | test___freading2(void) | ||
| 97 | { | ||
| 98 | int r; | ||
| 99 | FILE *fp; | ||
| 100 | |||
| 101 | /* | ||
| 102 | * until v1.10 of fpurge.c mistakenly enables the writing buffer | ||
| 103 | * without _SRD flag set. | ||
| 104 | */ | ||
| 105 | fp = fopen(TMPFILENAME, "r+"); | ||
| 106 | assert(fp != NULL); | ||
| 107 | assert(fgetc(fp) == 'H'); | ||
| 108 | fpurge(fp); | ||
| 109 | fseek(fp, 0, SEEK_CUR); | ||
| 110 | assert(fputc('X', fp) == 'X'); | ||
| 111 | assert(__freading(fp) == 0); | ||
| 112 | |||
| 113 | r = fclose(fp); | ||
| 114 | assert(r == 0); | ||
| 115 | } | ||
| 116 | |||
| 117 | int | ||
| 118 | main(int argc, char *argv[]) | ||
| 119 | { | ||
| 120 | test___freading0(); | ||
| 121 | test___freading1(); | ||
| 122 | test___freading2(); | ||
| 123 | |||
| 124 | exit(0); | ||
| 125 | } | ||
diff --git a/src/regress/lib/libc/stdio/test___freadptr.c b/src/regress/lib/libc/stdio/test___freadptr.c deleted file mode 100644 index cce362f2ae..0000000000 --- a/src/regress/lib/libc/stdio/test___freadptr.c +++ /dev/null | |||
| @@ -1,78 +0,0 @@ | |||
| 1 | /* $OpenBSD: test___freadptr.c,v 1.1 2025/05/25 00:20:54 yasuoka Exp $ */ | ||
| 2 | |||
| 3 | /* | ||
| 4 | * Copyright (c) 2025 YASUOKA Masahiko <yasuoka@yasuoka.net> | ||
| 5 | * | ||
| 6 | * Permission to use, copy, modify, and distribute this software for any | ||
| 7 | * purpose with or without fee is hereby granted, provided that the above | ||
| 8 | * copyright notice and this permission notice appear in all copies. | ||
| 9 | * | ||
| 10 | * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | ||
| 11 | * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | ||
| 12 | * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | ||
| 13 | * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | ||
| 14 | * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | ||
| 15 | * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | ||
| 16 | * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | ||
| 17 | */ | ||
| 18 | |||
| 19 | #include <sys/types.h> | ||
| 20 | #include <assert.h> | ||
| 21 | #include <stdio.h> | ||
| 22 | #include <stdio_ext.h> | ||
| 23 | #include <stdlib.h> | ||
| 24 | #include <string.h> | ||
| 25 | |||
| 26 | /* we use assert() */ | ||
| 27 | #undef NDEBUG | ||
| 28 | |||
| 29 | #define TMPFILENAME "test___freadptr.tmp" | ||
| 30 | |||
| 31 | void test___freadptr0(void); | ||
| 32 | |||
| 33 | /* test __freadptr() and __freadptrinc() */ | ||
| 34 | void | ||
| 35 | test___freadptr0(void) | ||
| 36 | { | ||
| 37 | FILE *fp; | ||
| 38 | int r; | ||
| 39 | ssize_t s; | ||
| 40 | const char *p; | ||
| 41 | |||
| 42 | fp = fopen(TMPFILENAME, "w"); | ||
| 43 | assert(fp != NULL); | ||
| 44 | r = fputs("Hello world", fp); | ||
| 45 | assert(r >= 0); | ||
| 46 | r = fclose(fp); | ||
| 47 | |||
| 48 | fp = fopen(TMPFILENAME, "r"); | ||
| 49 | assert(fgetc(fp) == 'H'); | ||
| 50 | p = __freadptr(fp, &s); | ||
| 51 | assert(p != NULL); | ||
| 52 | assert(s > 4); /* this test assume this (not by the spec) */ | ||
| 53 | assert(*p == 'e'); | ||
| 54 | assert(strncmp(p, "ello world", s) == 0); | ||
| 55 | |||
| 56 | __freadptrinc(fp, 4); | ||
| 57 | assert(fgetc(fp) == ' '); | ||
| 58 | |||
| 59 | ungetc('A', fp); | ||
| 60 | ungetc('A', fp); | ||
| 61 | ungetc('A', fp); | ||
| 62 | p = __freadptr(fp, &s); | ||
| 63 | assert(s > 0); | ||
| 64 | assert(*p == 'A'); | ||
| 65 | /* ptr will contains only the pushback buffer */ | ||
| 66 | assert(strncmp(p, "AAAworld", s) == 0); | ||
| 67 | |||
| 68 | r = fclose(fp); | ||
| 69 | assert(r == 0); | ||
| 70 | } | ||
| 71 | |||
| 72 | int | ||
| 73 | main(int argc, char *argv[]) | ||
| 74 | { | ||
| 75 | test___freadptr0(); | ||
| 76 | |||
| 77 | exit(0); | ||
| 78 | } | ||
diff --git a/src/regress/lib/libc/stdio/test___fseterr.c b/src/regress/lib/libc/stdio/test___fseterr.c deleted file mode 100644 index 70fb491c6c..0000000000 --- a/src/regress/lib/libc/stdio/test___fseterr.c +++ /dev/null | |||
| @@ -1,60 +0,0 @@ | |||
| 1 | /* $OpenBSD: test___fseterr.c,v 1.1 2025/05/25 00:20:54 yasuoka Exp $ */ | ||
| 2 | |||
| 3 | /* | ||
| 4 | * Copyright (c) 2025 YASUOKA Masahiko <yasuoka@yasuoka.net> | ||
| 5 | * | ||
| 6 | * Permission to use, copy, modify, and distribute this software for any | ||
| 7 | * purpose with or without fee is hereby granted, provided that the above | ||
| 8 | * copyright notice and this permission notice appear in all copies. | ||
| 9 | * | ||
| 10 | * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | ||
| 11 | * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | ||
| 12 | * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | ||
| 13 | * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | ||
| 14 | * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | ||
| 15 | * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | ||
| 16 | * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | ||
| 17 | */ | ||
| 18 | |||
| 19 | #include <assert.h> | ||
| 20 | #include <stdio.h> | ||
| 21 | #include <stdio_ext.h> | ||
| 22 | #include <stdlib.h> | ||
| 23 | |||
| 24 | /* we use assert() */ | ||
| 25 | #undef NDEBUG | ||
| 26 | |||
| 27 | #define TMPFILENAME "test___fseterr.tmp" | ||
| 28 | |||
| 29 | void test___fseterr0(void); | ||
| 30 | |||
| 31 | void | ||
| 32 | test___fseterr0(void) | ||
| 33 | { | ||
| 34 | FILE *fp; | ||
| 35 | int r; | ||
| 36 | |||
| 37 | fp = fopen(TMPFILENAME, "w+"); | ||
| 38 | assert(fp != NULL); | ||
| 39 | |||
| 40 | assert(!ferror(fp)); | ||
| 41 | |||
| 42 | r = fprintf(fp, "hello world\n"); | ||
| 43 | assert(r > 0); | ||
| 44 | |||
| 45 | __fseterr(fp); | ||
| 46 | assert(ferror(fp)); | ||
| 47 | |||
| 48 | r = fprintf(fp, "hello world\n"); | ||
| 49 | assert(r == -1); | ||
| 50 | |||
| 51 | fclose(fp); | ||
| 52 | } | ||
| 53 | |||
| 54 | int | ||
| 55 | main(int argc, char *argv[]) | ||
| 56 | { | ||
| 57 | test___fseterr0(); | ||
| 58 | |||
| 59 | exit(0); | ||
| 60 | } | ||
diff --git a/src/regress/lib/libc/stdio/test___fwriting.c b/src/regress/lib/libc/stdio/test___fwriting.c deleted file mode 100644 index eb4671d3cf..0000000000 --- a/src/regress/lib/libc/stdio/test___fwriting.c +++ /dev/null | |||
| @@ -1,83 +0,0 @@ | |||
| 1 | /* $OpenBSD: test___fwriting.c,v 1.1 2025/05/25 00:20:54 yasuoka Exp $ */ | ||
| 2 | |||
| 3 | /* | ||
| 4 | * Copyright (c) 2025 YASUOKA Masahiko <yasuoka@yasuoka.net> | ||
| 5 | * | ||
| 6 | * Permission to use, copy, modify, and distribute this software for any | ||
| 7 | * purpose with or without fee is hereby granted, provided that the above | ||
| 8 | * copyright notice and this permission notice appear in all copies. | ||
| 9 | * | ||
| 10 | * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | ||
| 11 | * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | ||
| 12 | * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | ||
| 13 | * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | ||
| 14 | * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | ||
| 15 | * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | ||
| 16 | * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | ||
| 17 | */ | ||
| 18 | |||
| 19 | #include <assert.h> | ||
| 20 | #include <stdio.h> | ||
| 21 | #include <stdio_ext.h> | ||
| 22 | #include <stdlib.h> | ||
| 23 | |||
| 24 | /* we use assert() */ | ||
| 25 | #undef NDEBUG | ||
| 26 | |||
| 27 | #define TMPFILENAME "test___fwriting.tmp" | ||
| 28 | |||
| 29 | void test___fwriting0(void); | ||
| 30 | void test___fwriting1(void); | ||
| 31 | |||
| 32 | void | ||
| 33 | test___fwriting0(void) | ||
| 34 | { | ||
| 35 | FILE *fp; | ||
| 36 | int r; | ||
| 37 | |||
| 38 | fp = fopen(TMPFILENAME, "w"); /* write only */ | ||
| 39 | assert(fp != NULL); | ||
| 40 | assert(__fwriting(fp) != 0); /* writing is true immediately */ | ||
| 41 | r = fputs("Hello world\n", fp); | ||
| 42 | assert(r >= 0); | ||
| 43 | r = fclose(fp); | ||
| 44 | assert(r == 0); | ||
| 45 | |||
| 46 | fp = fopen(TMPFILENAME, "a"); /* append only */ | ||
| 47 | assert(fp != NULL); | ||
| 48 | assert(__fwriting(fp) != 0); /* writing immediately */ | ||
| 49 | r = fclose(fp); | ||
| 50 | assert(r == 0); | ||
| 51 | } | ||
| 52 | |||
| 53 | void | ||
| 54 | test___fwriting1(void) | ||
| 55 | { | ||
| 56 | FILE *fp; | ||
| 57 | int r; | ||
| 58 | |||
| 59 | fp = fopen(TMPFILENAME, "w+"); /* read / write */ | ||
| 60 | assert(fp != NULL); | ||
| 61 | r = fputs("Hello world\n", fp); | ||
| 62 | assert(r >= 0); | ||
| 63 | assert(__fwriting(fp) != 0); | ||
| 64 | rewind(fp); | ||
| 65 | assert(fgetc(fp) == 'H'); /* read */ | ||
| 66 | assert(__fwriting(fp) == 0); /* writing becomes false */ | ||
| 67 | fputc('e', fp); | ||
| 68 | assert(__fwriting(fp) != 0); /* writing becomes true */ | ||
| 69 | ungetc('e', fp); | ||
| 70 | assert(__fwriting(fp) == 0); /* ungetc -> writing becomes false */ | ||
| 71 | |||
| 72 | r = fclose(fp); | ||
| 73 | assert(r == 0); | ||
| 74 | } | ||
| 75 | |||
| 76 | int | ||
| 77 | main(int argc, char *argv[]) | ||
| 78 | { | ||
| 79 | test___fwriting0(); | ||
| 80 | test___fwriting1(); | ||
| 81 | |||
| 82 | exit(0); | ||
| 83 | } | ||
diff --git a/src/regress/lib/libc/stdio/test_fflush.c b/src/regress/lib/libc/stdio/test_fflush.c deleted file mode 100644 index a0586b7d14..0000000000 --- a/src/regress/lib/libc/stdio/test_fflush.c +++ /dev/null | |||
| @@ -1,345 +0,0 @@ | |||
| 1 | /* $OpenBSD: test_fflush.c,v 1.3 2025/06/08 08:53:53 yasuoka Exp $ */ | ||
| 2 | |||
| 3 | /* | ||
| 4 | * Copyright (c) 2025 YASUOKA Masahiko <yasuoka@yasuoka.net> | ||
| 5 | * | ||
| 6 | * Permission to use, copy, modify, and distribute this software for any | ||
| 7 | * purpose with or without fee is hereby granted, provided that the above | ||
| 8 | * copyright notice and this permission notice appear in all copies. | ||
| 9 | * | ||
| 10 | * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | ||
| 11 | * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | ||
| 12 | * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | ||
| 13 | * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | ||
| 14 | * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | ||
| 15 | * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | ||
| 16 | * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | ||
| 17 | */ | ||
| 18 | |||
| 19 | #include <assert.h> | ||
| 20 | #include <locale.h> | ||
| 21 | #include <stdio.h> | ||
| 22 | #include <stdlib.h> | ||
| 23 | #include <string.h> | ||
| 24 | #include <unistd.h> | ||
| 25 | #include <wchar.h> | ||
| 26 | |||
| 27 | /* we use assert() */ | ||
| 28 | #undef NDEBUG | ||
| 29 | |||
| 30 | #define TMPFILENAME "test_fflush.tmp" | ||
| 31 | |||
| 32 | void setup(void); | ||
| 33 | |||
| 34 | void test_fflush_read0(void); | ||
| 35 | void test_fflush_read1(void); | ||
| 36 | void test_fflush_read2(void); | ||
| 37 | void test_fflush_read3(void); | ||
| 38 | void test_fflush_read4(void); | ||
| 39 | void setupw(void); | ||
| 40 | void test_fflush_read5(void); | ||
| 41 | void test_fflush_read6(void); | ||
| 42 | |||
| 43 | void | ||
| 44 | setup(void) | ||
| 45 | { | ||
| 46 | FILE *fp; | ||
| 47 | |||
| 48 | /* common setup */ | ||
| 49 | unlink(TMPFILENAME); | ||
| 50 | fp = fopen(TMPFILENAME, "w+"); | ||
| 51 | assert(fp != NULL); | ||
| 52 | fputs("Hello world\n", fp); | ||
| 53 | fclose(fp); | ||
| 54 | } | ||
| 55 | |||
| 56 | /* fflush work with reading file and seekable */ | ||
| 57 | void | ||
| 58 | test_fflush_read0(void) | ||
| 59 | { | ||
| 60 | int r; | ||
| 61 | char buf[80]; | ||
| 62 | FILE *fp; | ||
| 63 | |||
| 64 | setup(); | ||
| 65 | |||
| 66 | /* In POSIX 2008, fflush() must work with the file object for reading */ | ||
| 67 | fp = fopen(TMPFILENAME, "r"); | ||
| 68 | assert(fp != NULL); | ||
| 69 | assert(fgetc(fp) == 'H'); | ||
| 70 | r = fflush(fp); | ||
| 71 | assert(r == 0); | ||
| 72 | |||
| 73 | /* the position is moved to 1 */ | ||
| 74 | assert(ftell(fp) == 1); | ||
| 75 | |||
| 76 | /* can read rest of that */ | ||
| 77 | fgets(buf, sizeof(buf), fp); | ||
| 78 | assert(strcmp(buf, "ello world\n") == 0); | ||
| 79 | r = fclose(fp); | ||
| 80 | assert(r == 0); | ||
| 81 | } | ||
| 82 | |||
| 83 | /* fflush work with reading file and seekable + unget */ | ||
| 84 | void | ||
| 85 | test_fflush_read1(void) | ||
| 86 | { | ||
| 87 | int r; | ||
| 88 | char buf[80]; | ||
| 89 | FILE *fp; | ||
| 90 | |||
| 91 | setup(); | ||
| 92 | |||
| 93 | fp = fopen(TMPFILENAME, "r"); | ||
| 94 | assert(fp != NULL); | ||
| 95 | assert(fgetc(fp) == 'H'); | ||
| 96 | assert(fgetc(fp) == 'e'); | ||
| 97 | assert(fgetc(fp) == 'l'); | ||
| 98 | assert(fgetc(fp) == 'l'); | ||
| 99 | assert(fgetc(fp) == 'o'); | ||
| 100 | |||
| 101 | /* push the 'AAAA' back */ | ||
| 102 | ungetc('A', fp); | ||
| 103 | ungetc('A', fp); | ||
| 104 | ungetc('A', fp); | ||
| 105 | ungetc('A', fp); | ||
| 106 | |||
| 107 | /* can read rest of that */ | ||
| 108 | fgets(buf, sizeof(buf), fp); | ||
| 109 | assert(strcmp(buf, "AAAA world\n") == 0); | ||
| 110 | r = fclose(fp); | ||
| 111 | assert(r == 0); | ||
| 112 | |||
| 113 | /* do the same thing + fflush */ | ||
| 114 | |||
| 115 | fp = fopen(TMPFILENAME, "r"); | ||
| 116 | assert(fp != NULL); | ||
| 117 | assert(fgetc(fp) == 'H'); | ||
| 118 | assert(fgetc(fp) == 'e'); | ||
| 119 | assert(fgetc(fp) == 'l'); | ||
| 120 | assert(fgetc(fp) == 'l'); | ||
| 121 | assert(fgetc(fp) == 'o'); | ||
| 122 | |||
| 123 | /* push 'AAAA' back */ | ||
| 124 | ungetc('A', fp); | ||
| 125 | ungetc('A', fp); | ||
| 126 | ungetc('A', fp); | ||
| 127 | ungetc('A', fp); | ||
| 128 | |||
| 129 | /* then fflush */ | ||
| 130 | r = fflush(fp); | ||
| 131 | assert(r == 0); | ||
| 132 | |||
| 133 | /* fllush() clears the all pushed back chars */ | ||
| 134 | |||
| 135 | /* can read rest of that */ | ||
| 136 | fgets(buf, sizeof(buf), fp); | ||
| 137 | assert(strcmp(buf, " world\n") == 0); | ||
| 138 | r = fclose(fp); | ||
| 139 | assert(r == 0); | ||
| 140 | } | ||
| 141 | |||
| 142 | /* fflush() to reading and non-seekable stream */ | ||
| 143 | void | ||
| 144 | test_fflush_read2(void) | ||
| 145 | { | ||
| 146 | int r; | ||
| 147 | FILE *fp; | ||
| 148 | char buf[80]; | ||
| 149 | |||
| 150 | /* In POSIX-2008, fflush() must work with the file object for reading */ | ||
| 151 | fp = popen("echo Hello world", "r"); | ||
| 152 | assert(fp != NULL); | ||
| 153 | assert(fgetc(fp) == 'H'); | ||
| 154 | r = fflush(fp); | ||
| 155 | assert(r == 0); | ||
| 156 | |||
| 157 | /* | ||
| 158 | * FILE object for read and NOT seekable. In that case, fflush does | ||
| 159 | * nothing, but must keep the buffer. | ||
| 160 | */ | ||
| 161 | |||
| 162 | /* can read rest of that */ | ||
| 163 | fgets(buf, sizeof(buf), fp); | ||
| 164 | assert(strcmp(buf, "ello world\n") == 0); | ||
| 165 | r = pclose(fp); | ||
| 166 | assert(r == 0); | ||
| 167 | } | ||
| 168 | |||
| 169 | /* fflush() to the file which doesn't have any buffer */ | ||
| 170 | void | ||
| 171 | test_fflush_read3(void) | ||
| 172 | { | ||
| 173 | int r; | ||
| 174 | FILE *fp; | ||
| 175 | |||
| 176 | setup(); | ||
| 177 | |||
| 178 | /* In POSIX-2008, fflush() must work with the file object for reading */ | ||
| 179 | fp = fopen(TMPFILENAME, "r"); | ||
| 180 | assert(fp != NULL); | ||
| 181 | r = fflush(fp); | ||
| 182 | assert(r == 0); | ||
| 183 | r = fclose(fp); | ||
| 184 | assert(r == 0); | ||
| 185 | } | ||
| 186 | |||
| 187 | /* freopen() should call fflush() internal */ | ||
| 188 | void | ||
| 189 | test_fflush_read4(void) | ||
| 190 | { | ||
| 191 | int r; | ||
| 192 | FILE *fp; | ||
| 193 | off_t pos; | ||
| 194 | char buf[80]; | ||
| 195 | |||
| 196 | setup(); | ||
| 197 | |||
| 198 | /* In POSIX-2008, fflush() must work with the file object for reading */ | ||
| 199 | fp = fopen(TMPFILENAME, "r"); | ||
| 200 | assert(fp != NULL); | ||
| 201 | |||
| 202 | assert(fgetc(fp) == 'H'); /* read 1 */ | ||
| 203 | |||
| 204 | pos = lseek(fileno(fp), 0, SEEK_CUR); | ||
| 205 | assert(pos >= 1); | ||
| 206 | assert(pos > 1); /* this test assume the buffer is used */ | ||
| 207 | |||
| 208 | /* freopen() should call fflush() internal */ | ||
| 209 | fp = freopen(TMPFILENAME, "r", fp); | ||
| 210 | assert(fp != NULL); | ||
| 211 | |||
| 212 | /* can read rest of that on fp */ | ||
| 213 | fgets(buf, sizeof(buf), fp); | ||
| 214 | assert(strcmp(buf, "Hello world\n") == 0); | ||
| 215 | |||
| 216 | r = fclose(fp); | ||
| 217 | assert(r == 0); | ||
| 218 | } | ||
| 219 | |||
| 220 | void | ||
| 221 | setupw(void) | ||
| 222 | { | ||
| 223 | FILE *fp; | ||
| 224 | |||
| 225 | /* common setup */ | ||
| 226 | unlink(TMPFILENAME); | ||
| 227 | fp = fopen(TMPFILENAME, "w+"); | ||
| 228 | assert(fp != NULL); | ||
| 229 | /* Konnitiwa Sekai(in Kanji) */ | ||
| 230 | fputws(L"\u3053\u3093\u306b\u3061\u308f \u4e16\u754c\n", fp); | ||
| 231 | fclose(fp); | ||
| 232 | } | ||
| 233 | |||
| 234 | /* fflush work with reading file and seekable + ungetwc */ | ||
| 235 | void | ||
| 236 | test_fflush_read5(void) | ||
| 237 | { | ||
| 238 | int r; | ||
| 239 | wchar_t buf[80]; | ||
| 240 | FILE *fp; | ||
| 241 | |||
| 242 | setupw(); | ||
| 243 | |||
| 244 | fp = fopen(TMPFILENAME, "r"); | ||
| 245 | |||
| 246 | assert(fp != NULL); | ||
| 247 | assert(fgetwc(fp) == L'\u3053'); /* Ko */ | ||
| 248 | assert(fgetwc(fp) == L'\u3093'); /* N */ | ||
| 249 | assert(fgetwc(fp) == L'\u306b'); /* Ni */ | ||
| 250 | assert(fgetwc(fp) == L'\u3061'); /* Ti */ | ||
| 251 | assert(fgetwc(fp) == L'\u308f'); /* Wa */ | ||
| 252 | |||
| 253 | /* push 263A(smile) back */ | ||
| 254 | assert(ungetwc(L'\u263a', fp)); | ||
| 255 | |||
| 256 | /* we support 1 push back wchar_t */ | ||
| 257 | assert(fgetwc(fp) == L'\u263a'); | ||
| 258 | |||
| 259 | /* can read reset of that */ | ||
| 260 | fgetws(buf, sizeof(buf), fp); | ||
| 261 | assert(wcscmp(buf, L" \u4e16\u754c\n") == 0); | ||
| 262 | |||
| 263 | r = fclose(fp); | ||
| 264 | assert(r == 0); | ||
| 265 | |||
| 266 | /* do the same thing + fflush */ | ||
| 267 | fp = fopen(TMPFILENAME, "r"); | ||
| 268 | |||
| 269 | assert(fp != NULL); | ||
| 270 | assert(fgetwc(fp) == L'\u3053'); /* Ko */ | ||
| 271 | assert(fgetwc(fp) == L'\u3093'); /* N */ | ||
| 272 | assert(fgetwc(fp) == L'\u306b'); /* Ni */ | ||
| 273 | assert(fgetwc(fp) == L'\u3061'); /* Ti */ | ||
| 274 | assert(fgetwc(fp) == L'\u308f'); /* Wa */ | ||
| 275 | |||
| 276 | /* push 263A(smile) back */ | ||
| 277 | assert(ungetwc(L'\u263a', fp)); | ||
| 278 | |||
| 279 | /* we support 1 push back wchar_t */ | ||
| 280 | assert(fgetwc(fp) == L'\u263a'); | ||
| 281 | |||
| 282 | /* then fflush */ | ||
| 283 | r = fflush(fp); | ||
| 284 | assert(r == 0); | ||
| 285 | |||
| 286 | /* fllush() clears the all pushed back chars */ | ||
| 287 | |||
| 288 | /* can read rest of that */ | ||
| 289 | fgetws(buf, sizeof(buf), fp); | ||
| 290 | assert(wcscmp(buf, L" \u4e16\u754c\n") == 0); | ||
| 291 | r = fclose(fp); | ||
| 292 | assert(r == 0); | ||
| 293 | } | ||
| 294 | |||
| 295 | void | ||
| 296 | test_fflush_read6(void) | ||
| 297 | { | ||
| 298 | int r, c; | ||
| 299 | FILE *fp; | ||
| 300 | |||
| 301 | setup(); | ||
| 302 | fp = fopen(TMPFILENAME, "r"); | ||
| 303 | assert(fp != NULL); | ||
| 304 | |||
| 305 | /* | ||
| 306 | * https://pubs.opengroup.org/onlinepubs/9699919799/functions/fflush.html | ||
| 307 | * .. any characters pushed back onto the stream by ungetc() or ungetwc() | ||
| 308 | * that have not subsequently been read from the stream shall be discarded | ||
| 309 | * (without further changing the file offset). | ||
| 310 | */ | ||
| 311 | |||
| 312 | assert(fgetc(fp) == 'H'); | ||
| 313 | c = getc(fp); | ||
| 314 | ungetc(c, fp); /* push back the character has been read */ | ||
| 315 | r = fflush(fp); | ||
| 316 | assert(r == 0); | ||
| 317 | assert(getc(fp) == c); | ||
| 318 | |||
| 319 | fseek(fp, 0, SEEK_SET); | ||
| 320 | assert(fgetc(fp) == 'H'); | ||
| 321 | c = getc(fp); | ||
| 322 | ungetc('X', fp); /* push back the character has not been read */ | ||
| 323 | r = fflush(fp); | ||
| 324 | assert(r == 0); | ||
| 325 | assert(getc(fp) == 'l'); | ||
| 326 | |||
| 327 | r = fclose(fp); | ||
| 328 | assert(r == 0); | ||
| 329 | } | ||
| 330 | |||
| 331 | int | ||
| 332 | main(int argc, char *argv[]) | ||
| 333 | { | ||
| 334 | setlocale(LC_ALL, "C.UTF-8"); | ||
| 335 | |||
| 336 | test_fflush_read0(); | ||
| 337 | test_fflush_read1(); | ||
| 338 | test_fflush_read2(); | ||
| 339 | test_fflush_read3(); | ||
| 340 | test_fflush_read4(); | ||
| 341 | test_fflush_read5(); | ||
| 342 | test_fflush_read6(); | ||
| 343 | |||
| 344 | exit(0); | ||
| 345 | } | ||
diff --git a/src/regress/lib/libc/stdio/test_ungetwc.c b/src/regress/lib/libc/stdio/test_ungetwc.c deleted file mode 100644 index bb4e853020..0000000000 --- a/src/regress/lib/libc/stdio/test_ungetwc.c +++ /dev/null | |||
| @@ -1,90 +0,0 @@ | |||
| 1 | /* $OpenBSD: test_ungetwc.c,v 1.1 2025/05/25 05:32:45 yasuoka Exp $ */ | ||
| 2 | |||
| 3 | /* | ||
| 4 | * Copyright (c) 2025 YASUOKA Masahiko <yasuoka@yasuoka.net> | ||
| 5 | * | ||
| 6 | * Permission to use, copy, modify, and distribute this software for any | ||
| 7 | * purpose with or without fee is hereby granted, provided that the above | ||
| 8 | * copyright notice and this permission notice appear in all copies. | ||
| 9 | * | ||
| 10 | * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | ||
| 11 | * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | ||
| 12 | * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | ||
| 13 | * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | ||
| 14 | * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | ||
| 15 | * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | ||
| 16 | * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | ||
| 17 | */ | ||
| 18 | |||
| 19 | #include <assert.h> | ||
| 20 | #include <stdio.h> | ||
| 21 | #include <stdlib.h> | ||
| 22 | #include <string.h> | ||
| 23 | #include <unistd.h> | ||
| 24 | #include <locale.h> | ||
| 25 | #include <wchar.h> | ||
| 26 | |||
| 27 | /* we use assert() */ | ||
| 28 | #undef NDEBUG | ||
| 29 | |||
| 30 | #define TMPFILENAME "test_ungetwc.tmp" | ||
| 31 | |||
| 32 | void setupw(void); | ||
| 33 | void test_fflush_ungetwc0(void); | ||
| 34 | |||
| 35 | void | ||
| 36 | setupw(void) | ||
| 37 | { | ||
| 38 | FILE *fp; | ||
| 39 | |||
| 40 | /* common setup */ | ||
| 41 | unlink(TMPFILENAME); | ||
| 42 | fp = fopen(TMPFILENAME, "w+"); | ||
| 43 | assert(fp != NULL); | ||
| 44 | /* Konnitiwa Sekai(in Kanji) */ | ||
| 45 | fputws(L"\u3053\u3093\u306b\u3061\u308f \u4e16\u754c\n", fp); | ||
| 46 | fclose(fp); | ||
| 47 | } | ||
| 48 | |||
| 49 | /* fflush work with reading file and seekable + ungetwc */ | ||
| 50 | void | ||
| 51 | test_fflush_ungetwc0(void) | ||
| 52 | { | ||
| 53 | int r; | ||
| 54 | wchar_t buf[80]; | ||
| 55 | FILE *fp; | ||
| 56 | |||
| 57 | setupw(); | ||
| 58 | |||
| 59 | fp = fopen(TMPFILENAME, "r"); | ||
| 60 | |||
| 61 | assert(fp != NULL); | ||
| 62 | assert(fgetwc(fp) == L'\u3053'); /* Ko */ | ||
| 63 | assert(fgetwc(fp) == L'\u3093'); /* N */ | ||
| 64 | assert(fgetwc(fp) == L'\u306b'); /* Ni */ | ||
| 65 | assert(fgetwc(fp) == L'\u3061'); /* Ti */ | ||
| 66 | assert(fgetwc(fp) == L'\u308f'); /* Wa */ | ||
| 67 | |||
| 68 | /* push 263A(smile) back */ | ||
| 69 | assert(ungetwc(L'\u263a', fp)); | ||
| 70 | |||
| 71 | /* we support 1 push back wchar_t */ | ||
| 72 | assert(fgetwc(fp) == L'\u263a'); | ||
| 73 | |||
| 74 | /* can read reset of that */ | ||
| 75 | fgetws(buf, sizeof(buf), fp); | ||
| 76 | assert(wcscmp(buf, L" \u4e16\u754c\n") == 0); | ||
| 77 | |||
| 78 | r = fclose(fp); | ||
| 79 | assert(r == 0); | ||
| 80 | } | ||
| 81 | |||
| 82 | int | ||
| 83 | main(int argc, char *argv[]) | ||
| 84 | { | ||
| 85 | setlocale(LC_ALL, "C.UTF-8"); | ||
| 86 | |||
| 87 | test_fflush_ungetwc0(); | ||
| 88 | |||
| 89 | exit(0); | ||
| 90 | } | ||
