(categories_write): Fix two bugs with handling string arrays. If writing a locale file fails, test whether it is an directory. In this case create LC_xxx/SYS_LC_xxx instead of LC_xxx. This is what the C Library functions to while loading.

This commit is contained in:
Ulrich Drepper 1995-07-17 13:16:15 +00:00
parent 9a70fcabea
commit 787429e3f0
2 changed files with 28 additions and 6 deletions

View File

@ -571,7 +571,7 @@ categories_write (void)
{ {
data->idx[cnt] = len; data->idx[cnt] = len;
++len; ++len;
iov[1 + cnt].iov_base = (char *) ""; iov[1 + cnt].iov_base = "";
iov[1 + cnt].iov_len = 1; iov[1 + cnt].iov_len = 1;
++cnt; ++cnt;
} }
@ -622,7 +622,7 @@ categories_write (void)
if (*first != NULL) if (*first != NULL)
{ {
slen = strlen (*first) + 1; slen = strlen (*first) + 1;
iov[1 + cnt].iov_base = first; iov[1 + cnt].iov_base = *first;
} }
else else
{ {
@ -655,14 +655,31 @@ categories_write (void)
/* Construct the output filename from the argument given to /* Construct the output filename from the argument given to
localedef on the command line. */ localedef on the command line. */
path = (char *) obstack_alloc (&obstk, strlen (output_path) + path = (char *) obstack_alloc (&obstk, strlen (output_path) +
strlen (category[cat_no].name) + 1); 2 * strlen (category[cat_no].name) + 5);
t = stpcpy (path, output_path); t = stpcpy (path, output_path);
strcpy (t, category[cat_no].name); strcpy (t, category[cat_no].name);
fd = creat (path, 0666); fd = creat (path, 0666);
if (fd == -1) if (fd == -1)
{ {
error (0, 0, gettext ("cannot open output file `%s': %m"), path); /* Check whether it failed because the named file is a directory.
In that case we use the file .../LC_xxx/SYS_LC_xxx, as the
loading functions of the C Library do. */
struct stat st;
if (stat (path, &st) == 0 && S_ISDIR (st.st_mode))
{
stpcpy (stpcpy (strchr (path, '\0'), "/SYS_"),
category[cat_no].name);
fd = creat (path, 0666);
}
}
if (fd == -1)
{
error (0, 0, gettext ("cannot open output file `%s': %m"),
path);
result = 1; result = 1;
} }
else else
@ -674,7 +691,7 @@ categories_write (void)
result = 1; result = 1;
} }
if (elems==0) write(fd, &elems, 1); if (elems==0) write(fd, &elems, 10);
close (fd); close (fd);
} }
@ -772,7 +789,7 @@ is_locale_name (int cat_no, const char *str, int len)
if (max_count == 0) if (max_count == 0)
locale_names = (char **) xmalloc ((max_count = 10) locale_names = (char **) xmalloc ((max_count = 10)
* sizeof (char *)); * sizeof (char *));
else else if (locale_count >= max_count)
locale_names = (char **) xrealloc (locale_names, locale_names = (char **) xrealloc (locale_names,
(max_count *= 2) (max_count *= 2)
* sizeof (char *)); * sizeof (char *));

View File

@ -48,6 +48,11 @@ struct utsname
/* Name of the hardware type the system is running on. */ /* Name of the hardware type the system is running on. */
char machine[_UTSNAME_LENGTH]; char machine[_UTSNAME_LENGTH];
#if _UTSNAME_DOMAIN_LENGTH - 0
/* Name of the domain of this node on the network. */
char domainname[_UTSNAME_DOMAIN_LENGTH];
#endif
}; };
#ifdef __USE_SVID #ifdef __USE_SVID