aboutsummaryrefslogtreecommitdiff
path: root/src/interfaces/ecpg/lib/ecpglib.c
diff options
context:
space:
mode:
authorMichael Meskes <meskes@postgresql.org>1999-03-05 09:38:51 +0000
committerMichael Meskes <meskes@postgresql.org>1999-03-05 09:38:51 +0000
commit03842eb03bbded18a55177e40594018f05a73623 (patch)
tree05ed70e66d40ac6495f30edb4a10b6a6a47dceba /src/interfaces/ecpg/lib/ecpglib.c
parent9db6b7f3f7919895135e64cf52afcc1c7e264c09 (diff)
downloadpostgresql-03842eb03bbded18a55177e40594018f05a73623.tar.gz
postgresql-03842eb03bbded18a55177e40594018f05a73623.zip
*** empty log message ***
Diffstat (limited to 'src/interfaces/ecpg/lib/ecpglib.c')
-rw-r--r--src/interfaces/ecpg/lib/ecpglib.c34
1 files changed, 12 insertions, 22 deletions
diff --git a/src/interfaces/ecpg/lib/ecpglib.c b/src/interfaces/ecpg/lib/ecpglib.c
index 96da3b10e4e..e4e03919428 100644
--- a/src/interfaces/ecpg/lib/ecpglib.c
+++ b/src/interfaces/ecpg/lib/ecpglib.c
@@ -113,7 +113,7 @@ register_error(long code, char *fmt,...)
va_end(args);
sqlca.sqlerrm.sqlerrml = strlen(sqlca.sqlerrm.sqlerrmc);
- /* free all memory we allocate for the user */
+ /* free all memory we have allocated for the user */
for (am = auto_allocs; am;)
{
struct auto_mem *act = am;
@@ -178,7 +178,7 @@ ECPGfinish(struct connection * act)
static char *
ecpg_alloc(long size, int lineno)
{
- char *new = (char *) malloc(size);
+ char *new = (char *) calloc(1L, size);
if (!new)
{
@@ -344,7 +344,7 @@ create_statement(int lineno, struct connection *connection, struct statement **
var->varcharsize = va_arg(ap, long);
var->arrsize = va_arg(ap, long);
var->offset = va_arg(ap, long);
-
+
if (var->arrsize == 0 || var->varcharsize == 0)
var->value = *((void **)(var->pointer));
else
@@ -710,6 +710,8 @@ ECPGexecute(struct statement * stmt)
*/
if (var->arrsize == 0 || var->varcharsize == 0)
{
+ int len = 0;
+
switch(var->type)
{
case ECPGt_char:
@@ -720,38 +722,26 @@ ECPGexecute(struct statement * stmt)
/* check strlen for each tuple */
for (act_tuple = 0; act_tuple < ntuples; act_tuple++)
{
- int len = strlen(PQgetvalue(results, act_tuple, act_field));
+ int len = strlen(PQgetvalue(results, act_tuple, act_field)) + 1;
if (len > var->varcharsize)
var->varcharsize = len;
}
var->offset *= var->varcharsize;
- add_mem((void *)(var->value) = *((void **)(var->pointer)) = (void *) ecpg_alloc(var->offset * ntuples, stmt->lineno), stmt->lineno);
+ len = var->offset * ntuples;
}
break;
-#if 0
case ECPGt_varchar:
- if (((struct ECPGgeneric_varchar *)var->value)->arr == NULL)
- {
- var->varcharsize = 0;
- /* check strlen for each tuple */
- for (act_tuple = 0; act_tuple < ntuples; act_tuple++)
- {
- int len = strlen(PQgetvalue(results, act_tuple, act_field));
-
- if (len > var->varcharsize)
- var->varcharsize = len;
-
- ((struct ECPGgeneric_varchar *) ((long) var->value + var->offset * act_tuple))->arr = (char *) ecpg_alloc(len, stmt->lineno);
- }
- }
+ if (var->value == NULL)
+ len = ntuples * (var->varcharsize + sizeof (int));
break;
-#endif
default:
if (var->value == NULL)
- add_mem((void *)(var->value) = *((void **)(var->pointer)) = (void *) ecpg_alloc(var->offset * ntuples, stmt->lineno), stmt->lineno);
+ len = var->offset * ntuples;
break;
}
+
+ add_mem((void *)(var->value) = *((void **)(var->pointer)) = (void *) ecpg_alloc(len, stmt->lineno), stmt->lineno);
}
for (act_tuple = 0; act_tuple < ntuples && status; act_tuple++)