about summary refs log tree commit diff
path: root/iconv/gconv_conf.c
diff options
context:
space:
mode:
Diffstat (limited to 'iconv/gconv_conf.c')
-rw-r--r--iconv/gconv_conf.c23
1 files changed, 10 insertions, 13 deletions
diff --git a/iconv/gconv_conf.c b/iconv/gconv_conf.c
index 57c832d6a9..a9b458130a 100644
--- a/iconv/gconv_conf.c
+++ b/iconv/gconv_conf.c
@@ -23,6 +23,7 @@
 #include <errno.h>
 #include <limits.h>
 #include <search.h>
+#include <stddef.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -38,7 +39,7 @@ static const char default_gconv_path[] = GCONV_PATH;
 
 /* The path elements, as determined by the __gconv_get_path function.
    All path elements end in a slash.  */
-const struct path_elem *__gconv_path_elem;
+struct path_elem *__gconv_path_elem;
 /* Maximum length of a single path element in __gconv_path_elem.  */
 size_t __gconv_max_path_elem_len;
 
@@ -283,7 +284,7 @@ add_module (char *rp, const char *directory, size_t dir_len, void **modules,
 
   /* See whether we must add the ending.  */
   need_ext = 0;
-  if (wp - module < sizeof (gconv_module_ext)
+  if (wp - module < (ptrdiff_t) sizeof (gconv_module_ext)
       || memcmp (wp - sizeof (gconv_module_ext), gconv_module_ext,
 		 sizeof (gconv_module_ext)) != 0)
     /* We must add the module extension.  */
@@ -304,23 +305,19 @@ add_module (char *rp, const char *directory, size_t dir_len, void **modules,
     {
       char *tmp;
 
-      new_module->from_string = memcpy ((char *) new_module
-					+ sizeof (struct gconv_module),
-					from, to - from);
+      new_module->from_string = tmp = (char *) (new_module + 1);
+      tmp = __mempcpy (tmp, from, to - from);
 
-      new_module->to_string = memcpy ((char *) new_module->from_string
-				      + (to - from), to, module - to);
+      new_module->to_string = tmp;
+      tmp = __mempcpy (tmp, to, module - to);
 
       new_module->cost_hi = cost_hi;
       new_module->cost_lo = modcounter;
 
-      new_module->module_name = (char *) new_module->to_string + (module - to);
+      new_module->module_name = tmp;
 
-      if (dir_len == 0)
-	tmp = (char *) new_module->module_name;
-      else
-	tmp = __mempcpy ((char *) new_module->module_name,
-			 directory, dir_len);
+      if (dir_len != 0)
+	tmp = __mempcpy (tmp, directory, dir_len);
 
       tmp = __mempcpy (tmp, module, wp - module);