1# 2# This file and its contents are supplied under the terms of the 3# Common Development and Distribution License ("CDDL"), version 1.0. 4# You may only use this file in accordance with the terms of version 5# 1.0 of the CDDL. 6# 7# A full copy of the text of the CDDL should have accompanied this 8# source. A copy of the CDDL is also available via the Internet at 9# http://www.illumos.org/license/CDDL. 10# 11 12# 13# Copyright 2026 Gordon W. Ross 14# 15 16# 17# Design notes for <cstdio> test cases 18# 19# <cstdio> must provide all C90 stdio functions in namespace std:: 20# stdio_iso.h declares functions in namespace std:: and stdio_c99.h 21# does NOT wrap in namespace std:: (todo: 18190), so C99 symbols 22# only reach std:: via GCC's using-declarations in <cstdio>. 23# 24 25# 26# Types - must be in std:: 27# 28type | std::FILE | cstdio | CXX98+ 29type | std::fpos_t | cstdio | CXX98+ 30type | std::size_t | cstdio | CXX98+ 31 32# 33# C90 file functions - must be in std:: 34# 35func | std::fclose |\ 36 int |\ 37 FILE * |\ 38 cstdio | CXX98+ 39func | std::fflush |\ 40 int |\ 41 FILE * |\ 42 cstdio | CXX98+ 43func | std::fopen |\ 44 FILE * |\ 45 const char *; const char * |\ 46 cstdio | CXX98+ 47func | std::freopen |\ 48 FILE * |\ 49 const char *; const char *; FILE * |\ 50 cstdio | CXX98+ 51func | std::fread |\ 52 size_t |\ 53 void *; size_t; size_t; FILE * |\ 54 cstdio | CXX98+ 55func | std::fwrite |\ 56 size_t |\ 57 const void *; size_t; size_t; FILE * |\ 58 cstdio | CXX98+ 59func | std::fgetc |\ 60 int |\ 61 FILE * |\ 62 cstdio | CXX98+ 63func | std::fgets |\ 64 char * |\ 65 char *; int; FILE * |\ 66 cstdio | CXX98+ 67func | std::fputc |\ 68 int |\ 69 int; FILE * |\ 70 cstdio | CXX98+ 71func | std::fputs |\ 72 int |\ 73 const char *; FILE * |\ 74 cstdio | CXX98+ 75func | std::getc |\ 76 int |\ 77 FILE * |\ 78 cstdio | CXX98+ 79func | std::putc |\ 80 int |\ 81 int; FILE * |\ 82 cstdio | CXX98+ 83func | std::ungetc |\ 84 int |\ 85 int; FILE * |\ 86 cstdio | CXX98+ 87func | std::fseek |\ 88 int |\ 89 FILE *; long; int |\ 90 cstdio | CXX98+ 91func | std::ftell |\ 92 long |\ 93 FILE * |\ 94 cstdio | CXX98+ 95func | std::rewind |\ 96 void |\ 97 FILE * |\ 98 cstdio | CXX98+ 99func | std::feof |\ 100 int |\ 101 FILE * |\ 102 cstdio | CXX98+ 103func | std::ferror |\ 104 int |\ 105 FILE * |\ 106 cstdio | CXX98+ 107func | std::clearerr |\ 108 void |\ 109 FILE * |\ 110 cstdio | CXX98+ 111func | std::perror |\ 112 void |\ 113 const char * |\ 114 cstdio | CXX98+ 115func | std::printf |\ 116 int |\ 117 const char * |\ 118 cstdio | CXX98+ 119func | std::fprintf |\ 120 int |\ 121 FILE *; const char * |\ 122 cstdio | CXX98+ 123func | std::sprintf |\ 124 int |\ 125 char *; const char * |\ 126 cstdio | CXX98+ 127func | std::puts |\ 128 int |\ 129 const char * |\ 130 cstdio | CXX98+ 131func | std::remove |\ 132 int |\ 133 const char * |\ 134 cstdio | CXX98+ 135func | std::rename |\ 136 int |\ 137 const char *; const char * |\ 138 cstdio | CXX98+ 139func | std::tmpnam |\ 140 char * |\ 141 char * |\ 142 cstdio | CXX98+ 143func | std::setbuf |\ 144 void |\ 145 FILE *; char * |\ 146 cstdio | CXX98+ 147func | std::setvbuf |\ 148 int |\ 149 FILE *; char *; int; size_t |\ 150 cstdio | CXX98+ 151func | std::tmpfile |\ 152 FILE * |\ 153 |\ 154 cstdio | CXX98+ 155func | std::getchar |\ 156 int |\ 157 |\ 158 cstdio | CXX98+ 159func | std::putchar |\ 160 int |\ 161 int |\ 162 cstdio | CXX98+ 163func | std::fgetpos |\ 164 int |\ 165 FILE *; std::fpos_t * |\ 166 cstdio | CXX98+ 167func | std::fsetpos |\ 168 int |\ 169 FILE *; const std::fpos_t * |\ 170 cstdio | CXX98+ 171func | std::scanf |\ 172 int |\ 173 const char * |\ 174 cstdio | CXX98+ 175func | std::fscanf |\ 176 int |\ 177 FILE *; const char * |\ 178 cstdio | CXX98+ 179func | std::sscanf |\ 180 int |\ 181 const char *; const char * |\ 182 cstdio | CXX98+ 183func | std::vfprintf |\ 184 int |\ 185 FILE *; const char *; std::va_list |\ 186 cstdio; cstdarg | CXX98+ 187func | std::vprintf |\ 188 int |\ 189 const char *; std::va_list |\ 190 cstdio; cstdarg | CXX98+ 191func | std::vsprintf |\ 192 int |\ 193 char *; const char *; std::va_list |\ 194 cstdio; cstdarg | CXX98+ 195 196# 197# gets() was present in C++98, deprecated in C++11, removed in C++14. 198# Note that deprecated version behaves like "not present" because the 199# test probes are compiled with -Wall -Werror. 200# This case is intentionally WRONG until 18196 is fixed. 201# The last part should be: CXX98+ -CXX11+ 202# 203func | std::gets |\ 204 char * |\ 205 char * |\ 206 cstdio | CXX98+ 207 208# 209# C99 functions - required in std:: since C++11. 210# On illumos, GCC's <cstdio> also exposes these in C++98 via CXX_C99+ 211# (using -D_STDC_C99), but we test for what the standard requires. 212# 213func | std::snprintf |\ 214 int |\ 215 char *; size_t; const char * |\ 216 cstdio | CXX11+ 217func | std::vsnprintf |\ 218 int |\ 219 char *; size_t; const char *; std::va_list |\ 220 cstdio; cstdarg | CXX11+ 221func | std::vfscanf |\ 222 int |\ 223 FILE *; const char *; std::va_list |\ 224 cstdio; cstdarg | CXX11+ 225func | std::vscanf |\ 226 int |\ 227 const char *; std::va_list |\ 228 cstdio; cstdarg | CXX11+ 229func | std::vsscanf |\ 230 int |\ 231 const char *; const char *; std::va_list |\ 232 cstdio; cstdarg | CXX11+ 233