mirror of https://github.com/postgres/postgres
Revert ECPG's use of pnstrdup()
Commit 0b9466fce
added a dependency on fe_memutils' pnstrdup() inside
informix.c. This adds an exit() path in a library, which we don't
want. (Unlike libpq, the ecpg libraries don't have an automated check
for that, but it makes sense to keep them to a similar standard.) The
ecpg code can already handle failure results from the *strdup() call
by itself.
Author: Jacob Champion <jacob.champion@enterprisedb.com>
Discussion: https://www.postgresql.org/message-id/CAOYmi+=pg=W5L1h=3MEP_EB24jaBu2FyATrLXqQHGe7cpuvwyg@mail.gmail.com
This commit is contained in:
parent
de35207015
commit
2de129b356
|
@ -175,6 +175,25 @@ deccopy(decimal *src, decimal *target)
|
||||||
memcpy(target, src, sizeof(decimal));
|
memcpy(target, src, sizeof(decimal));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static char *
|
||||||
|
ecpg_strndup(const char *str, size_t len)
|
||||||
|
{
|
||||||
|
size_t real_len = strlen(str);
|
||||||
|
int use_len = (int) ((real_len > len) ? len : real_len);
|
||||||
|
|
||||||
|
char *new = malloc(use_len + 1);
|
||||||
|
|
||||||
|
if (new)
|
||||||
|
{
|
||||||
|
memcpy(new, str, use_len);
|
||||||
|
new[use_len] = '\0';
|
||||||
|
}
|
||||||
|
else
|
||||||
|
errno = ENOMEM;
|
||||||
|
|
||||||
|
return new;
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
deccvasc(const char *cp, int len, decimal *np)
|
deccvasc(const char *cp, int len, decimal *np)
|
||||||
{
|
{
|
||||||
|
@ -186,7 +205,7 @@ deccvasc(const char *cp, int len, decimal *np)
|
||||||
if (risnull(CSTRINGTYPE, cp))
|
if (risnull(CSTRINGTYPE, cp))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
str = pnstrdup(cp, len); /* decimal_in always converts the complete
|
str = ecpg_strndup(cp, len); /* decimal_in always converts the complete
|
||||||
* string */
|
* string */
|
||||||
if (!str)
|
if (!str)
|
||||||
ret = ECPG_INFORMIX_NUM_UNDERFLOW;
|
ret = ECPG_INFORMIX_NUM_UNDERFLOW;
|
||||||
|
|
Loading…
Reference in New Issue