Subject | Re: [ib-support] Current status of the bugs around isc4.gdb on fb1.0.2 |
---|---|
Author | Mark O'Donohue |
Post date | 2003-01-17T07:10:51Z |
Replying to my own post, sorry about that.
Basically I've found the problem, created a working version and a new
release should not be far away.
Cheers
Mark
For the keen:
It was one of the :
- sh = va_arg (ptr, USHORT);
to:
+ /* sh = va_arg (ptr, USHORT); */
+ sh = (USHORT) va_arg (ptr, int);
changes in jrd/misc.c
My guess is that the:
STUFF_SHORT (p, sh);
following after these commands may end up pushing the wrong byte, from
the int pair of bytes in one of the three cases it was changed.
----------
Index: interbase/jrd/misc.c
diff -u interbase/jrd/misc.c:1.1.1.1 interbase/jrd/misc.c:1.2
--- interbase/jrd/misc.c:1.1.1.1 Thu Aug 3 13:50:58 2000
+++ interbase/jrd/misc.c Tue Jul 2 11:32:39 2002
@@ -73,16 +73,19 @@
pop the arguments off the call stack and put
them into the passed buffer */
-while (arg_type = va_arg (ptr, SCHAR))
+/* while (arg_type = va_arg (ptr, SCHAR)) */
+while (arg_type = (SCHAR) va_arg (ptr, int))
switch (arg_type)
{
case dtype_byte: /* byte */
- ch = va_arg (ptr, SCHAR);
+ /* ch = va_arg (ptr, SCHAR); */
+ ch = (SCHAR) va_arg (ptr, int);
STUFF (p, ch);
break;
case dtype_short: /* short value */
- sh = va_arg (ptr, USHORT);
+ /* sh = va_arg (ptr, USHORT); */
+ sh = (USHORT) va_arg (ptr, int);
STUFF_SHORT (p, sh);
break;
@@ -97,7 +100,8 @@
break;
case dtype_varying: /* short value followed by a value with that many bytes */
- sh = va_arg (ptr, USHORT);
+ /* sh = va_arg (ptr, USHORT); */
+ sh = (USHORT) va_arg (ptr, int);
STUFF_SHORT (p, sh);
q = va_arg (ptr, UCHAR*);
STUFF_BYTES (p, q, sh);
Index: interbase/jrd/msgs.h
[Non-text portions of this message have been removed]
Basically I've found the problem, created a working version and a new
release should not be far away.
Cheers
Mark
For the keen:
It was one of the :
- sh = va_arg (ptr, USHORT);
to:
+ /* sh = va_arg (ptr, USHORT); */
+ sh = (USHORT) va_arg (ptr, int);
changes in jrd/misc.c
My guess is that the:
STUFF_SHORT (p, sh);
following after these commands may end up pushing the wrong byte, from
the int pair of bytes in one of the three cases it was changed.
----------
Index: interbase/jrd/misc.c
diff -u interbase/jrd/misc.c:1.1.1.1 interbase/jrd/misc.c:1.2
--- interbase/jrd/misc.c:1.1.1.1 Thu Aug 3 13:50:58 2000
+++ interbase/jrd/misc.c Tue Jul 2 11:32:39 2002
@@ -73,16 +73,19 @@
pop the arguments off the call stack and put
them into the passed buffer */
-while (arg_type = va_arg (ptr, SCHAR))
+/* while (arg_type = va_arg (ptr, SCHAR)) */
+while (arg_type = (SCHAR) va_arg (ptr, int))
switch (arg_type)
{
case dtype_byte: /* byte */
- ch = va_arg (ptr, SCHAR);
+ /* ch = va_arg (ptr, SCHAR); */
+ ch = (SCHAR) va_arg (ptr, int);
STUFF (p, ch);
break;
case dtype_short: /* short value */
- sh = va_arg (ptr, USHORT);
+ /* sh = va_arg (ptr, USHORT); */
+ sh = (USHORT) va_arg (ptr, int);
STUFF_SHORT (p, sh);
break;
@@ -97,7 +100,8 @@
break;
case dtype_varying: /* short value followed by a value with that many bytes */
- sh = va_arg (ptr, USHORT);
+ /* sh = va_arg (ptr, USHORT); */
+ sh = (USHORT) va_arg (ptr, int);
STUFF_SHORT (p, sh);
q = va_arg (ptr, UCHAR*);
STUFF_BYTES (p, q, sh);
Index: interbase/jrd/msgs.h
[Non-text portions of this message have been removed]