-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.
-
2002-10-22 Jakub Jelinek <jakub@redhat.com>
+ * locale/programs/locarchive.c (add_alias): Change locrec_offset arg
+ 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.
+
* locale/programs/locarchive.c (enlarge_archive): Make sure
string_size is always a multiple of 4.
Reported by Andreas Schwab <schwab@suse.de>.
+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.
+
2002-10-21 Roland McGrath <roland@redhat.com>
* sysdeps/generic/libc-tls.c (__libc_setup_tls): Initialize the static
static void
add_alias (struct locarhandle *ah, const char *alias, bool replace,
- const char *oldname, uint32_t locrec_offset)
+ const char *oldname, uint32_t *locrec_offset_p)
{
+ uint32_t locrec_offset = *locrec_offset_p;
struct locarhead *head = ah->addr;
const size_t name_len = strlen (alias);
struct namehashent *namehashent = insert_name (ah, alias, strlen (alias),
namehashent = insert_name (ah, oldname, strlen (oldname), true);
assert (namehashent->name_offset != 0);
assert (namehashent->locrec_offset != 0);
- locrec_offset = namehashent->locrec_offset;
+ *locrec_offset_p = namehashent->locrec_offset;
/* Tail call to try the whole thing again. */
- add_alias (ah, alias, replace, oldname, locrec_offset);
+ add_alias (ah, alias, replace, oldname, locrec_offset_p);
return;
}
/* This call does the main work. */
locrec_offset = add_locale (ah, normalized_name ?: name, data, replace);
- free (normalized_name);
if (locrec_offset == 0)
{
+ free (normalized_name);
if (mask & XPG_NORM_CODESET)
free ((char *) normalized_codeset);
return -1;
} *filedata = data[LC_CTYPE].addr;
codeset = (char *) filedata
+ filedata->strindex[_NL_ITEM_INDEX (_NL_CTYPE_CODESET_NAME)];
+ char *normalized_codeset_name = NULL;
normalized_codeset = _nl_normalize_codeset (codeset, strlen (codeset));
mask |= XPG_NORM_CODESET;
- asprintf (&normalized_name, "%s%s%s.%s%s%s",
+ asprintf (&normalized_codeset_name, "%s%s%s.%s%s%s",
language, territory == NULL ? "" : "_", territory ?: "",
normalized_codeset,
modifier == NULL ? "" : "@", modifier ?: "");
- add_alias (ah, normalized_name, replace, name, locrec_offset);
- free (normalized_name);
+ add_alias (ah, normalized_codeset_name, replace,
+ normalized_name ?: name, &locrec_offset);
+ free (normalized_codeset_name);
}
/* Now read the locale.alias files looking for lines whose
&& !strcmp (modifier ?: "", rhs_modifier ?: ""))
/* We have a winner. */
add_alias (ah, alias, replace,
- normalized_name ?: name, locrec_offset);
+ normalized_name ?: name, &locrec_offset);
if (rhs_mask & XPG_NORM_CODESET)
free ((char *) rhs_normalized_codeset);
}
fclose (fp);
}
+ free (normalized_name);
+
if (mask & XPG_NORM_CODESET)
free ((char *) normalized_codeset);