mirror of
				https://sourceware.org/git/glibc.git
				synced 2025-11-03 20:53:13 +03:00 
			
		
		
		
	2002-08-04 Ulrich Drepper <drepper@redhat.com> * stdio-common/psignal.c: Declare _sys_siglist_internal. Use USEINT to access _sys_siglist. * string/strsignal.c: Likewise. * sysdeps/generic/siglist.c: Add _sys_siglist_internal alias. * sysdeps/gnu/siglist.c: Likewise. * sysdeps/unix/siglist.c: Likewise. * sysdeps/unix/sysv/linux/arm/siglist.c: Likewise. * libio/fileops.c: Add missing INTUSEs for _IO_file_jumps. * libio/wfileops.c: Add missing INTUSE for _IO_file_close. * intl/dcigettext.c: Define _nl_default_dirname_internal as hidden alias and use it. * intl/bindtextdom.c: Use _nl_default_dirname_internal. * include/netinet/in.h: Add declaration of in6addr_loopback_internal. * inet/in6_addr.c: Add INTVARDEF for in6addr_loopback. * sysdeps/posix/getaddrinfo.c: Use INTUSE for in6addr_loopback access. * include/time.h: Add libc_hidden_proto for __gmtime_r. * time/gmtime.c (__gmtime_r): Add libc_hidden_def. * iconv/Versions: Replace __gconv_alias_db, __gconv_modules_db, and __gconv_cache with __gconv_get_alias_db, __gconv_get_modules_db, and __gconv_get_cache respectively. * iconv/gconv_cache.c (gconv_cache): Renamed for __gconv_cache and defined static. Change all users. (__gconv_get_cache): New function. * iconv/gconv_db.c (__gconv_get_modules_db): New function. (__gconv_get_alias_db): New function. * iconv/gconv_int.h (__gconv_alias_db): Declare as hidden. (__conv_modules_db): Likewise. Add prototypes for __gconv_get_cache, __gconv_get_modules_db, and __gconv_get_alias_db. * iconv/iconv_prog.c: Use the new functions instead of accessing the variables. * include/stdlib.h: Add prototype and libc_hidden_proto for __default_morecore. * sysdeps/generic/morecore.c: Include <stdlib.h>. * malloc/obstack.c: Remove fputs macro. * malloc/mtrace.c: Remove fopen macro.
		
			
				
	
	
		
			135 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			135 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/* Copyright (C) 1991, 1994-2000, 2001, 2002 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; if not, write to the Free
 | 
						|
   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
 | 
						|
   02111-1307 USA.  */
 | 
						|
 | 
						|
#include <signal.h>
 | 
						|
#include <stdio.h>
 | 
						|
#include <stdlib.h>
 | 
						|
#include <string.h>
 | 
						|
#include <libintl.h>
 | 
						|
#include <bits/libc-lock.h>
 | 
						|
 | 
						|
 | 
						|
#ifndef	HAVE_GNU_LD
 | 
						|
#define	_sys_siglist	sys_siglist
 | 
						|
#endif
 | 
						|
 | 
						|
/* Defined in siglist.c.  */
 | 
						|
extern const char *const _sys_siglist[];
 | 
						|
extern const char *const _sys_siglist_internal[] attribute_hidden;
 | 
						|
static __libc_key_t key;
 | 
						|
 | 
						|
/* If nonzero the key allocation failed and we should better use a
 | 
						|
   static buffer than fail.  */
 | 
						|
#define BUFFERSIZ	100
 | 
						|
static char local_buf[BUFFERSIZ];
 | 
						|
static char *static_buf;
 | 
						|
 | 
						|
/* Destructor for the thread-specific data.  */
 | 
						|
static void init (void);
 | 
						|
static void free_key_mem (void *mem);
 | 
						|
static char *getbuffer (void);
 | 
						|
 | 
						|
 | 
						|
/* Return a string describing the meaning of the signal number SIGNUM.  */
 | 
						|
char *
 | 
						|
strsignal (int signum)
 | 
						|
{
 | 
						|
  __libc_once_define (static, once);
 | 
						|
  const char *desc;
 | 
						|
 | 
						|
  /* If we have not yet initialized the buffer do it now.  */
 | 
						|
  __libc_once (once, init);
 | 
						|
 | 
						|
  if (
 | 
						|
#ifdef SIGRTMIN
 | 
						|
      (signum >= SIGRTMIN && signum <= SIGRTMAX) ||
 | 
						|
#endif
 | 
						|
      signum < 0 || signum >= NSIG
 | 
						|
      || (desc = INTUSE(_sys_siglist)[signum]) == NULL)
 | 
						|
    {
 | 
						|
      char *buffer = getbuffer ();
 | 
						|
      int len;
 | 
						|
#ifdef SIGRTMIN
 | 
						|
      if (signum >= SIGRTMIN && signum <= SIGRTMAX)
 | 
						|
	len = __snprintf (buffer, BUFFERSIZ - 1, _("Real-time signal %d"),
 | 
						|
			  signum - SIGRTMIN);
 | 
						|
      else
 | 
						|
#endif
 | 
						|
	len = __snprintf (buffer, BUFFERSIZ - 1, _("Unknown signal %d"),
 | 
						|
			  signum);
 | 
						|
      if (len >= BUFFERSIZ)
 | 
						|
	buffer = NULL;
 | 
						|
      else
 | 
						|
	buffer[len] = '\0';
 | 
						|
 | 
						|
      return buffer;
 | 
						|
    }
 | 
						|
 | 
						|
  return (char *) _(desc);
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
/* Initialize buffer.  */
 | 
						|
static void
 | 
						|
init (void)
 | 
						|
{
 | 
						|
  if (__libc_key_create (&key, free_key_mem))
 | 
						|
    /* Creating the key failed.  This means something really went
 | 
						|
       wrong.  In any case use a static buffer which is better than
 | 
						|
       nothing.  */
 | 
						|
    static_buf = local_buf;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
/* Free the thread specific data, this is done if a thread terminates.  */
 | 
						|
static void
 | 
						|
free_key_mem (void *mem)
 | 
						|
{
 | 
						|
  free (mem);
 | 
						|
  __libc_setspecific (key, NULL);
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
/* Return the buffer to be used.  */
 | 
						|
static char *
 | 
						|
getbuffer (void)
 | 
						|
{
 | 
						|
  char *result;
 | 
						|
 | 
						|
  if (static_buf != NULL)
 | 
						|
    result = static_buf;
 | 
						|
  else
 | 
						|
    {
 | 
						|
      /* We don't use the static buffer and so we have a key.  Use it
 | 
						|
	 to get the thread-specific buffer.  */
 | 
						|
      result = __libc_getspecific (key);
 | 
						|
      if (result == NULL)
 | 
						|
	{
 | 
						|
	  /* No buffer allocated so far.  */
 | 
						|
	  result = malloc (BUFFERSIZ);
 | 
						|
	  if (result == NULL)
 | 
						|
	    /* No more memory available.  We use the static buffer.  */
 | 
						|
	    result = local_buf;
 | 
						|
	  else
 | 
						|
	    __libc_setspecific (key, result);
 | 
						|
	}
 | 
						|
    }
 | 
						|
 | 
						|
  return result;
 | 
						|
}
 |