summaryrefslogtreecommitdiff
path: root/catgets/catgets.c
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2001-08-08 21:25:01 +0000
committerUlrich Drepper <drepper@redhat.com>2001-08-08 21:25:01 +0000
commitca130fe4651a2ca547b05187bdc2804defc8a66b (patch)
tree9e743e6df3161a03fda43de4ff71f3b52f21c4fa /catgets/catgets.c
parent443470c3360d5d4ffb8f3078f47cda55fd5cffbd (diff)
downloadglibc-ca130fe4651a2ca547b05187bdc2804defc8a66b.tar.gz
Update.
* catgets/open_catalog.c: Rewrite code to assume that the function is called at catopen time and not delayed in catgets. * catgets/catgets.c (catopen): Call __open_catalog and fail if that function failed. (catgets): Remove code for delayed opening of catalog. * catgets/catgetsinfo.h: Remove now unnecessary information from struct catalog_info. Change __open_catalog prototype. * catgets/gencat.c: Adjust __open_catalog call. * catgets/test-gencat.c: Stop program if catopen failed.
Diffstat (limited to 'catgets/catgets.c')
-rw-r--r--catgets/catgets.c44
1 files changed, 7 insertions, 37 deletions
diff --git a/catgets/catgets.c b/catgets/catgets.c
index c719a02934..248b552c91 100644
--- a/catgets/catgets.c
+++ b/catgets/catgets.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1996-2000, 2001 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper, <drepper@gnu.org>.
@@ -36,10 +36,6 @@ catopen (const char *cat_name, int flag)
__nl_catd result;
const char *env_var = NULL;
const char *nlspath = NULL;
- size_t cat_name_len = strlen (cat_name) + 1;
- size_t env_var_len = 0;
- size_t nlspath_len = 0;
- char *endp;
if (strchr (cat_name, '/') == NULL)
{
@@ -54,8 +50,6 @@ catopen (const char *cat_name, int flag)
|| (__libc_enable_secure && strchr (env_var, '/') != NULL))
env_var = "C";
- env_var_len = strlen (env_var) + 1;
-
nlspath = getenv ("NLSPATH");
if (nlspath != NULL && *nlspath != '\0')
{
@@ -65,34 +59,19 @@ catopen (const char *cat_name, int flag)
__stpcpy (__stpcpy (__stpcpy (tmp, nlspath), ":"), NLSPATH);
nlspath = tmp;
-
- nlspath_len = len;
}
else
- {
- nlspath = NLSPATH;
-
- nlspath_len = sizeof NLSPATH;
- }
+ nlspath = NLSPATH;
}
- result = (__nl_catd) malloc (sizeof (*result) + cat_name_len
- + env_var_len + nlspath_len);
+ result = (__nl_catd) malloc (sizeof (*result));
if (result == NULL)
/* We cannot get enough memory. */
return (nl_catd) -1;
- result->status = closed;
- result->cat_name = endp = (char *) (result + 1);
- endp = __mempcpy (endp, cat_name, cat_name_len);
-
- result->env_var = cat_name_len != 0 ? endp : NULL;
- endp = __mempcpy (endp, env_var, env_var_len);
-
- result->nlspath = nlspath_len != 0 ? endp : NULL;
- memcpy (endp, nlspath, nlspath_len);
-
- __libc_lock_init (result->lock);
+ if (__open_catalog (cat_name, nlspath, env_var, result) != 0)
+ /* Couldn't open the file. */
+ return (nl_catd) -1;
return (nl_catd) result;
}
@@ -112,15 +91,6 @@ catgets (nl_catd catalog_desc, int set, int message, const char *string)
catalog = (__nl_catd) catalog_desc;
- if (catalog->status == closed)
- __open_catalog (catalog);
-
- if (catalog->status == nonexisting)
- {
- __set_errno (EBADF);
- return (char *) string;
- }
-
idx = ((set * message) % catalog->plane_size) * 3;
cnt = 0;
do
@@ -153,7 +123,7 @@ catclose (nl_catd catalog_desc)
#endif /* _POSIX_MAPPED_FILES */
if (catalog->status == malloced)
free ((void *) catalog->file_ptr);
- else if (catalog->status != closed && catalog->status != nonexisting)
+ else
{
__set_errno (EBADF);
return -1;