Fix bug in storing variable-length field offsets

This commit is contained in:
whydoubt 2004-08-25 02:42:53 +00:00
parent 84f4d7b812
commit e33c909174
2 changed files with 12 additions and 5 deletions

View File

@ -2,6 +2,7 @@ Tue Aug 24 21:04:17 CDT 2004 Jeff Smith <whydoubt@yahoo.com>
* include/mdbsql.h:
* src/sql/mdbsql.c: Tidy up a few SQL-related functions
* src/libmdb/iconv.c: Tighten packing of strings into rows
* src/libmdb/write.c: Fix bug in storing variable-length field offsets
Sat Aug 21 21:21:56 CDT 2004 Jeff Smith <whydoubt@yahoo.com>
* src/libmdb/file.c: Clean up a bug in the new mdb_get_single/double

View File

@ -423,9 +423,11 @@ mdb_pack_row4(MdbTableDef *table, unsigned char *row_buffer, unsigned int num_fi
pos += 2;
/* Offsets of the variable-length columns */
for (i=num_fields; i>num_fields-var_cols; i--) {
row_buffer[pos++] = fields[i-1].offset & 0xff;
row_buffer[pos++] = (fields[i-1].offset >> 8) & 0xff;
for (i=num_fields; i>0; i--) {
if (!fields[i-1].is_fixed) {
row_buffer[pos++] = fields[i-1].offset & 0xff;
row_buffer[pos++] = (fields[i-1].offset >> 8) & 0xff;
}
}
/* Number of variable-length columns */
row_buffer[pos++] = var_cols & 0xff;
@ -468,10 +470,14 @@ mdb_pack_row3(MdbTableDef *table, unsigned char *row_buffer, unsigned int num_fi
row_buffer[pos] = pos;
pos++;
for (i=num_fields;i>num_fields-var_cols;i--) {
row_buffer[pos++] = fields[i-1].offset % 256;
for (i=num_fields; i>0; i--) {
if (!fields[i-1].is_fixed) {
row_buffer[pos++] = fields[i-1].offset & 0xff;
}
}
/* FIXME: jump table goes here */
row_buffer[pos++] = var_cols;
pos += mdb_pack_null_mask(&row_buffer[pos], num_fields, fields);