projects
/
gnulib.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
striconveh: Don't malloc memory if the result buffer is sufficient.
[gnulib.git]
/
lib
/
striconveh.c
diff --git
a/lib/striconveh.c
b/lib/striconveh.c
index
e448a99
..
9467e4d
100644
(file)
--- a/
lib/striconveh.c
+++ b/
lib/striconveh.c
@@
-970,18
+970,27
@@
mem_cd_iconveh_internal (const char *src, size_t srclen,
if (result == tmpbuf)
{
size_t memsize = length + extra_alloc;
if (result == tmpbuf)
{
size_t memsize = length + extra_alloc;
- char *memory;
- memory = (char *) malloc (memsize > 0 ? memsize : 1);
- if (memory != NULL)
+ if (*resultp != NULL && *lengthp >= memsize)
{
{
-
memcpy (memory, tmpbuf, length)
;
-
result = memory
;
+
result = *resultp
;
+
memcpy (result, tmpbuf, length)
;
}
else
{
}
else
{
- errno = ENOMEM;
- return -1;
+ char *memory;
+
+ memory = (char *) malloc (memsize > 0 ? memsize : 1);
+ if (memory != NULL)
+ {
+ memcpy (memory, tmpbuf, length);
+ result = memory;
+ }
+ else
+ {
+ errno = ENOMEM;
+ return -1;
+ }
}
}
else if (result != *resultp && length + extra_alloc < allocated)
}
}
else if (result != *resultp && length + extra_alloc < allocated)