From: Date: September 24 2007 3:07pm Subject: bk commit into 5.1 tree (istruewing:1.2610) BUG#26379 List-Archive: http://lists.mysql.com/commits/34520 X-Bug: 26379 Message-Id: Below is the list of changes that have just been committed into a local 5.1 repository of istruewing. When istruewing does a push these changes will be propagated to the main repository and, within 24 hours after the push, to the public repository. For information on how to access the public repository see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html ChangeSet@stripped, 2007-09-24 15:07:25+02:00, istruewing@stripped +1 -0 Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE corrupts a MERGE table Not to be pushed. Internal TEST only. Stupid "test" lines follow: The problem was missing dump layout I added dump layout No test case. layout is used during debugging only. dbug/dbug.c@stripped, 2007-09-24 15:07:19+02:00, istruewing@stripped +37 -7 Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE corrupts a MERGE table Added dump layout. diff -Nrup a/dbug/dbug.c b/dbug/dbug.c --- a/dbug/dbug.c 2007-08-02 06:49:24 +02:00 +++ b/dbug/dbug.c 2007-09-24 15:07:19 +02:00 @@ -1,5 +1,7 @@ /****************************************************************************** * * + +ingo blabla * N O T I C E * * * * Copyright Abandoned, 1987, Fred Fish * @@ -75,6 +77,7 @@ #include #include #include +#include /* for isprint() */ #if defined(MSDOS) || defined(__WIN__) #include #endif @@ -1130,8 +1133,7 @@ void _db_doprnt_(const char *format,...) DoPrefix(cs, cs->u_line); if (TRACING) Indent(cs, cs->level + 1); - else - (void) fprintf(cs->stack->out_file, "%s: ", cs->func); + (void) fprintf(cs->stack->out_file, "%s: ", cs->func); (void) fprintf(cs->stack->out_file, "%s: ", cs->u_keyword); (void) vfprintf(cs->stack->out_file, format, args); (void) fputc('\n',cs->stack->out_file); @@ -1164,6 +1166,10 @@ void _db_dump_(uint _line_, const char * const unsigned char *memory, size_t length) { int pos; + uint tmp; + ulong lgt= length; + const unsigned char *ptr= memory; + const unsigned char *start= memory; char dbuff[90]; CODE_STATE *cs=0; @@ -1187,19 +1193,43 @@ void _db_dump_(uint _line_, const char * keyword, (ulong) memory, (long) length); (void) fputs(dbuff,cs->stack->out_file); - pos=0; - while (length-- > 0) + (void) fprintf(cs->stack->out_file, "%04x ", (uint) (memory - start)); + pos= 6; + while (length) { - uint tmp= *((unsigned char*) memory++); - if ((pos+=3) >= 80) + if (pos >= 54) { + (void) fputc(' ', cs->stack->out_file); + (void) fputc('"', cs->stack->out_file); + while (lgt && (pos < 70)) + { + tmp= *(ptr++); + (void) fputc(isprint(tmp) ? tmp : '~', cs->stack->out_file); + pos++; + lgt--; + } + (void) fputc('"', cs->stack->out_file); fputc('\n',cs->stack->out_file); - pos=3; + (void) fprintf(cs->stack->out_file, "%04x ", (uint) (memory - start)); + pos=6; } + tmp= *(memory++); fputc(_dig_vec_upper[((tmp >> 4) & 15)], cs->stack->out_file); fputc(_dig_vec_upper[tmp & 15], cs->stack->out_file); fputc(' ',cs->stack->out_file); + pos+= 3; + length--; + } + while (pos++ < 55) + (void) fputc(' ', cs->stack->out_file); + (void) fputc('"', cs->stack->out_file); + while (lgt) + { + tmp= *(ptr++); + (void) fputc(isprint(tmp) ? tmp : '~', cs->stack->out_file); + lgt--; } + (void) fputc('"', cs->stack->out_file); (void) fputc('\n',cs->stack->out_file); dbug_flush(cs); }