mirror of
				https://sourceware.org/git/glibc.git
				synced 2025-11-03 20:53:13 +03:00 
			
		
		
		
	Variable declarations removed. (__ctype_b_loc, __ctype_toupper_loc, __ctype_tolower_loc): Declare these functions to replace them. (__isctype, tolower, toupper, _tolower, _toupper): Use those accessor functions plus an indirection rather than the old global variables. * include/ctype.h (__isctype, tolower, _tolower, toupper, _toupper): Macros removed. (__ctype_b_loc, __ctype_toupper_loc, __ctype_tolower_loc): New extern inline functions. * ctype/ctype-info.c: Revert last reversion back the other way. Define tsd vars CTYPE_B, CTYPE_TOLOWER, CTYPE_TOUPPER. Define real function versions of include/ctype.h inlines here. * ctype/Versions (libc: GLIBC_2.3): Add __ctype_b_loc, __ctype_tolower_loc, __ctype_toupper_loc. * locale/lc-ctype.c: Revert last reversion back the other way. (_nl_postload_ctype): If current thread uses the global locale, update its tsd vars. * locale/uselocale.c (__uselocale): Update tsd vars from new locale. * hurd/hurd/threadvar.h (enum __hurd_threadvar_index): Add CTYPE_B, CTYPE_TOLOWER, CTYPE_TOUPPER. * sysdeps/generic/bits/libc-tsd.h (__libc_tsd_address): New macro. * sysdeps/mach/hurd/bits/libc-tsd.h (__libc_tsd_address): Renamed from __libc_tsd_threadvar_location. (__libc_tsd_set, __libc_tsd_get): Update uses.
		
			
				
	
	
		
			66 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			66 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/* libc-internal interface for thread-specific data.  LinuxThreads version.
 | 
						|
   Copyright (C) 1997,98,99,2001,02 Free Software Foundation, Inc.
 | 
						|
   This file is part of the GNU C Library.
 | 
						|
 | 
						|
   The GNU C Library is free software; you can redistribute it and/or
 | 
						|
   modify it under the terms of the GNU Lesser General Public License as
 | 
						|
   published by the Free Software Foundation; either version 2.1 of the
 | 
						|
   License, or (at your option) any later version.
 | 
						|
 | 
						|
   The GNU C Library is distributed in the hope that it will be useful,
 | 
						|
   but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
						|
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | 
						|
   Lesser General Public License for more details.
 | 
						|
 | 
						|
   You should have received a copy of the GNU Lesser General Public
 | 
						|
   License along with the GNU C Library; see the file COPYING.LIB.  If not,
 | 
						|
   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 | 
						|
   Boston, MA 02111-1307, USA.  */
 | 
						|
 | 
						|
#ifndef _BITS_LIBC_TSD_H
 | 
						|
#define _BITS_LIBC_TSD_H 1
 | 
						|
 | 
						|
/* Fast thread-specific data internal to libc.  */
 | 
						|
enum __libc_tsd_key_t { _LIBC_TSD_KEY_MALLOC = 0,
 | 
						|
			_LIBC_TSD_KEY_DL_ERROR,
 | 
						|
			_LIBC_TSD_KEY_RPC_VARS,
 | 
						|
			_LIBC_TSD_KEY_LOCALE,
 | 
						|
			_LIBC_TSD_KEY_CTYPE_B,
 | 
						|
			_LIBC_TSD_KEY_CTYPE_TOLOWER,
 | 
						|
			_LIBC_TSD_KEY_CTYPE_TOUPPER,
 | 
						|
			_LIBC_TSD_KEY_N };
 | 
						|
 | 
						|
#include <tls.h>
 | 
						|
 | 
						|
#if USE_TLS && HAVE___THREAD
 | 
						|
 | 
						|
/* When __thread works, the generic definition is what we want.  */
 | 
						|
# include <sysdeps/generic/bits/libc-tsd.h>
 | 
						|
 | 
						|
#else
 | 
						|
 | 
						|
extern void *(*__libc_internal_tsd_get) (enum __libc_tsd_key_t) __THROW;
 | 
						|
extern int (*__libc_internal_tsd_set) (enum __libc_tsd_key_t,
 | 
						|
				       __const void *)  __THROW;
 | 
						|
extern void **(*const __libc_internal_tsd_address) (enum __libc_tsd_key_t)
 | 
						|
     __THROW __attribute__ ((__const__));
 | 
						|
 | 
						|
#define __libc_tsd_address(KEY) \
 | 
						|
  (__libc_internal_tsd_address != NULL \
 | 
						|
   ? __libc_internal_tsd_address (_LIBC_TSD_KEY_##KEY) \
 | 
						|
   : &__libc_tsd_##KEY##_data)
 | 
						|
 | 
						|
#define __libc_tsd_define(CLASS, KEY)	CLASS void *__libc_tsd_##KEY##_data;
 | 
						|
#define __libc_tsd_get(KEY) \
 | 
						|
  (__libc_internal_tsd_get != NULL \
 | 
						|
   ? __libc_internal_tsd_get (_LIBC_TSD_KEY_##KEY) \
 | 
						|
   : __libc_tsd_##KEY##_data)
 | 
						|
#define __libc_tsd_set(KEY, VALUE) \
 | 
						|
  (__libc_internal_tsd_set != NULL \
 | 
						|
   ? __libc_internal_tsd_set (_LIBC_TSD_KEY_##KEY, (VALUE)) \
 | 
						|
   : ((__libc_tsd_##KEY##_data = (VALUE)), 0))
 | 
						|
 | 
						|
#endif
 | 
						|
 | 
						|
#endif	/* bits/libc-tsd.h */
 |