aboutsummaryrefslogtreecommitdiff
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);