The localedef --list-archive option claims that it can
accept a [file] argument and list the contents of that
archive. The support was never implemented. This patch
adds that support and allows --list-archive to work as
expected. You can now use localedef to list the contents
of arbitrary locale archives by using:
./localedef --list-archive file
Many Linux arches require fixed mmaps to be aligned higher than pagesize,
so use the SHMLBA define as it represents this quantity exactly.
This fixes spurious errors seen on those arches like:
cannot map archive header: Invalid argument
URL: http://sourceware.org/bugzilla/show_bug.cgi?id=10283
Reported-by: CHIKAMA Masaki <masaki.chikama@gmail.com>
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
When mkstemp fails, the error message the user gets back is:
cannot create temporary file: No such file or directory
That isn't terribly useful in figuring out why, so include the full
filename we tried to create in the error output.
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
to MAP_ANON in PROT_NONE mmap64 call.
(open_archive): Likewise.
(file_data_available_p): Use mmap64 instead of mremap.
(enlarge_archive): Likewise. Update head if ah->addr changed.
Attempt to reserve address space after mmap64 region.
mmaped and add new reserved field.
* locale/programs/locarchive.c (RESERVE_MMAP_SIZE): Define.
(create_archive): Reserve address space and then map file into it.
(open_archive): Likewise.
(file_data_available_p): New function.
(compare_from_file): New function.
(close_archive): Adjust to member name changes.
(add_locale): Before comparing locale data, check it is mapped.
Otherwise fall back to reading from the file.
INITIAL_SIZE_STRINGS, INITIAL_NUM_LOCREC): Update to accomodate
current number of locales in SUPPORTED.
(create_archive): Initialize serial.
(enlarge_archive): Preserve aliases rather than duplicating
their locrecs.
2003-12-03 Ulrich Drepper <drepper@redhat.com>
* locale/programs/locarchive.c (enlarge_archive): Print size info
only in verbose mode.
* locale/iso-3166.def: Three letter code of Romania changed.
into pointer to locrec_offset.
(add_locale_to_archive): Adjust callers. Free normalized_name right
before returning, not immediately after add_locale, pass it to
add_alias if not NULL instead of name. Rename second normalized_name
occurence to nnormalized_codeset_name.
2002-10-21 Andreas Schwab <schwab@suse.de>
* sysdeps/unix/sysv/linux/ia64/syscalls.list (s_execve): Set
caller to EXTRA instead of execve, since the latter has a
higher-priority implementation in linuxthreads.
* locale/hashval.h (compute_hashval): Use prototype defn.
(hashval_t): New macro, defined to unsigned long int
if not already defined.
(compute_hashval): Return hashval_t instead of unsigned long int.
* locale/loadarchive.c (hashval_t): New macro.
* locale/programs/locarchive.c: Include hashval.h directly instead
of simple-hash.h.
(compute_hashval, hashval_t): Define these macros first.
(insert_name): Use archive_hashval instead of compute_hashval.
(add_locale, delete_locales_from_archive): Likewise.
2002-08-28 Jakub Jelinek <jakub@redhat.com>
* locale/programs/locarchive.c (insert_name): Suppress warnings about
hash collisions if be_quiet.
* locale/locale.h (__newlocale, __duplocale, __freelocale,
__uselocale): Don't declare these any more.
* include/locale.h (__uselocale): Declare here instead, using __typeof.
circular dependencies only if the locale in question hasn't
been finished.
* locale/programs/linereader.c (get_string): Pass LC_CTYPE not
CTYPE_LOCALE to load_locale.
* locale/programs/locfile.c (locfile_read): Don't include
unneeded but available locales in locale_mask.
* locale/programs/locarchive.c (enlarge_archive): If quiet, don't
print any messages about enlarging archive.
the type of locale_data_t's elements.
* locale/programs/locarchive.c (cmpcategorysize): New static function.
(add_locale): Use that to sort the categories by size and put all
those that fit into two pages into the LC_ALL block, instead of
hard-coding it to do everything but LC_CTYPE and LC_COLLATE.
(show_archive_content): Detect categories inside LC_ALL block
directly, instead of hard-coding.
2002-08-14 Jakub Jelinek <jakub@redhat.com>
* locale/programs/locarchive.c (struct oldlocrecent): New.
(oldlocrecentcmp): New.
(enlarge_archive): Re-add locales in the order they were added
to the archive.
(add_locale): Put all the small locale files together, if the small
locale file block would occupy less pages if page size aligned, align
it.
(show_archive_content): Adjust for locale archives optimized for speed.
2002-08-14 Roland McGrath <roland@frob.com>
* configure.in: Use "MISSING" as not-found value for MIG.
* sysdeps/mach/configure.in: Fatal if mig not found.
* configure, sysdeps/mach/configure: Regenerated.
name to find codeset name (if any) and normalize it. If the
normalized name differs, look up only that in the archive.
* locale/programs/locarchive.c (add_locale_to_archive): If the name
contains a codeset, normalize the codeset store only the normalized
name in the archive. If not, add an alias containing the locale's
normalized codeset name. Apply codeset name normalization when
matching entries in the alias file.
* locale/programs/locarchive.c (delete_locales_from_archive): Don't
decrement HEAD->namehash_used here.
(add_locale): Only need to insert name string when name_offset != 0.
* locale/programs/localedef.c (options): Add -A/--alias-file.
(alias_file): New variable.
(parse_opt): Grok -A, set that.
* locale/programs/localedef.h: Declare it.
* locale/programs/locarchive.c (insert_name): New function, broken out
of ...
(add_locale_to_archive): ... here. Call that.
(add_alias): New function.
(add_locale): New static function, add_locale_to_archive renamed.
(add_locale_to_archive): Call that and use add_alias to add an alias
for the name with codeset if the given name lacks it.
(enlarge_archive): Call add_locale instead of add_locale_to_archive.
* locale/Makefile (routines): Add loadarchive.
* locale/loadarchive.c: New file, started from code by Ulrich Drepper.
(_nl_load_locale_from_archive): New function.
* locale/localeinfo.h: Declare it.
* locale/findlocale.c (_nl_find_locale): If using default locale path,
try _nl_load_locale_from_archive first.
* locale/loadlocale.c (_nl_intern_locale_data): New function,
broken out of _nl_load_locale.
(_nl_load_locale): Call that.
* locale/localeinfo.h: Declare it.
(struct locale_data): Replace member `mmaped' with `alloc', an enum.
(struct locale_data): Remove unused member `options'.
* locale/findlocale.c (_nl_remove_locale): Update uses.
* locale/loadlocale.c (_nl_load_locale, _nl_unload_locale): Likewise.
* locale/C-collate.c: Update initializer.
* locale/C-identification.c: Likewise.
* locale/C-measurement.c: Likewise.
* locale/C-telephone.c: Likewise.
* locale/C-address.c: Likewise.
* locale/C-name.c: Likewise.
* locale/C-paper.c: Likewise.
* locale/C-time.c: Likewise.
* locale/C-numeric.c: Likewise.
* locale/C-monetary.c: Likewise.
* locale/C-messages.c : Likewise.
* locale/C-ctype.c: Likewise.
* locale/hashval.h [! LONGBITS]: Include <limits.h> here and
use CHAR_BIT instead of BITSPERBYTE.
* locale/localeinfo.h (_nl_find_locale, _nl_load_locale,
_nl_unload_locale): Add `internal_function attribute_hidden' to decls.
* locale/findlocale.c (_nl_find_locale): Add internal_function to defn.
(_nl_remove_locale): Likewise.
* locale/loadlocale.c (_nl_load_locale, _nl_unload_locale): Likewise.
* locale/findlocale.c (_nl_default_locale_path): New variable.
(_nl_find_locale): If LOCALE_PATH is null, default to that.
* locale/localeinfo.h: Declare it.
* locale/setlocale.c (setlocale): Use _nl_default_locale_path
in place of LOCALEDIR. If no LOCPATH, pass null to _nl_find_locale.
* locale/newlocale.c (__newlocale): Likewise.
* misc/err.c (vwarnx, vwarn): Fix typos in libc_hidden_def uses.
* inet/rexec.c (rexec_af): Add libc_hidden_def.
* sysdeps/generic/morecore.c: Likewise.
* signal/allocrtsig.c (__libc_current_sigrtmin): Likewise.
(__libc_current_sigrtmax): Likewise.
2002-08-08 Roland McGrath <roland@redhat.com>
* locale/loadlocale.c (_nl_load_locale): Don't use MAP_INHERIT.
* catgets/open_catalog.c (__open_catalog): Likewise.
* locale/programs/locarchive.c (INITIAL_NUM_NAMES): Renamed
from typo INITIAL_NUM_NANES.
(create_archive): Update use.
2002-07-24 Ulrich Drepper <drepper@redhat.com>
* locale/hashval.h: Make more self-containedby defining LONG_BITS.
* locale/programs/simple-hash.c: Remove LONG_BITS definition.
* locale/programs/locarchive.c (add_locale_to_archive): Correct
test to detect duplicate locales.
* libio/fileops.c (_IO_new_file_seekoff): Fail if relative
position would be before beginning of file.
(_IO_file_seekoff_mmap): Likewise.
* libio/Makefile (tests): Add bug-fseek.
* libio/bug-fseek.c: New file.
* intl/explodename.c: Remove support for CEN-style locale variables.
It was never used and shouldn't be since it's not portable.
* intl/finddomain.c: Likewise.
* intl/l10nflist.c: Likewise.
* intl/loadinfo.h: Likewise.
* locale/findlocale.c: Likewise.
2002-04-18 Ulrich Drepper <drepper@redhat.com>
* locale/programs/locfile.c (to_archive): New variable. To collect
data which has to be added to the locale archive.
(write_all_categories): Take new third parameter with locale name.
Unless no_archive flag set add new locale data to the archive
(write_locale_data): Unless no-archive flag set store generated data
in to_archive data structure instead of generation output file.
Add new parameter with locale category index.
* locale/programs/locfile.h: Add new parameters in declaractions of
write_all_categories and write_locale_data.
* locale/programs/localedef.c: Recognize --no-archive, --list-archive,
--add-to-archive, and --delete-from-archive options. Pass extra
parameter to write_all_categories.
* locale/programs/localedef.h: Add prototypes for functions in
locarchive.c.
* locale/locarchive.h: New file.
* locale/programs/locarchive.c: New file.
* locale/Makefile (distribute): Add programs/locarchive.c and
locarchive.h.
(localedef-modules): Add md5 and locarchive.
Add vpath to crypt subdir for md5.c.
* locale/programs/ld-address.c: Pass locale category ID as new second
parameter to write_locale_data.
* locale/programs/ld-collate.c: Likewise.
* locale/programs/ld-ctype.c: Likewise.
* locale/programs/ld-identification.c: Likewise.
* locale/programs/ld-measurement.c: Likewise.
* locale/programs/ld-messages.c: Likewise.
* locale/programs/ld-monetary.c: Likewise.
* locale/programs/ld-name.c: Likewise.
* locale/programs/ld-numeric.c: Likewise.
* locale/programs/ld-paper.c: Likewise.
* locale/programs/ld-telephone.c: Likewise.
* locale/programs/ld-time.c: Likewise.
* locale/simple-hash.c: Move compute_hashval function from here...
* locale/hashval.h: ...to here. New file.
* locale/simple-hash.h: Add prototype for compute_hashval.
* include/libintl.h: Minor cleanups.
* elf/reldep7.c: New file.
* elf/reldep7mod1.c: New file.
* elf/reldep7mod2.c: New file.
* elf/Makefile: Add rules to build and run reldep7.