aboutsummaryrefslogtreecommitdiff
path: root/src/interfaces/ecpg/compatlib/informix.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/interfaces/ecpg/compatlib/informix.c')
-rw-r--r--src/interfaces/ecpg/compatlib/informix.c35
1 files changed, 26 insertions, 9 deletions
diff --git a/src/interfaces/ecpg/compatlib/informix.c b/src/interfaces/ecpg/compatlib/informix.c
index b56929441cc..3cd8977521b 100644
--- a/src/interfaces/ecpg/compatlib/informix.c
+++ b/src/interfaces/ecpg/compatlib/informix.c
@@ -209,13 +209,14 @@ deccvasc(char *cp, int len, decimal *np)
int
deccvdbl(double dbl, decimal *np)
{
- numeric *nres = PGTYPESnumeric_new();
+ numeric *nres;
int result = 1;
rsetnull(CDECIMALTYPE, (char *) np);
if (risnull(CDOUBLETYPE, (char *) &dbl))
return 0;
+ nres = PGTYPESnumeric_new();
if (nres == NULL)
return ECPG_INFORMIX_OUT_OF_MEMORY;
@@ -230,13 +231,14 @@ deccvdbl(double dbl, decimal *np)
int
deccvint(int in, decimal *np)
{
- numeric *nres = PGTYPESnumeric_new();
+ numeric *nres;
int result = 1;
rsetnull(CDECIMALTYPE, (char *) np);
if (risnull(CINTTYPE, (char *) &in))
return 0;
+ nres = PGTYPESnumeric_new();
if (nres == NULL)
return ECPG_INFORMIX_OUT_OF_MEMORY;
@@ -251,13 +253,14 @@ deccvint(int in, decimal *np)
int
deccvlong(long lng, decimal *np)
{
- numeric *nres = PGTYPESnumeric_new();
+ numeric *nres;
int result = 1;
rsetnull(CDECIMALTYPE, (char *) np);
if (risnull(CLONGTYPE, (char *) &lng))
return 0;
+ nres = PGTYPESnumeric_new();
if (nres == NULL)
return ECPG_INFORMIX_OUT_OF_MEMORY;
@@ -340,17 +343,21 @@ int
dectoasc(decimal *np, char *cp, int len, int right)
{
char *str;
- numeric *nres = PGTYPESnumeric_new();
-
- if (nres == NULL)
- return ECPG_INFORMIX_OUT_OF_MEMORY;
+ numeric *nres;
rsetnull(CSTRINGTYPE, (char *) cp);
if (risnull(CDECIMALTYPE, (char *) np))
return 0;
+ nres = PGTYPESnumeric_new();
+ if (nres == NULL)
+ return ECPG_INFORMIX_OUT_OF_MEMORY;
+
if (PGTYPESnumeric_from_decimal(np, nres) != 0)
+ {
+ PGTYPESnumeric_free(nres);
return ECPG_INFORMIX_OUT_OF_MEMORY;
+ }
if (right >= 0)
str = PGTYPESnumeric_to_asc(nres, right);
@@ -374,14 +381,17 @@ dectoasc(decimal *np, char *cp, int len, int right)
int
dectodbl(decimal *np, double *dblp)
{
- numeric *nres = PGTYPESnumeric_new();
int i;
+ numeric *nres = PGTYPESnumeric_new();
if (nres == NULL)
return ECPG_INFORMIX_OUT_OF_MEMORY;
if (PGTYPESnumeric_from_decimal(np, nres) != 0)
+ {
+ PGTYPESnumeric_free(nres);
return ECPG_INFORMIX_OUT_OF_MEMORY;
+ }
i = PGTYPESnumeric_to_double(nres, dblp);
PGTYPESnumeric_free(nres);
@@ -399,7 +409,10 @@ dectoint(decimal *np, int *ip)
return ECPG_INFORMIX_OUT_OF_MEMORY;
if (PGTYPESnumeric_from_decimal(np, nres) != 0)
+ {
+ PGTYPESnumeric_free(nres);
return ECPG_INFORMIX_OUT_OF_MEMORY;
+ }
ret = PGTYPESnumeric_to_int(nres, ip);
@@ -413,15 +426,19 @@ int
dectolong(decimal *np, long *lngp)
{
int ret;
- numeric *nres = PGTYPESnumeric_new();;
+ numeric *nres = PGTYPESnumeric_new();
if (nres == NULL)
return ECPG_INFORMIX_OUT_OF_MEMORY;
if (PGTYPESnumeric_from_decimal(np, nres) != 0)
+ {
+ PGTYPESnumeric_free(nres);
return ECPG_INFORMIX_OUT_OF_MEMORY;
+ }
ret = PGTYPESnumeric_to_long(nres, lngp);
+ PGTYPESnumeric_free(nres);
if (ret == PGTYPES_NUM_OVERFLOW)
ret = ECPG_INFORMIX_NUM_OVERFLOW;