mirror of
https://github.com/mdbtools/mdbtools.git
synced 2025-09-20 02:57:55 +08:00
Patch from Michael Wood to do the right thing on data export when there are
deleted rows present. Put checks in mdb-dump for presence of a valid file.
This commit is contained in:
@@ -21,7 +21,14 @@ int main(int argc, char **argv)
|
|||||||
int pg=0;
|
int pg=0;
|
||||||
char addr[10];
|
char addr[10];
|
||||||
|
|
||||||
in = fopen(argv[1],"r");
|
if (argc < 2) {
|
||||||
|
fprintf(stderr, "Usage: mdb-dump <filename>\n\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
if ((in = fopen(argv[1],"r"))==NULL) {
|
||||||
|
fprintf(stderr, "Couldn't open file %s\n", argv[1]);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
while (length = fread(data,1,16,in)) {
|
while (length = fread(data,1,16,in)) {
|
||||||
sprintf(addr, "%06x", i);
|
sprintf(addr, "%06x", i);
|
||||||
if (!strcmp(&addr[3],"000") || ! strcmp(&addr[3],"800")) {
|
if (!strcmp(&addr[3],"000") || ! strcmp(&addr[3],"800")) {
|
||||||
|
@@ -33,14 +33,27 @@ MdbColumn *col;
|
|||||||
}
|
}
|
||||||
int mdb_find_end_of_row(MdbHandle *mdb, int row)
|
int mdb_find_end_of_row(MdbHandle *mdb, int row)
|
||||||
{
|
{
|
||||||
int rows, row_end;
|
int rows, row_start, row_end, i;
|
||||||
|
|
||||||
rows = mdb_get_int16(mdb,8);
|
rows = mdb_get_int16(mdb,8);
|
||||||
if (row==0)
|
if (row==0)
|
||||||
row_end = mdb->pg_size - 1; /* end of page */
|
row_end = mdb->pg_size - 1; /* end of page */
|
||||||
else
|
else {
|
||||||
row_end = mdb_get_int16(mdb, (10 + (row-1) * 2)) - 1;
|
row_end = mdb_get_int16(mdb, (10 + (row-1) * 2)) - 1;
|
||||||
|
|
||||||
|
for (i = row - 1; i > 0; i--) {
|
||||||
|
row_start = mdb_get_int16(mdb, (10 + i * 2));
|
||||||
|
if (!(row_start & 0x8000)) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (i == 0) {
|
||||||
|
row_end = mdb->pg_size - 1;
|
||||||
|
} else {
|
||||||
|
row_end = row_start - 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return row_end;
|
return row_end;
|
||||||
}
|
}
|
||||||
static int mdb_is_null(unsigned char *null_mask, int col_num)
|
static int mdb_is_null(unsigned char *null_mask, int col_num)
|
||||||
|
Reference in New Issue
Block a user