about summary refs log tree commit diff
path: root/iconv/gconv_cache.c
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2001-09-01 19:03:22 +0000
committerUlrich Drepper <drepper@redhat.com>2001-09-01 19:03:22 +0000
commit9a1f71a7238deea567c3e3bd95c8ec5fd973f54d (patch)
treed9b638f4c738e4b44d813e2ceae07875d7b27d84 /iconv/gconv_cache.c
parent45e0579fb7f8008c3df3358ca63bf9189e236edb (diff)
downloadglibc-9a1f71a7238deea567c3e3bd95c8ec5fd973f54d.tar.gz
glibc-9a1f71a7238deea567c3e3bd95c8ec5fd973f54d.tar.xz
glibc-9a1f71a7238deea567c3e3bd95c8ec5fd973f54d.zip
Update.
2001-09-01  Ulrich Drepper  <drepper@redhat.com>

	* iconv/gconv_cache.c: Rename variable cache to __gconv_cache and
	export it.
	* iconv/Versions (libc) [GLIBC_2.2.5]: Export __gconv_cache.
	* iconv/iconv_prog.c (insert_cache): New function.
	(print_known_names): If cache is used call insert_cache to use the
	information from the cache [PR libc/2509].
Diffstat (limited to 'iconv/gconv_cache.c')
-rw-r--r--iconv/gconv_cache.c49
1 files changed, 25 insertions, 24 deletions
diff --git a/iconv/gconv_cache.c b/iconv/gconv_cache.c
index b4fd8d9836..a2beee06fa 100644
--- a/iconv/gconv_cache.c
+++ b/iconv/gconv_cache.c
@@ -31,7 +31,7 @@
 
 #include "../intl/hash-string.h"
 
-static void *cache;
+void *__gconv_cache;
 static size_t cache_size;
 static int cache_malloced;
 
@@ -70,25 +70,25 @@ __gconv_load_cache (void)
   /* Make the file content available.  */
   cache_size = st.st_size;
 #ifdef _POSIX_MAPPED_FILES
-  cache = __mmap (NULL, cache_size, PROT_READ, MAP_SHARED, fd, 0);
-  if (__builtin_expect (cache == MAP_FAILED, 0))
+  __gconv_cache = __mmap (NULL, cache_size, PROT_READ, MAP_SHARED, fd, 0);
+  if (__builtin_expect (__gconv_cache == MAP_FAILED, 0))
 #endif
     {
       size_t already_read;
 
-      cache = malloc (cache_size);
-      if (cache == NULL)
+      __gconv_cache = malloc (cache_size);
+      if (__gconv_cache == NULL)
 	goto close_and_exit;
 
       already_read = 0;
       do
 	{
-	  ssize_t n = __read (fd, (char *) cache + already_read,
+	  ssize_t n = __read (fd, (char *) __gconv_cache + already_read,
 			      cache_size - already_read);
 	  if (__builtin_expect (n, 0) == -1)
 	    {
-	      free (cache);
-	      cache = NULL;
+	      free (__gconv_cache);
+	      __gconv_cache = NULL;
 	      goto close_and_exit;
 	    }
 
@@ -103,7 +103,7 @@ __gconv_load_cache (void)
   __close (fd);
 
   /* Check the consistency.  */
-  header = (struct gconvcache_header *) cache;
+  header = (struct gconvcache_header *) __gconv_cache;
   if (__builtin_expect (header->magic, GCONVCACHE_MAGIC) != GCONVCACHE_MAGIC
       || __builtin_expect (header->string_offset >= cache_size, 0)
       || __builtin_expect (header->hash_offset >= cache_size, 0)
@@ -116,14 +116,14 @@ __gconv_load_cache (void)
     {
       if (cache_malloced)
 	{
-	  free (cache);
+	  free (__gconv_cache);
 	  cache_malloced = 0;
 	}
 #ifdef _POSIX_MAPPED_FILES
       else
-	__munmap (cache, cache_size);
+	__munmap (__gconv_cache, cache_size);
 #endif
-      cache = NULL;
+      __gconv_cache = NULL;
 
       return -1;
     }
@@ -145,9 +145,10 @@ find_module_idx (const char *str, size_t *idxp)
   const struct hash_entry *hashtab;
   unsigned int limit;
 
-  header = (const struct gconvcache_header *) cache;
-  strtab = (char *) cache + header->string_offset;
-  hashtab = (struct hash_entry *) ((char *) cache + header->hash_offset);
+  header = (const struct gconvcache_header *) __gconv_cache;
+  strtab = (char *) __gconv_cache + header->string_offset;
+  hashtab = (struct hash_entry *) ((char *) __gconv_cache
+				   + header->hash_offset);
 
   hval = hash_string (str);
   idx = hval % header->hash_size;
@@ -210,7 +211,7 @@ __gconv_compare_alias_cache (const char *name1, const char *name2, int *result)
   size_t name1_idx;
   size_t name2_idx;
 
-  if (cache == NULL)
+  if (__gconv_cache == NULL)
     return -1;
 
   if (find_module_idx (name1, &name1_idx) != 0
@@ -237,13 +238,13 @@ __gconv_lookup_cache (const char *toset, const char *fromset,
   const struct module_entry *to_module;
   struct __gconv_step *result;
 
-  if (cache == NULL)
+  if (__gconv_cache == NULL)
     /* We have no cache available.  */
     return __GCONV_NODB;
 
-  header = (const struct gconvcache_header *) cache;
-  strtab = (char *) cache + header->string_offset;
-  modtab = (const struct module_entry *) ((char *) cache
+  header = (const struct gconvcache_header *) __gconv_cache;
+  strtab = (char *) __gconv_cache + header->string_offset;
+  modtab = (const struct module_entry *) ((char *) __gconv_cache
 					  + header->module_offset);
 
   if (find_module_idx (fromset, &fromidx) != 0
@@ -272,7 +273,7 @@ __gconv_lookup_cache (const char *toset, const char *fromset,
 
       /* Note the -1.  This is due to the offset added in iconvconfig.
 	 See there for more explanations.  */
-      extra = (const struct extra_entry *) ((char *) cache
+      extra = (const struct extra_entry *) ((char *) __gconv_cache
 					    + header->otherconv_offset
 					    + from_module->extra_offset - 1);
       while (extra->module_cnt != 0
@@ -429,7 +430,7 @@ void
 internal_function
 __gconv_release_cache (struct __gconv_step *steps, size_t nsteps)
 {
-  if (cache != NULL)
+  if (__gconv_cache != NULL)
     /* The only thing we have to deallocate is the record with the
        steps.  */
     free (steps);
@@ -441,10 +442,10 @@ static void __attribute__ ((unused))
 free_mem (void)
 {
   if (cache_malloced)
-    free (cache);
+    free (__gconv_cache);
 #ifdef _POSIX_MAPPED_FILES
   else
-    __munmap (cache, cache_size);
+    __munmap (__gconv_cache, cache_size);
 #endif
 }