From: Stephen B. <sb...@us...> - 2009-09-30 15:29:08
|
Build Version : V2.5.0.25642 Firebird 2.5 Release Candidate 1 (writeBuildNum.sh,v 1.25809 2009/09/30 15:28:55 sboyd Exp $ ) Update of /cvsroot/firebird/firebird2/src/gpre In directory fdv4jf1.ch3.sourceforge.com:/tmp/cvs-serv29526 Modified Files: fbrmclib.cpp Log Message: Some more parameter conversion problems in the event intialization routines. Fixed a bug in the parameter pool cleanup routines. I was freeing the entire pool table rather than the individual pool items. Index: fbrmclib.cpp =================================================================== RCS file: /cvsroot/firebird/firebird2/src/gpre/fbrmclib.cpp,v retrieving revision 1.16 retrieving revision 1.17 diff -b -U3 -r1.16 -r1.17 --- fbrmclib.cpp 29 Sep 2009 18:43:56 -0000 1.16 +++ fbrmclib.cpp 30 Sep 2009 15:28:52 -0000 1.17 @@ -38,6 +38,7 @@ #include <time.h> #include <ctype.h> #include <math.h> +#include <crtdbg.h> #include "autoconfig.h" #include "fb_types.h" @@ -201,7 +202,7 @@ for (int i = 0; i < MAX_PARAMS; i++) { if (intPoolInitialized && intPool[i]) - free(intPool); + free(intPool[i]); intPool[i] = NULL; } intPoolInitialized = true; @@ -213,7 +214,7 @@ for (int i = 0; i < MAX_PARAMS; i++) { if (shortPoolInitialized && intPool[i]) - free(shortPool); + free(shortPool[i]); shortPool[i] = NULL; } shortPoolInitialized = true; @@ -250,7 +251,7 @@ { if (! intPool[i]) { - intPool[i] = (ISC_ULONG *)malloc(sizeof(int)); + intPool[i] = (ISC_ULONG *)malloc(sizeof(ISC_ULONG)); return (intPool[i]); } } @@ -265,7 +266,7 @@ { if (! shortPool[i]) { - shortPool[i] = (ISC_USHORT *)malloc(sizeof(short)); + shortPool[i] = (ISC_USHORT *)malloc(sizeof(ISC_USHORT)); return (shortPool[i]); } } @@ -1217,7 +1218,7 @@ ISC_USHORT retval = isc_event_block_a((char **)arg_vector[0].a_address, (char **)arg_vector[1].a_address, atoi((char *)CobolToString(&arg_vector[2])), - (char **)&arg_vector[2].a_address); + (char **)arg_vector[3].a_address); ShortToCobol(&arg_vector[-1], &retval); return (0); @@ -1256,7 +1257,16 @@ (short)*CobolToShort(&arg_vector[1]), (ISC_UCHAR *)*(char **)arg_vector[2].a_address, (ISC_UCHAR *)*(char **)arg_vector[3].a_address); - StatusToCobol(&arg_vector[0], stat); + // Convert the event counts to Cobol format. + ISC_UCHAR *counts = (ISC_UCHAR *)arg_vector[0].a_address; + ISC_UCHAR *cend = counts + arg_vector[0].a_length; + int i = 0; + while ((counts < cend) && (i < 15)) + { + CvtIntToCobol(counts, stat[i], sizeof(ISC_ULONG)); + counts += sizeof(ISC_ULONG); + i++; + } return (0); } |