about summary refs log tree commit diff
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
glibc-ca130fe4651a2ca547b05187bdc2804defc8a66b.tar.xz
glibc-ca130fe4651a2ca547b05187bdc2804defc8a66b.zip
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;