11.18Sriastrad/* $NetBSD: toupper_.c,v 1.18 2025/09/15 00:11:54 riastradh Exp $ */ 21.6Scgd 31.1Sjtc/* 41.9Ssalo * Written by J.T. Conklin <jtc@NetBSD.org>. 51.7Sjtc * Public domain. 61.1Sjtc */ 71.1Sjtc 81.8Schristos#include <sys/cdefs.h> 91.1Sjtc#if defined(LIBC_RCS) && !defined(lint) 101.18Sriastrad__RCSID("$NetBSD: toupper_.c,v 1.18 2025/09/15 00:11:54 riastradh Exp $"); 111.1Sjtc#endif /* LIBC_RCS and not lint */ 121.1Sjtc 131.13Stnozaki#include <sys/ctype_bits.h> 141.15Sriastrad#include <sys/mman.h> 151.15Sriastrad 161.1Sjtc#include <stdio.h> 171.15Sriastrad 181.15Sriastrad#include "ctype_guard.h" 191.12Stnozaki#include "ctype_local.h" 201.1Sjtc 211.1Sjtc#if EOF != -1 221.1Sjtc#error "EOF != -1" 231.1Sjtc#endif 241.1Sjtc 251.15Sriastrad__ctype_table 261.15Sriastradstatic const short _C_toupper_tab_guarded_[_C_TOUPPER_TAB_GUARD + 271.15Sriastrad 1 + _CTYPE_NUM_CHARS] = { 281.18Sriastrad _CTYPE_GUARD_INIT(_C_TOUPPER_TAB_GUARD, EOF) 291.15Sriastrad [_C_TOUPPER_TAB_GUARD] = EOF, 301.1Sjtc 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 311.1Sjtc 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 321.1Sjtc 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 331.1Sjtc 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 341.1Sjtc 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 351.1Sjtc 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 361.1Sjtc 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 371.1Sjtc 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 381.1Sjtc 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 391.1Sjtc 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 401.1Sjtc 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 411.1Sjtc 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 421.1Sjtc 0x60, 'A', 'B', 'C', 'D', 'E', 'F', 'G', 431.1Sjtc 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 441.1Sjtc 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 451.1Sjtc 'X', 'Y', 'Z', 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 461.1Sjtc 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 471.1Sjtc 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 481.1Sjtc 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 491.1Sjtc 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 501.1Sjtc 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 511.1Sjtc 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 521.1Sjtc 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 531.1Sjtc 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 541.1Sjtc 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 551.1Sjtc 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 561.1Sjtc 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 571.1Sjtc 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 581.1Sjtc 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 591.1Sjtc 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 601.1Sjtc 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 611.1Sjtc 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff 621.1Sjtc}; 631.17Sriastrad__ctype_table_guarded(_C_toupper_tab_, _C_toupper_tab_guarded_, 641.16Sriastrad 1 + _CTYPE_NUM_CHARS, __SIZEOF_SHORT__); 651.1Sjtc 661.14Sjoerg#ifdef __BUILD_LEGACY 671.14Sjoerg#ifdef __weak_alias 681.14Sjoerg__weak_alias(_C_toupper_, _C_toupper_tab_) 691.14Sjoerg#endif 701.14Sjoerg#endif 711.14Sjoerg 721.14Sjoergconst short *_toupper_tab_ = &_C_toupper_tab_[0]; 731.15Sriastrad 741.15Sriastrad#if _CTYPE_GUARD_PAGE 751.15Sriastrad__attribute__((constructor)) 761.15Sriastradstatic void 771.15Sriastrad_C_toupper_tab_guard_init(void) 781.15Sriastrad{ 791.15Sriastrad 801.18Sriastrad if (constructor_allow_ctype_abuse()) 811.18Sriastrad return; 821.15Sriastrad (void)mprotect(__UNCONST(_C_toupper_tab_guarded_), _CTYPE_GUARD_SIZE, 831.15Sriastrad PROT_NONE); 841.15Sriastrad} 851.15Sriastrad#endif /* _CTYPE_GUARD_PAGE */ 86