mirror of
git://sourceware.org/git/glibc.git
synced 2025-01-30 12:31:53 +08:00
Sync up loadmsgcat.c with gettext
This commit is contained in:
parent
d12704c78f
commit
3247f28556
12
ChangeLog
12
ChangeLog
@ -1,3 +1,15 @@
|
||||
2014-07-02 Siddhesh Poyarekar <siddhesh@redhat.com>
|
||||
|
||||
Sync up with gettext.
|
||||
* intl/loadmsgcat.c: Define O_BINARY if not defined.
|
||||
[_MSC_VER]: Include malloc.h
|
||||
[_LIBC]: Define PRI_MACROS_BROKEN if it is not defined.
|
||||
(get_sysdep_segment_value) [!__UCLIBC__]: Return "I" flag.
|
||||
(_nl_load_domain): Open DOMAIN_FILE in binary mode. Don't use
|
||||
TEMP_FAILURE_RETRY. Cast return of alloca.
|
||||
[!_LIBC] Call gl_rwlock_init.
|
||||
[IN_LIBGLOCALE]: Call _nl_find_msg with one less argument.
|
||||
|
||||
2014-07-02 Roland McGrath <roland@hack.frob.com>
|
||||
|
||||
* misc/sys/cdefs.h: Check if __STDC_VERSION__ is defined
|
||||
|
@ -39,14 +39,19 @@
|
||||
# define alloca __builtin_alloca
|
||||
# define HAVE_ALLOCA 1
|
||||
#else
|
||||
# if defined HAVE_ALLOCA_H || defined _LIBC
|
||||
# include <alloca.h>
|
||||
# ifdef _MSC_VER
|
||||
# include <malloc.h>
|
||||
# define alloca _alloca
|
||||
# else
|
||||
# ifdef _AIX
|
||||
#pragma alloca
|
||||
# if defined HAVE_ALLOCA_H || defined _LIBC
|
||||
# include <alloca.h>
|
||||
# else
|
||||
# ifndef alloca
|
||||
# ifdef _AIX
|
||||
#pragma alloca
|
||||
# else
|
||||
# ifndef alloca
|
||||
char *alloca ();
|
||||
# endif
|
||||
# endif
|
||||
# endif
|
||||
# endif
|
||||
@ -88,7 +93,17 @@ char *alloca ();
|
||||
#ifdef _LIBC
|
||||
# include "../locale/localeinfo.h"
|
||||
# include <not-cancel.h>
|
||||
#endif
|
||||
|
||||
/* Handle multi-threaded applications. */
|
||||
#ifdef _LIBC
|
||||
# include <bits/libc-lock.h>
|
||||
#else
|
||||
# include "lock.h"
|
||||
#endif
|
||||
|
||||
#ifdef _LIBC
|
||||
# define PRI_MACROS_BROKEN 0
|
||||
#endif
|
||||
|
||||
/* Provide fallback values for macros that ought to be defined in <inttypes.h>.
|
||||
@ -472,6 +487,24 @@ char *alloca ();
|
||||
# define freea(p) free (p)
|
||||
#endif
|
||||
|
||||
/* For systems that distinguish between text and binary I/O.
|
||||
O_BINARY is usually declared in <fcntl.h>. */
|
||||
#if !defined O_BINARY && defined _O_BINARY
|
||||
/* For MSC-compatible compilers. */
|
||||
# define O_BINARY _O_BINARY
|
||||
# define O_TEXT _O_TEXT
|
||||
#endif
|
||||
#ifdef __BEOS__
|
||||
/* BeOS 5 has O_BINARY and O_TEXT, but they have no effect. */
|
||||
# undef O_BINARY
|
||||
# undef O_TEXT
|
||||
#endif
|
||||
/* On reasonable systems, binary I/O is the default. */
|
||||
#ifndef O_BINARY
|
||||
# define O_BINARY 0
|
||||
#endif
|
||||
|
||||
|
||||
/* We need a sign, whether a new catalog was loaded, which can be associated
|
||||
with all translations. This is important if the translations are
|
||||
cached by one of GCC's features. */
|
||||
@ -732,10 +765,12 @@ get_sysdep_segment_value (const char *name)
|
||||
/* Test for a glibc specific printf() format directive flag. */
|
||||
if (name[0] == 'I' && name[1] == '\0')
|
||||
{
|
||||
#if defined _LIBC || __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2)
|
||||
#if defined _LIBC \
|
||||
|| ((__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2)) \
|
||||
&& !defined __UCLIBC__)
|
||||
/* The 'I' flag, in numeric format directives, replaces ASCII digits
|
||||
with the 'outdigits' defined in the LC_CTYPE locale facet. This is
|
||||
used for Farsi (Persian) and maybe Arabic. */
|
||||
used for Farsi (Persian), some Indic languages, and maybe Arabic. */
|
||||
return "I";
|
||||
#else
|
||||
return "";
|
||||
@ -779,8 +814,7 @@ _nl_load_domain (struct loaded_l10nfile *domain_file,
|
||||
Not necessary anymore since if the lock is available this
|
||||
is finished.
|
||||
*/
|
||||
__libc_lock_unlock_recursive (lock);
|
||||
return;
|
||||
goto done;
|
||||
}
|
||||
|
||||
domain_file->decided = -1;
|
||||
@ -798,7 +832,7 @@ _nl_load_domain (struct loaded_l10nfile *domain_file,
|
||||
goto out;
|
||||
|
||||
/* Try to open the addressed file. */
|
||||
fd = open (domain_file->filename, O_RDONLY);
|
||||
fd = open (domain_file->filename, O_RDONLY | O_BINARY);
|
||||
if (fd == -1)
|
||||
goto out;
|
||||
|
||||
@ -846,11 +880,15 @@ _nl_load_domain (struct loaded_l10nfile *domain_file,
|
||||
read_ptr = (char *) data;
|
||||
do
|
||||
{
|
||||
long int nb = (long int) TEMP_FAILURE_RETRY (read (fd, read_ptr,
|
||||
to_read));
|
||||
long int nb = (long int) read (fd, read_ptr, to_read);
|
||||
if (nb <= 0)
|
||||
goto out;
|
||||
|
||||
{
|
||||
#ifdef EINTR
|
||||
if (nb == -1 && errno == EINTR)
|
||||
continue;
|
||||
#endif
|
||||
goto out;
|
||||
}
|
||||
read_ptr += nb;
|
||||
to_read -= nb;
|
||||
}
|
||||
@ -947,6 +985,7 @@ _nl_load_domain (struct loaded_l10nfile *domain_file,
|
||||
((char *) data
|
||||
+ W (domain->must_swap, data->sysdep_segments_offset));
|
||||
sysdep_segment_values =
|
||||
(const char **)
|
||||
alloca (n_sysdep_segments * sizeof (const char *));
|
||||
for (i = 0; i < n_sysdep_segments; i++)
|
||||
{
|
||||
@ -1244,13 +1283,24 @@ _nl_load_domain (struct loaded_l10nfile *domain_file,
|
||||
/* No caches of converted translations so far. */
|
||||
domain->conversions = NULL;
|
||||
domain->nconversions = 0;
|
||||
#ifdef _LIBC
|
||||
__libc_rwlock_init (domain->conversions_lock);
|
||||
#else
|
||||
gl_rwlock_init (domain->conversions_lock);
|
||||
#endif
|
||||
|
||||
/* Get the header entry and look for a plural specification. */
|
||||
#ifdef IN_LIBGLOCALE
|
||||
nullentry =
|
||||
_nl_find_msg (domain_file, domainbinding, NULL, "", &nullentrylen);
|
||||
#else
|
||||
nullentry = _nl_find_msg (domain_file, domainbinding, "", 0, &nullentrylen);
|
||||
#endif
|
||||
if (__builtin_expect (nullentry == (char *) -1, 0))
|
||||
{
|
||||
#ifdef _LIBC
|
||||
__libc_rwlock_fini (domain->conversions_lock);
|
||||
#endif
|
||||
goto invalid;
|
||||
}
|
||||
EXTRACT_PLURAL_EXPRESSION (nullentry, &domain->plural, &domain->nplurals);
|
||||
@ -1261,6 +1311,7 @@ _nl_load_domain (struct loaded_l10nfile *domain_file,
|
||||
|
||||
domain_file->decided = 1;
|
||||
|
||||
done:
|
||||
__libc_lock_unlock_recursive (lock);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user