toupper_.c revision 1.15
11.15Sriastrad/* $NetBSD: toupper_.c,v 1.15 2025/03/29 19:40:42 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.15Sriastrad__RCSID("$NetBSD: toupper_.c,v 1.15 2025/03/29 19:40:42 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_guarded(_C_toupper_tab_, _C_toupper_tab_guarded_); 261.15Sriastrad__ctype_table 271.15Sriastradstatic const short _C_toupper_tab_guarded_[_C_TOUPPER_TAB_GUARD + 281.15Sriastrad 1 + _CTYPE_NUM_CHARS] = { 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.1Sjtc 641.14Sjoerg#ifdef __BUILD_LEGACY 651.14Sjoerg#ifdef __weak_alias 661.14Sjoerg__weak_alias(_C_toupper_, _C_toupper_tab_) 671.14Sjoerg#endif 681.14Sjoerg#endif 691.14Sjoerg 701.14Sjoergconst short *_toupper_tab_ = &_C_toupper_tab_[0]; 711.15Sriastrad 721.15Sriastrad#if _CTYPE_GUARD_PAGE 731.15Sriastrad__attribute__((constructor)) 741.15Sriastradstatic void 751.15Sriastrad_C_toupper_tab_guard_init(void) 761.15Sriastrad{ 771.15Sriastrad 781.15Sriastrad (void)mprotect(__UNCONST(_C_toupper_tab_guarded_), _CTYPE_GUARD_SIZE, 791.15Sriastrad PROT_NONE); 801.15Sriastrad} 811.15Sriastrad#endif /* _CTYPE_GUARD_PAGE */ 82