1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- From 8ebf6708ba54147b44f5638b93f123fd55d4c37e Mon Sep 17 00:00:00 2001
- From: Khem Raj <raj.khem@gmail.com>
- Date: Fri, 3 Aug 2018 09:42:06 -0700
- Subject: [PATCH] localedef --add-to-archive uses a hard-coded locale path
- it doesn't exist in normal use, and there's no way to pass an
- alternative filename.
- Add a fallback of $LOCALEARCHIVE from the environment, and allow
- creation of new locale archives that are not the system archive.
- Upstream-Status: Inappropriate (OE-specific)
- Signed-off-by: Ross Burton <ross.burton@intel.com>
- Signed-off-by: Khem Raj <raj.khem@gmail.com>
- ---
- locale/programs/locarchive.c | 35 +++++++++++++++++++++++++----------
- 1 file changed, 25 insertions(+), 10 deletions(-)
- diff --git a/locale/programs/locarchive.c b/locale/programs/locarchive.c
- index eeb2fa6ffe..15274b0191 100644
- --- a/locale/programs/locarchive.c
- +++ b/locale/programs/locarchive.c
- @@ -339,12 +339,24 @@ enlarge_archive (struct locarhandle *ah, const struct locarhead *head)
- struct namehashent *oldnamehashtab;
- struct locarhandle new_ah;
- size_t prefix_len = output_prefix ? strlen (output_prefix) : 0;
- - char archivefname[prefix_len + sizeof (ARCHIVE_NAME)];
- - char fname[prefix_len + sizeof (ARCHIVE_NAME) + sizeof (".XXXXXX") - 1];
- + char *archivefname;
- + char *fname;
- + char *envarchive = getenv("LOCALEARCHIVE");
-
- - if (output_prefix)
- - memcpy (archivefname, output_prefix, prefix_len);
- - strcpy (archivefname + prefix_len, ARCHIVE_NAME);
- + if (envarchive != NULL)
- + {
- + archivefname = xmalloc(strlen(envarchive) + 1);
- + fname = xmalloc(strlen(envarchive) + sizeof (".XXXXXX"));
- + strcpy (archivefname, envarchive);
- + }
- + else
- + {
- + archivefname = xmalloc(prefix_len + sizeof (ARCHIVE_NAME));
- + fname = xmalloc(prefix_len + sizeof (ARCHIVE_NAME) + sizeof (".XXXXXX") - 1);
- + if (output_prefix)
- + memcpy (archivefname, output_prefix, prefix_len);
- + strcpy (archivefname + prefix_len, ARCHIVE_NAME);
- + }
- strcpy (stpcpy (fname, archivefname), ".XXXXXX");
-
- /* Not all of the old file has to be mapped. Change this now this
- @@ -568,10 +580,13 @@ open_archive (struct locarhandle *ah, bool readonly)
- /* If ah has a non-NULL fname open that otherwise open the default. */
- if (archivefname == NULL)
- {
- - archivefname = default_fname;
- - if (output_prefix)
- - memcpy (default_fname, output_prefix, prefix_len);
- - strcpy (default_fname + prefix_len, ARCHIVE_NAME);
- + archivefname = getenv("LOCALEARCHIVE");
- + if (archivefname == NULL) {
- + archivefname = default_fname;
- + if (output_prefix)
- + memcpy (default_fname, output_prefix, prefix_len);
- + strcpy (default_fname + prefix_len, ARCHIVE_NAME);
- + }
- }
-
- while (1)
- @@ -584,7 +599,7 @@ open_archive (struct locarhandle *ah, bool readonly)
- the default locale archive we ignore the failure and
- list an empty archive, otherwise we print an error
- and exit. */
- - if (errno == ENOENT && archivefname == default_fname)
- + if (errno == ENOENT)
- {
- if (readonly)
- {
|