From: darcy@druid.net (D'Arcy J.M. Cain)

Fix for libpgtcl:

I forgot to clear out the variable created and the memory used.
This commit is contained in:
Marc G. Fournier 1997-01-11 14:24:40 +00:00
parent 7f833f8826
commit 8738e47d03
1 changed files with 10 additions and 9 deletions

View File

@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/interfaces/libpgtcl/Attic/pgtclCmds.c,v 1.9 1997/01/03 18:48:30 scrappy Exp $ * $Header: /cvsroot/pgsql/src/interfaces/libpgtcl/Attic/pgtclCmds.c,v 1.10 1997/01/11 14:24:40 scrappy Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
@ -1129,9 +1129,9 @@ Pg_select(ClientData cData, Tcl_Interp *interp, int argc, char **argv)
int r; int r;
size_t tupno, column, ncols; size_t tupno, column, ncols;
Tcl_DString headers; Tcl_DString headers;
char buffer[2048];
struct { struct {
char *cname; char *cname;
char *data;
int change; int change;
} *info; } *info;
@ -1166,24 +1166,23 @@ Pg_select(ClientData cData, Tcl_Interp *interp, int argc, char **argv)
for (column = 0; column < ncols; column++) for (column = 0; column < ncols; column++)
{ {
info[column].cname = PQfname(result, column); info[column].cname = PQfname(result, column);
info[column].data = malloc(2000);
info[column].change = 0; info[column].change = 0;
Tcl_DStringAppendElement(&headers, info[column].cname); Tcl_DStringAppendElement(&headers, info[column].cname);
} }
Tcl_SetVar2(interp, argv[3], ".headers", Tcl_DStringValue(&headers), 0); Tcl_SetVar2(interp, argv[3], ".headers", Tcl_DStringValue(&headers), 0);
sprintf(info[0].data, "%d", ncols); sprintf(buffer, "%d", ncols);
Tcl_SetVar2(interp, argv[3], ".numcols", info[0].data, 0); Tcl_SetVar2(interp, argv[3], ".numcols", buffer, 0);
for (tupno = 0; tupno < PQntuples(result); tupno++) for (tupno = 0; tupno < PQntuples(result); tupno++)
{ {
sprintf(info[0].data, "%d", tupno); sprintf(buffer, "%d", tupno);
Tcl_SetVar2(interp, argv[3], ".tupno", info[0].data, 0); Tcl_SetVar2(interp, argv[3], ".tupno", buffer, 0);
for (column = 0; column < ncols; column++) for (column = 0; column < ncols; column++)
{ {
strcpy(info[column].data, PQgetvalue(result, tupno, column)); strcpy(buffer, PQgetvalue(result, tupno, column));
Tcl_SetVar2(interp, argv[3], info[column].cname, info[column].data, 0); Tcl_SetVar2(interp, argv[3], info[column].cname, buffer, 0);
} }
Tcl_SetVar2(interp, argv[3], ".command", "update", 0); Tcl_SetVar2(interp, argv[3], ".command", "update", 0);
@ -1206,6 +1205,8 @@ Pg_select(ClientData cData, Tcl_Interp *interp, int argc, char **argv)
} }
} }
free(info);
Tcl_UnsetVar(interp, argv[3], 0);
Tcl_AppendResult(interp, "", 0); Tcl_AppendResult(interp, "", 0);
return TCL_OK; return TCL_OK;
} }