mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-21 12:30:06 +00:00
Fri Apr 19 00:49:44 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* stdlib/rpmatch.c (rpmatch: try): Take new arg NOMATCH, return value for nonmatching nonerror (instead of !MATCH). (rpmatch): Use it, so we return -1 when NOEXPR doesn't match either. * resolv/getnetnamadr.c (getnetbyaddr): Use u_int32_t instead of unsigned long for variable NET2. * time/etcetera, time/europe, time/solar89: Updated from ADO's 96e. Tue Apr 9 14:37:31 1996 Ulrich Drepper <drepper@cygnus.com> * catgets/Makefile, catgets/catgets.c, catgets/catgetsinfo.h, catgets/config.h, catgets/gencat.c, catgets/nl_types.h, catgets/open_catalog.c: New files. Implementation of XPG4 compliant catgets() function and needed tools. * Makefile (subdirs): Add catgets. Thu Apr 18 23:36:11 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu> * math/Makefile (CPPFLAGS): Append -D__NO_MATH_INLINES. Wed Apr 10 20:48:43 1996 Ulrich Drepper <drepper@cygnus.com> * stdio-common/vfprintf.c: Correct some typos. * sysdeps/libm-ieee754/w_gammaf.c, sysdeps/libm-ieee754/w_lgamma.c, sysdeps/libm-ieee754/w_lgammaf.c: Reference signgam instead of __signgam. Thu Apr 18 21:07:27 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu> * Makerules (no-whole-archive): New variable. (build-shlib): Use it. * elf/Makefile (libdl.so): Use it. * configure.in (libc_cv_ld_no_whole_archive): New check for --no-whole-archive. * config.make.in (have-no-whole-archive): New variable. * stdio-common/printf_fp.c: Increase fudge factor for BIGNUM_SIZE calc from 3 to 4. * Make-dist: Include version.mk. (version, release): Variables removed. * Makeconfig (version.mk): New target. Fri Apr 19 01:42:18 1996 Ulrich Drepper <drepper@cygnus.com> * locale/Makefile (headers): Add langinfo.h. (CPPFLAGS): Remove -Iliblib.
This commit is contained in:
parent
f24f4dc82d
commit
a641835acd
52
ChangeLog
52
ChangeLog
@ -1,3 +1,55 @@
|
||||
Fri Apr 19 00:49:44 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
|
||||
|
||||
* stdlib/rpmatch.c (rpmatch: try): Take new arg NOMATCH, return value
|
||||
for nonmatching nonerror (instead of !MATCH).
|
||||
(rpmatch): Use it, so we return -1 when NOEXPR doesn't match either.
|
||||
|
||||
* resolv/getnetnamadr.c (getnetbyaddr): Use u_int32_t instead of
|
||||
unsigned long for variable NET2.
|
||||
|
||||
* time/etcetera, time/europe, time/solar89: Updated from ADO's 96e.
|
||||
|
||||
Tue Apr 9 14:37:31 1996 Ulrich Drepper <drepper@cygnus.com>
|
||||
|
||||
* catgets/Makefile, catgets/catgets.c, catgets/catgetsinfo.h,
|
||||
catgets/config.h, catgets/gencat.c, catgets/nl_types.h,
|
||||
catgets/open_catalog.c: New files. Implementation of XPG4
|
||||
compliant catgets() function and needed tools.
|
||||
* Makefile (subdirs): Add catgets.
|
||||
|
||||
Thu Apr 18 23:36:11 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
|
||||
|
||||
* math/Makefile (CPPFLAGS): Append -D__NO_MATH_INLINES.
|
||||
|
||||
Wed Apr 10 20:48:43 1996 Ulrich Drepper <drepper@cygnus.com>
|
||||
|
||||
* stdio-common/vfprintf.c: Correct some typos.
|
||||
|
||||
* sysdeps/libm-ieee754/w_gammaf.c, sysdeps/libm-ieee754/w_lgamma.c,
|
||||
sysdeps/libm-ieee754/w_lgammaf.c: Reference signgam instead of
|
||||
__signgam.
|
||||
|
||||
Thu Apr 18 21:07:27 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
|
||||
|
||||
* Makerules (no-whole-archive): New variable.
|
||||
(build-shlib): Use it.
|
||||
* elf/Makefile (libdl.so): Use it.
|
||||
* configure.in (libc_cv_ld_no_whole_archive): New check for
|
||||
--no-whole-archive.
|
||||
* config.make.in (have-no-whole-archive): New variable.
|
||||
|
||||
* stdio-common/printf_fp.c: Increase fudge factor for BIGNUM_SIZE calc
|
||||
from 3 to 4.
|
||||
|
||||
* Make-dist: Include version.mk.
|
||||
(version, release): Variables removed.
|
||||
* Makeconfig (version.mk): New target.
|
||||
|
||||
Fri Apr 19 01:42:18 1996 Ulrich Drepper <drepper@cygnus.com>
|
||||
|
||||
* locale/Makefile (headers): Add langinfo.h.
|
||||
(CPPFLAGS): Remove -Iliblib.
|
||||
|
||||
Mon Apr 15 16:49:04 1996 Roland McGrath <roland@whiz-bang.gnu.ai.mit.edu>
|
||||
|
||||
* malloc/memalign.c, malloc/malloc.h [__DJGPP__ == 1]: Elide memalign
|
||||
|
@ -105,11 +105,7 @@ foo:=$(shell echo '+tsrcs=$(+tsrcs)'>&2)
|
||||
foo:=$(shell echo foobie, dammit! >&2)
|
||||
|
||||
ifndef tardir
|
||||
rel+vers := $(shell sed -n -e 's/^.*RELEASE.*\"\([^"]*\)";$$/\1/p' \
|
||||
-e 's/^.*VERSION.*\"\([^"]*\)";$$/\1/p' \
|
||||
< $(..)version.h)
|
||||
release := $(word 1,$(rel+vers))
|
||||
version := $(word 2,$(rel+vers))
|
||||
-include $(common-objpfx)version.mk
|
||||
export tardir := glibc-$(version)
|
||||
endif
|
||||
|
||||
|
@ -468,6 +468,13 @@ cross-compiling := yes
|
||||
else
|
||||
cross-compiling := no
|
||||
endif
|
||||
|
||||
# Figure out the version numbers from version.h.
|
||||
|
||||
$(common-objpfx)version.mk: $(..)version.h
|
||||
sed -n -e 's/^.*RELEASE.*\"\([^"]*\)";$$/release=\1/p' \
|
||||
-e 's/^.*VERSION.*\"\([^"]*\)";$$/version=\1/p' \
|
||||
< $< > $@-new
|
||||
mv -f $@-new $@
|
||||
|
||||
endif # Makeconfig not yet included
|
||||
|
2
Makefile
2
Makefile
@ -51,7 +51,7 @@ sysdep-subdirs := $(subst $(\n), ,$(sysdep-subdirs))
|
||||
endif
|
||||
|
||||
# These are the subdirectories containing the library source.
|
||||
subdirs = csu assert ctype db locale intl math setjmp signal stdlib \
|
||||
subdirs = csu assert ctype db locale intl catgets math setjmp signal stdlib \
|
||||
stdio-common $(stdio) malloc string wcsmbs time dirent grp pwd\
|
||||
posix io termios resource misc socket sysvipc gmon gnulib \
|
||||
wctype $(wildcard crypt) manual $(sysdep-subdirs) elf
|
||||
|
@ -569,12 +569,19 @@ ifeq (yes,$(build-shared))
|
||||
# on other shared objects.
|
||||
lib%.so: lib%_pic.a; $(build-shlib)
|
||||
|
||||
ifeq ($(libc_cv_ld_no_whole_archive),yes)
|
||||
no-whole-archive = -Wl,--no-whole-archive
|
||||
else
|
||||
no-whole-archive =
|
||||
endif
|
||||
|
||||
define build-shlib
|
||||
$(LINK.o) -shared -o $@ $(sysdep-LDFLAGS) $(config-LDFLAGS) \
|
||||
-Wl,-soname=lib$(libprefix)$(@F:lib%.so=%).so$($(@F)-version) \
|
||||
$(LDFLAGS.so) $(LDFLAGS-$(@F:lib%.so=%).so) \
|
||||
-Wl,-rpath-link=$(common-objdir) \
|
||||
-Wl,--whole-archive $^ $(LDLIBS-$(@F:lib%.so=%).so)
|
||||
-Wl,--whole-archive $^ $(no-whole-archive) \
|
||||
$(LDLIBS-$(@F:lib%.so=%).so)
|
||||
endef
|
||||
|
||||
# Don't try to use -lc when making libc.so itself.
|
||||
|
41
catgets/Makefile
Normal file
41
catgets/Makefile
Normal file
@ -0,0 +1,41 @@
|
||||
# Copyright (C) 1996 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 Library General Public License as
|
||||
# published by the Free Software Foundation; either version 2 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
|
||||
# Library General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU Library 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.
|
||||
|
||||
#
|
||||
# Makefile for catgets.
|
||||
#
|
||||
subdir := catgets
|
||||
|
||||
headers = nl_types.h
|
||||
distribute = catgetsinfo.h config.h
|
||||
routines = catgets open_catalog
|
||||
others = gencat
|
||||
install-bin = gencat
|
||||
|
||||
gencat-modules = xmalloc
|
||||
|
||||
# To find xmalloc.c
|
||||
vpath %.c ../locale/programs
|
||||
|
||||
|
||||
include ../Rules
|
||||
|
||||
$(objpfx)gencat: $(gencat-modules:%=$(objpfx)%.o)
|
||||
|
||||
CPPFLAGS := -DNLSPATH='"$(localedir)/%L/%N:$(localedir)/%L/LC_MESSAGES/%N:"' \
|
||||
-DHAVE_CONFIG_H $(CPPFLAGS)
|
163
catgets/catgets.c
Normal file
163
catgets/catgets.c
Normal file
@ -0,0 +1,163 @@
|
||||
/* Copyright (C) 1996 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper, <drepper@gnu.ai.mit.edu>.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library 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. */
|
||||
|
||||
#include <alloca.h>
|
||||
#include <nl_types.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/mman.h>
|
||||
|
||||
#include "catgetsinfo.h"
|
||||
|
||||
|
||||
/* Open the catalog and return a descriptor for the catalog. */
|
||||
nl_catd
|
||||
catopen (const char *cat_name, int flag)
|
||||
{
|
||||
__nl_catd result;
|
||||
const char *env_var;
|
||||
|
||||
result = (__nl_catd) malloc (sizeof (__nl_catd));
|
||||
if (result == NULL)
|
||||
/* We cannot get enough memory. */
|
||||
return (nl_catd) -1;
|
||||
|
||||
result->status = closed;
|
||||
|
||||
result->cat_name = strdup (cat_name);
|
||||
if (result->cat_name == NULL)
|
||||
{
|
||||
free (result);
|
||||
return (nl_catd) -1;
|
||||
}
|
||||
|
||||
if (strchr (cat_name, '/') == NULL)
|
||||
{
|
||||
if (flag == NL_CAT_LOCALE)
|
||||
{
|
||||
env_var = getenv ("LC_ALL");
|
||||
if (env_var == NULL)
|
||||
{
|
||||
env_var = getenv ("LC_MESSAGES");
|
||||
if (env_var == NULL)
|
||||
{
|
||||
env_var = getenv ("LANG");
|
||||
if (env_var == NULL)
|
||||
env_var = "C";
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
env_var = getenv ("LANG");
|
||||
if (env_var == NULL)
|
||||
env_var = "C";
|
||||
}
|
||||
|
||||
result->env_var = strdup (env_var);
|
||||
if (result->env_var == NULL)
|
||||
{
|
||||
free ((void *) result->cat_name);
|
||||
free ((void *) result);
|
||||
return (nl_catd) -1;
|
||||
}
|
||||
|
||||
if (getenv ("NLSPATH") != NULL)
|
||||
result->nlspath = strdup (getenv ("NLSPATH"));
|
||||
else
|
||||
result->nlspath = strdup (NLSPATH);
|
||||
|
||||
if (result->nlspath == NULL)
|
||||
{
|
||||
free ((void *) result->cat_name);
|
||||
free ((void *) result->env_var);
|
||||
free ((void *) result);
|
||||
return (nl_catd) -1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
result->env_var = NULL;
|
||||
result->nlspath = NULL;
|
||||
}
|
||||
|
||||
return (nl_catd) result;
|
||||
}
|
||||
|
||||
|
||||
/* Return message from message catalog. */
|
||||
char *
|
||||
catgets (nl_catd catalog_desc, int set, int message, const char *string)
|
||||
{
|
||||
__nl_catd catalog;
|
||||
size_t idx;
|
||||
size_t cnt;
|
||||
|
||||
/* Be generous if catalog which failed to be open is used. */
|
||||
if (catalog_desc == (nl_catd) -1 || ++set <= 0 || message < 0)
|
||||
return (char *) string;
|
||||
|
||||
catalog = (__nl_catd) catalog_desc;
|
||||
|
||||
if (catalog->status == closed)
|
||||
__open_catalog (catalog, 1);
|
||||
|
||||
if (catalog->status == nonexisting)
|
||||
return (char *) string;
|
||||
|
||||
idx = ((set * message) % catalog->plane_size) * 3;
|
||||
cnt = 0;
|
||||
do
|
||||
{
|
||||
if (catalog->name_ptr[idx + 0] == (u_int32_t) set
|
||||
&& catalog->name_ptr[idx + 1] == (u_int32_t) message)
|
||||
return (char *) &catalog->strings[catalog->name_ptr[idx + 2]];
|
||||
|
||||
idx += catalog->plane_size * 3;
|
||||
}
|
||||
while (++cnt < catalog->plane_depth);
|
||||
|
||||
return (char *) string;
|
||||
}
|
||||
|
||||
|
||||
/* Return resources used for loaded message catalog. */
|
||||
int
|
||||
catclose (nl_catd catalog_desc)
|
||||
{
|
||||
__nl_catd catalog;
|
||||
|
||||
catalog = (__nl_catd) catalog_desc;
|
||||
|
||||
if (catalog->status == mmaped)
|
||||
munmap ((void *) catalog->file_ptr, catalog->file_size);
|
||||
else if (catalog->status == malloced)
|
||||
free ((void *) catalog->file_ptr);
|
||||
else if (catalog->status != closed && catalog->status != nonexisting)
|
||||
return -1;
|
||||
|
||||
if (catalog->nlspath)
|
||||
free ((void *) catalog->nlspath);
|
||||
if (catalog->env_var)
|
||||
free ((void *) catalog->env_var);
|
||||
free ((void *) catalog);
|
||||
|
||||
return 0;
|
||||
}
|
59
catgets/catgetsinfo.h
Normal file
59
catgets/catgetsinfo.h
Normal file
@ -0,0 +1,59 @@
|
||||
/* Copyright (C) 1996 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper, <drepper@gnu.ai.mit.edu>.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library 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. */
|
||||
|
||||
#include <sys/types.h>
|
||||
|
||||
|
||||
struct catalog_obj
|
||||
{
|
||||
u_int32_t magic;
|
||||
u_int32_t plane_size;
|
||||
u_int32_t plane_depth;
|
||||
/* This is in fact two arrays in one: always a pair of name and
|
||||
pointer into the data area. */
|
||||
u_int32_t name_ptr[0];
|
||||
};
|
||||
|
||||
|
||||
/* This structure will be filled after loading the catalog. */
|
||||
typedef struct catalog_info
|
||||
{
|
||||
enum { closed, nonexisting, mmaped, malloced } status;
|
||||
|
||||
const char *cat_name;
|
||||
const char *env_var;
|
||||
const char *nlspath;
|
||||
|
||||
size_t plane_size;
|
||||
size_t plane_depth;
|
||||
u_int32_t *name_ptr;
|
||||
const char *strings;
|
||||
|
||||
struct catalog_obj *file_ptr;
|
||||
size_t file_size;
|
||||
} *__nl_catd;
|
||||
|
||||
|
||||
|
||||
/* The magic number to signal we really have a catalog file. */
|
||||
#define CATGETS_MAGIC 0x960408de
|
||||
|
||||
|
||||
/* Prototypes for helper functions. */
|
||||
void __open_catalog (__nl_catd __catalog, int __with_path);
|
14
catgets/config.h
Normal file
14
catgets/config.h
Normal file
@ -0,0 +1,14 @@
|
||||
#ifndef _CG_CONFIG_H
|
||||
#define _CG_CONFIG_H
|
||||
|
||||
/* Use the internal textdomain used for libc messages. */
|
||||
#define PACKAGE _libc_intl_domainname
|
||||
#ifndef VERSION
|
||||
/* Get libc version number. */
|
||||
#include "../version.h"
|
||||
#endif
|
||||
|
||||
|
||||
#include_next <config.h>
|
||||
|
||||
#endif
|
1030
catgets/gencat.c
Normal file
1030
catgets/gencat.c
Normal file
File diff suppressed because it is too large
Load Diff
48
catgets/nl_types.h
Normal file
48
catgets/nl_types.h
Normal file
@ -0,0 +1,48 @@
|
||||
/* Copyright (C) 1996 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 Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library 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 _NL_TYPES_H
|
||||
#define _NL_TYPES_H 1
|
||||
#include <features.h>
|
||||
|
||||
/* The default message set used by the gencat program. */
|
||||
#define NL_SETD 1
|
||||
|
||||
/* Value for FLAG parameter of `catgets' to say we want XPG4 compliance. */
|
||||
#define NL_CAT_LOCALE 1
|
||||
|
||||
/* Message catalog descriptor type. */
|
||||
typedef void *nl_catd;
|
||||
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
/* Open message catalog for later use, returning descriptor. */
|
||||
extern nl_catd catopen __P ((__const char *__cat_name, int __flag));
|
||||
|
||||
/* Return translation with NUMBER in SET of CATALOG; if not found
|
||||
return STRING. */
|
||||
extern char *catgets __P ((nl_catd __catalog, int __set, int __number,
|
||||
__const char *__string));
|
||||
|
||||
/* Close message CATALOG. */
|
||||
extern int catclose __P ((nl_catd __catalog));
|
||||
|
||||
__END_DECLS
|
||||
|
||||
#endif /* nl_types.h */
|
263
catgets/open_catalog.c
Normal file
263
catgets/open_catalog.c
Normal file
@ -0,0 +1,263 @@
|
||||
/* Copyright (C) 1996 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper, <drepper@gnu.ai.mit.edu>.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library 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. */
|
||||
|
||||
#include <endian.h>
|
||||
#include <fcntl.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/mman.h>
|
||||
#include <sys/stat.h>
|
||||
|
||||
#include "catgetsinfo.h"
|
||||
|
||||
|
||||
#define SWAPU32(w) \
|
||||
(((w) << 24) | (((w) & 0xff00) << 8) | (((w) >> 8) & 0xff00) | ((w) >> 24))
|
||||
|
||||
|
||||
void
|
||||
__open_catalog (__nl_catd catalog, int with_path)
|
||||
{
|
||||
int fd;
|
||||
struct stat st;
|
||||
int swapping;
|
||||
|
||||
if (strchr (catalog->cat_name, '/') != NULL || !with_path)
|
||||
fd = open (catalog->cat_name, O_RDONLY);
|
||||
else
|
||||
{
|
||||
const char *run_nlspath = catalog->nlspath;
|
||||
#define ENOUGH(n) \
|
||||
if (bufact + (n) >=bufmax) \
|
||||
{ \
|
||||
char *old_buf = buf; \
|
||||
bufmax += 256 + (n); \
|
||||
buf = (char *) alloca (bufmax); \
|
||||
memcpy (buf, old_buf, bufact); \
|
||||
}
|
||||
|
||||
/* The RUN_NLSPATH variable contains a colon separated list of
|
||||
descriptions where we expect to find catalogs. We have to
|
||||
recognize certain % substitutions and stop when we found the
|
||||
first existing file. */
|
||||
char *buf;
|
||||
size_t bufact;
|
||||
size_t bufmax;
|
||||
|
||||
buf = NULL;
|
||||
bufmax = 0;
|
||||
|
||||
fd = -1;
|
||||
while (*run_nlspath != '\0')
|
||||
{
|
||||
bufact = 0;
|
||||
while (*run_nlspath != ':' && *run_nlspath != '\0')
|
||||
if (*run_nlspath == '%')
|
||||
{
|
||||
const char *tmp;
|
||||
|
||||
++run_nlspath; /* We have seen the `%'. */
|
||||
switch (*run_nlspath++)
|
||||
{
|
||||
case 'N':
|
||||
/* Use the catalog name. */
|
||||
ENOUGH (strlen (catalog->cat_name));
|
||||
bufact = stpcpy (&buf[bufact], catalog->cat_name) - buf;
|
||||
break;
|
||||
case 'L':
|
||||
/* Use the current locale category value. */
|
||||
ENOUGH (strlen (catalog->env_var));
|
||||
bufact = stpcpy (&buf[bufact], catalog->env_var) - buf;
|
||||
break;
|
||||
case 'l':
|
||||
/* Use language element of locale category value. */
|
||||
tmp = catalog->env_var;
|
||||
do
|
||||
{
|
||||
ENOUGH (1);
|
||||
buf[bufact++] = *tmp++;
|
||||
}
|
||||
while (*tmp != '\0' && *tmp != '_' && *tmp != '.');
|
||||
break;
|
||||
case 't':
|
||||
/* Use territory element of locale category value. */
|
||||
tmp = catalog->env_var;
|
||||
do
|
||||
++tmp;
|
||||
while (*tmp != '\0' && *tmp != '_' && *tmp != '.');
|
||||
if (*tmp == '_')
|
||||
{
|
||||
++tmp;
|
||||
do
|
||||
{
|
||||
ENOUGH (1);
|
||||
buf[bufact++] = *tmp;
|
||||
}
|
||||
while (*tmp != '\0' && *tmp != '.');
|
||||
}
|
||||
break;
|
||||
case 'c':
|
||||
/* Use code set element of locale category value. */
|
||||
tmp = catalog->env_var;
|
||||
do
|
||||
++tmp;
|
||||
while (*tmp != '\0' && *tmp != '.');
|
||||
if (*tmp == '.')
|
||||
{
|
||||
++tmp;
|
||||
do
|
||||
{
|
||||
ENOUGH (1);
|
||||
buf[bufact++] = *tmp;
|
||||
}
|
||||
while (*tmp != '\0');
|
||||
}
|
||||
break;
|
||||
case '%':
|
||||
ENOUGH (1);
|
||||
buf[bufact++] = '%';
|
||||
break;
|
||||
default:
|
||||
/* Unknown variable: ignore this path element. */
|
||||
bufact = 0;
|
||||
while (*run_nlspath != '\0' && *run_nlspath != ':')
|
||||
++run_nlspath;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ENOUGH (1);
|
||||
buf[bufact++] = *run_nlspath++;
|
||||
}
|
||||
ENOUGH (1);
|
||||
buf[bufact] = '\0';
|
||||
|
||||
if (bufact != 0)
|
||||
{
|
||||
fd = open (buf, O_RDONLY);
|
||||
if (fd >= 0)
|
||||
break;
|
||||
}
|
||||
|
||||
++run_nlspath;
|
||||
}
|
||||
}
|
||||
|
||||
if (fd < 0 || fstat (fd, &st) < 0)
|
||||
{
|
||||
catalog->status = nonexisting;
|
||||
return;
|
||||
}
|
||||
|
||||
#ifndef MAP_COPY
|
||||
/* Linux seems to lack read-only copy-on-write. */
|
||||
#define MAP_COPY MAP_PRIVATE
|
||||
#endif
|
||||
#ifndef MAP_FILE
|
||||
/* Some systems do not have this flag; it is superfluous. */
|
||||
#define MAP_FILE 0
|
||||
#endif
|
||||
#ifndef MAP_INHERIT
|
||||
/* Some systems might lack this; they lose. */
|
||||
#define MAP_INHERIT 0
|
||||
#endif
|
||||
catalog->file_size = st.st_size;
|
||||
catalog->file_ptr =
|
||||
(struct catalog_obj *) mmap (NULL, st.st_size, PROT_READ,
|
||||
MAP_FILE|MAP_COPY|MAP_INHERIT, fd, 0);
|
||||
if (catalog->file_ptr != (struct catalog_obj *) -1)
|
||||
/* Tell the world we managed to mmap the file. */
|
||||
catalog->status = mmaped;
|
||||
else
|
||||
{
|
||||
/* mmap failed perhaps because the system call is not
|
||||
implemented. Try to load the file. */
|
||||
size_t todo;
|
||||
catalog->file_ptr = malloc (st.st_size);
|
||||
if (catalog->file_ptr == NULL)
|
||||
{
|
||||
catalog->status = nonexisting;
|
||||
return;
|
||||
}
|
||||
todo = st.st_size;
|
||||
/* Save read, handle partial reads. */
|
||||
do
|
||||
{
|
||||
size_t now = read (fd, (((char *) &catalog->file_ptr)
|
||||
+ (st.st_size - todo)), todo);
|
||||
if (now == 0)
|
||||
{
|
||||
free ((void *) catalog->file_ptr);
|
||||
catalog->status = nonexisting;
|
||||
return;
|
||||
}
|
||||
todo -= now;
|
||||
}
|
||||
while (todo > 0);
|
||||
catalog->status = malloced;
|
||||
}
|
||||
|
||||
/* We don't need the file anymore. */
|
||||
close (fd);
|
||||
|
||||
/* Determine whether the file is a catalog file and if yes whether
|
||||
it is written using the correct byte order. Else we have to swap
|
||||
the values. */
|
||||
if (catalog->file_ptr->magic == CATGETS_MAGIC)
|
||||
swapping = 0;
|
||||
else if (catalog->file_ptr->magic == SWAPU32 (CATGETS_MAGIC))
|
||||
swapping = 1;
|
||||
else
|
||||
{
|
||||
/* Illegal file. Free he resources and mark catalog as not
|
||||
usable. */
|
||||
if (catalog->status == mmaped)
|
||||
munmap ((void *) catalog->file_ptr, catalog->file_size);
|
||||
else
|
||||
free (catalog->file_ptr);
|
||||
catalog->status = nonexisting;
|
||||
return;
|
||||
}
|
||||
|
||||
#define SWAP(x) (swapping ? SWAPU32 (x) : (x))
|
||||
|
||||
/* Get dimensions of the used hashing table. */
|
||||
catalog->plane_size = SWAP (catalog->file_ptr->plane_size);
|
||||
catalog->plane_depth = SWAP (catalog->file_ptr->plane_depth);
|
||||
|
||||
/* The file contains two versions of the pointer tables. Pick the
|
||||
right one for the local byte order. */
|
||||
#if __BYTE_ORDER == __LITTLE_ENDIAN
|
||||
catalog->name_ptr = &catalog->file_ptr->name_ptr[0];
|
||||
#elif __BYTE_ORDER == __BIG_ENDIAN
|
||||
catalog->name_ptr = &catalog->file_ptr->name_ptr[catalog->plane_size
|
||||
* catalog->plane_depth
|
||||
* 3];
|
||||
#else
|
||||
# error Cannot handle __BYTE_ORDER byte order
|
||||
#endif
|
||||
|
||||
/* The rest of the file contains all the strings. They are
|
||||
addressed relative to the position of the first string. */
|
||||
catalog->strings =
|
||||
(const char *) &catalog->file_ptr->name_ptr[catalog->plane_size
|
||||
* catalog->plane_depth * 3 * 2];
|
||||
}
|
@ -17,6 +17,8 @@ config-defines = @DEFS@
|
||||
elf = @elf@
|
||||
have-initfini = @libc_cv_have_initfini@
|
||||
|
||||
have-no-whole-archive = @libc_cv_ld_no_whole_archive@
|
||||
|
||||
# Configuration options.
|
||||
gnu-as = @gnu_as@
|
||||
gnu-ld = @gnu_ld@
|
||||
|
13
configure.in
13
configure.in
@ -469,6 +469,19 @@ elif test $libc_cv_asm_weakext_directive = yes; then
|
||||
AC_DEFINE(HAVE_ASM_WEAKEXT_DIRECTIVE)
|
||||
fi
|
||||
|
||||
AC_CACHE_CHECK(for ld --no-whole-archive, libc_cv_ld_no_whole_archive, [dnl
|
||||
cat > conftest.c <<\EOF
|
||||
main () { exit (0); }
|
||||
EOF
|
||||
if ${CC-cc} $CFLAGS -Wl,--no-whole-archive \
|
||||
-o conftest conftest.c 2>/dev/null; then
|
||||
libc_cv_ld_no_whole_archive=yes
|
||||
else
|
||||
libc_cv_ld_no_whole_archive=no
|
||||
fi
|
||||
rm -f conftest*])
|
||||
AC_SUBST(libc_cv_ld_no_whole_archive)dnl
|
||||
|
||||
### End of automated tests.
|
||||
### Now run sysdeps configure fragments.
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
# Makefile for elf subdirectory of GNU C Library.
|
||||
|
||||
# Copyright (C) 1995 Free Software Foundation, Inc.
|
||||
# Copyright (C) 1995, 1996 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
|
||||
@ -80,7 +80,7 @@ $(objpfx)libdl.so: $(objpfx)libdl_pic.a $(common-objpfx)libc.so $(objpfx)ld.so
|
||||
$(patsubst %/,cd %;,$(objpfx)) \
|
||||
$(LINK.o) -shared -o $(@:$(objpfx)%=%) \
|
||||
$(LDFLAGS.so) $(LDFLAGS-dl.so) \
|
||||
-Wl,--whole-archive $(^:$(objpfx)%=%)
|
||||
-Wl,--whole-archive $(^:$(objpfx)%=%) $(no-whole-archive)
|
||||
|
||||
$(slibdir)/$(rtld-installed-name): $(objpfx)ld.so; $(do-install-program)
|
||||
$(slibdir)/ld-linux.so.1: $(objpfx)ld-linux.so.1; $(do-install-program)
|
||||
|
@ -21,7 +21,7 @@
|
||||
#
|
||||
subdir := locale
|
||||
|
||||
headers = locale.h
|
||||
headers = locale.h langinfo.h
|
||||
distribute = localeinfo.h categories.def \
|
||||
$(localedef-modules:=.c) $(locale-modules:=.c) \
|
||||
$(lib-modules:=.c) config.h simple-hash.h iso-4217.def \
|
||||
@ -60,7 +60,7 @@ $(objpfx)localedef $(objpfx)locale: $(lib-modules:%=$(objpfx)%.o)
|
||||
CPPFLAGS := -DLOCALE_PATH='"$(localedir)"' \
|
||||
-DCHARMAP_PATH='"$(i18ndir)/charmap"' \
|
||||
-DLOCSRCDIR='"$(i18ndir)/locales"' -DHAVE_CONFIG_H \
|
||||
-Iliblib -Iprograms $(CPPFLAGS)
|
||||
-Iprograms $(CPPFLAGS)
|
||||
|
||||
CFLAGS-charmap.c = -Wno-write-strings
|
||||
CFLAGS-locfile.c = -Wno-write-strings
|
||||
|
@ -71,5 +71,9 @@ include ../Rules
|
||||
# the error return conventions for the math functions.
|
||||
CPPFLAGS-s_lib_version.c := -D_POSIX_MODE
|
||||
|
||||
# We don't want the fdlibm code to use the inline math functions,
|
||||
# only the fdlibm code.
|
||||
CPPFLAGS += -D__NO_MATH_INLINES
|
||||
|
||||
# The fdlibm code generates a lot of these warnings but is otherwise clean.
|
||||
override CFLAGS += -Wno-uninitialized -Wno-write-strings
|
||||
|
@ -1007,7 +1007,7 @@ static const char *re_error_msgid[] =
|
||||
#endif
|
||||
|
||||
/* Roughly the maximum number of failure points on the stack. Would be
|
||||
exactly that if always used MAX_FAILURE_SPACE each time we failed.
|
||||
exactly that if always used MAX_FAILURE_ITEMS items each time we failed.
|
||||
This is a variable only so users of regex can assign to it; we never
|
||||
change it ourselves. */
|
||||
#if defined (MATCH_MAY_ALLOCATE)
|
||||
@ -1224,7 +1224,10 @@ typedef struct
|
||||
#endif
|
||||
|
||||
/* We push at most this many items on the stack. */
|
||||
#define MAX_FAILURE_ITEMS ((num_regs - 1) * NUM_REG_ITEMS + NUM_NONREG_ITEMS)
|
||||
/* We used to use (num_regs - 1), which is the number of registers
|
||||
this regexp will save; but that was changed to 5
|
||||
to avoid stack overflow for a regexp with lots of parens. */
|
||||
#define MAX_FAILURE_ITEMS (5 * NUM_REG_ITEMS + NUM_NONREG_ITEMS)
|
||||
|
||||
/* We actually push this many items. */
|
||||
#define NUM_FAILURE_ITEMS \
|
||||
|
@ -209,7 +209,7 @@ getnetbyaddr(net, net_type)
|
||||
int nn, anslen;
|
||||
querybuf buf;
|
||||
char qbuf[MAXDNAME];
|
||||
unsigned long net2;
|
||||
u_int32_t net2;
|
||||
struct netent *net_entry;
|
||||
|
||||
if (net_type != AF_INET)
|
||||
|
@ -337,7 +337,7 @@ __printf_fp (FILE *fp,
|
||||
would be really big it could lead to memory problems. */
|
||||
{
|
||||
mp_size_t bignum_size = ((ABS (exponent) + BITS_PER_MP_LIMB - 1)
|
||||
/ BITS_PER_MP_LIMB + 3) * sizeof (mp_limb);
|
||||
/ BITS_PER_MP_LIMB + 4) * sizeof (mp_limb);
|
||||
frac = (mp_limb *) alloca (bignum_size);
|
||||
tmp = (mp_limb *) alloca (bignum_size);
|
||||
scale = (mp_limb *) alloca (bignum_size);
|
||||
|
@ -895,7 +895,7 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap)
|
||||
|
||||
tmp = ++f;
|
||||
if (ISDIGIT (*tmp) && read_int (&tmp) && *tmp == L_('$'))
|
||||
/* The width comes from an positional parameter. */
|
||||
/* The width comes from a positional parameter. */
|
||||
goto do_positional;
|
||||
|
||||
width = va_arg (ap, int);
|
||||
@ -914,7 +914,7 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap)
|
||||
LABEL (width):
|
||||
width = read_int (&f);
|
||||
if (*f == L_('$'))
|
||||
/* Oh, oh. The argument comes from an positional parameter. */
|
||||
/* Oh, oh. The argument comes from a positional parameter. */
|
||||
goto do_positional;
|
||||
JUMP (*f, step1_jumps);
|
||||
|
||||
@ -926,7 +926,7 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap)
|
||||
|
||||
tmp = ++f;
|
||||
if (ISDIGIT (*tmp) && read_int (&tmp) > 0 && *tmp == L_('$'))
|
||||
/* The precision comes from an positional parameter. */
|
||||
/* The precision comes from a positional parameter. */
|
||||
goto do_positional;
|
||||
|
||||
prec = va_arg (ap, int);
|
||||
|
@ -30,7 +30,7 @@ rpmatch (response)
|
||||
{
|
||||
/* Match against one of the response patterns, compiling the pattern
|
||||
first if necessary. */
|
||||
inline int try (const int tag, const int match,
|
||||
inline int try (const int tag, const int match, const int nomatch,
|
||||
const char **lastp, regex_t *re)
|
||||
{
|
||||
const char *pattern = nl_langinfo (tag);
|
||||
@ -50,13 +50,13 @@ rpmatch (response)
|
||||
}
|
||||
|
||||
/* Try the pattern. */
|
||||
return regexec (re, response, 0, NULL, 0) == 0 ? match : !match;
|
||||
return regexec (re, response, 0, NULL, 0) == 0 ? match : nomatch;
|
||||
}
|
||||
|
||||
/* We cache the response patterns and compiled regexps here. */
|
||||
static const char *yesexpr, *noexpr;
|
||||
static regex_t yesre, nore;
|
||||
|
||||
return (try (YESEXPR, 1, &yesexpr, &yesre) ?:
|
||||
try (NOEXPR, 0, &noexpr, &nore));
|
||||
return (try (YESEXPR, 1, 0, &yesexpr, &yesre) ?:
|
||||
try (NOEXPR, 0, -1, &noexpr, &nore));
|
||||
}
|
||||
|
@ -20,7 +20,7 @@ static char rcsid[] = "$NetBSD: w_gammaf.c,v 1.4 1995/11/20 22:06:48 jtc Exp $";
|
||||
#include "math.h"
|
||||
#include "math_private.h"
|
||||
|
||||
extern int __signgam;
|
||||
extern int signgam;
|
||||
|
||||
#ifdef __STDC__
|
||||
float __gammaf(float x)
|
||||
@ -30,10 +30,10 @@ extern int __signgam;
|
||||
#endif
|
||||
{
|
||||
#ifdef _IEEE_LIBM
|
||||
return __ieee754_lgammaf_r(x,&__signgam);
|
||||
return __ieee754_lgammaf_r(x,&signgam);
|
||||
#else
|
||||
float y;
|
||||
y = __ieee754_lgammaf_r(x,&__signgam);
|
||||
y = __ieee754_lgammaf_r(x,&signgam);
|
||||
if(_LIB_VERSION == _IEEE_) return y;
|
||||
if(!__finitef(y)&&__finitef(x)) {
|
||||
if(__floorf(x)==x&&x<=(float)0.0)
|
||||
|
@ -23,7 +23,7 @@ static char rcsid[] = "$NetBSD: w_lgamma.c,v 1.6 1995/05/10 20:49:24 jtc Exp $";
|
||||
#include "math.h"
|
||||
#include "math_private.h"
|
||||
|
||||
extern int __signgam;
|
||||
extern int signgam;
|
||||
|
||||
#ifdef __STDC__
|
||||
double __lgamma(double x)
|
||||
@ -33,10 +33,10 @@ extern int __signgam;
|
||||
#endif
|
||||
{
|
||||
#ifdef _IEEE_LIBM
|
||||
return __ieee754_lgamma_r(x,&__signgam);
|
||||
return __ieee754_lgamma_r(x,&signgam);
|
||||
#else
|
||||
double y;
|
||||
y = __ieee754_lgamma_r(x,&__signgam);
|
||||
y = __ieee754_lgamma_r(x,&signgam);
|
||||
if(_LIB_VERSION == _IEEE_) return y;
|
||||
if(!__finite(y)&&__finite(x)) {
|
||||
if(__floor(x)==x&&x<=0.0)
|
||||
|
@ -20,7 +20,7 @@ static char rcsid[] = "$NetBSD: w_lgammaf.c,v 1.3 1995/05/10 20:49:30 jtc Exp $"
|
||||
#include "math.h"
|
||||
#include "math_private.h"
|
||||
|
||||
extern int __signgam;
|
||||
extern int signgam;
|
||||
|
||||
#ifdef __STDC__
|
||||
float __lgammaf(float x)
|
||||
@ -30,10 +30,10 @@ extern int __signgam;
|
||||
#endif
|
||||
{
|
||||
#ifdef _IEEE_LIBM
|
||||
return __ieee754_lgammaf_r(x,&__signgam);
|
||||
return __ieee754_lgammaf_r(x,&signgam);
|
||||
#else
|
||||
float y;
|
||||
y = __ieee754_lgammaf_r(x,&__signgam);
|
||||
y = __ieee754_lgammaf_r(x,&signgam);
|
||||
if(_LIB_VERSION == _IEEE_) return y;
|
||||
if(!__finitef(y)&&__finitef(x)) {
|
||||
if(__floorf(x)==x&&x<=(float)0.0)
|
||||
|
@ -1,4 +1,4 @@
|
||||
# @(#)etcetera 7.4
|
||||
# @(#)etcetera 7.5
|
||||
|
||||
# All of these are set up just so people can "zic -l" to a timezone
|
||||
# that's right for their area, even if it doesn't have a name or DST rules
|
||||
@ -27,7 +27,8 @@ Link Etc/GMT Etc/GMT0
|
||||
# zic -l GMT-12
|
||||
# so we moved the names into the Etc subdirectory.
|
||||
|
||||
Zone Etc/GMT-13 13 - GMT-13 # 12 hours ahead of GMT, plus DST
|
||||
Zone Etc/GMT-14 14 - GMT-14 # 14 hours ahead of GMT
|
||||
Zone Etc/GMT-13 13 - GMT-13
|
||||
Zone Etc/GMT-12 12 - GMT-12
|
||||
Zone Etc/GMT-11 11 - GMT-11
|
||||
Zone Etc/GMT-10 10 - GMT-10
|
||||
|
@ -1,4 +1,4 @@
|
||||
# @(#)europe 7.31
|
||||
# @(#)europe 7.33
|
||||
|
||||
# This data is by no means authoritative; if you think you know better,
|
||||
# go ahead and edit the file (and please send any changes to
|
||||
@ -1644,7 +1644,12 @@ Zone Europe/Lisbon -0:36:32 - LMT 1884
|
||||
# From Rui Pedro Salgueiro <rps@inescca.inescc.pt> (November 12, 1992):
|
||||
# Portugal has recently (September, 27) changed timezone
|
||||
# (from WET to MET or CET) to harmonize with EEC.
|
||||
1:00 EC MET%s
|
||||
1:00 EC MET%s 1996 Mar 31 1:00u
|
||||
# Martin Bruckmann <martin@ua.pt> (1996-02-29) reports via Peter Ilieve
|
||||
# that Portugal is reverting to 0:00 by not moving its clocks this spring.
|
||||
# The new Prime Minister was fed up with getting up in the dark in the winter.
|
||||
0:00 1:00 "WET DST" 1996 Oct 27 1:00u
|
||||
0:00 EC WET%s
|
||||
# We don't know what happened to Madeira or the Azores,
|
||||
# so we'll just use Shanks for now.
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
|
@ -1,4 +1,4 @@
|
||||
# @(#)solar89 7.3
|
||||
# @(#)solar89 7.4
|
||||
|
||||
# Apparent noon times below are for Riyadh; they're a bit off for other places.
|
||||
# Times were computed using a formula provided by the U. S. Naval Observatory:
|
||||
@ -390,4 +390,4 @@ Zone Asia/Riyadh89 3:07:04 - ?? 1989
|
||||
3:07:04 sol89 ?? 1990
|
||||
3:07:04 - ??
|
||||
# For backward compatibility...
|
||||
Link Asia/Riyadh88 Mideast/Riyadh88
|
||||
Link Asia/Riyadh89 Mideast/Riyadh89
|
||||
|
Loading…
Reference in New Issue
Block a user