mirror of
https://github.com/mdbtools/mdbtools.git
synced 2025-09-19 02:27:55 +08:00
Use more appropriate types (void *, size_t)
This commit is contained in:
@@ -1,3 +1,12 @@
|
|||||||
|
Mon Jun 27 23:52:15 CDT 2005 Jeff Smith <whydoubt@yahoo.com>
|
||||||
|
* include/mdbtools.h:
|
||||||
|
* src/gmdb2/debug.c:
|
||||||
|
* src/libmdb/data.c:
|
||||||
|
* src/libmdb/file.c:
|
||||||
|
* src/libmdb/write.c:
|
||||||
|
* src/util/prfreemap.c:
|
||||||
|
* src/util/prindex.c: Use more appropriate types (void *, size_t)
|
||||||
|
|
||||||
Thu Jun 23 00:40:32 CDT 2005 Jeff Smith <whydoubt@yahoo.com>
|
Thu Jun 23 00:40:32 CDT 2005 Jeff Smith <whydoubt@yahoo.com>
|
||||||
* src/libmdb/write.c: Use col->is_fixed member directly
|
* src/libmdb/write.c: Use col->is_fixed member directly
|
||||||
* doc/reference/libmdb/libmdb-sections.txt:
|
* doc/reference/libmdb/libmdb-sections.txt:
|
||||||
|
@@ -337,11 +337,11 @@ typedef struct {
|
|||||||
int noskip_del; /* don't skip deleted rows */
|
int noskip_del; /* don't skip deleted rows */
|
||||||
/* object allocation map */
|
/* object allocation map */
|
||||||
guint32 map_base_pg;
|
guint32 map_base_pg;
|
||||||
unsigned int map_sz;
|
size_t map_sz;
|
||||||
unsigned char *usage_map;
|
unsigned char *usage_map;
|
||||||
/* pages with free space left */
|
/* pages with free space left */
|
||||||
guint32 freemap_base_pg;
|
guint32 freemap_base_pg;
|
||||||
unsigned int freemap_sz;
|
size_t freemap_sz;
|
||||||
unsigned char *free_usage_map;
|
unsigned char *free_usage_map;
|
||||||
/* query planner */
|
/* query planner */
|
||||||
MdbSargNode *sarg_tree;
|
MdbSargNode *sarg_tree;
|
||||||
@@ -441,13 +441,13 @@ extern int mdb_rewind_table(MdbTableDef *table);
|
|||||||
extern int mdb_fetch_row(MdbTableDef *table);
|
extern int mdb_fetch_row(MdbTableDef *table);
|
||||||
extern int mdb_is_fixed_col(MdbColumn *col);
|
extern int mdb_is_fixed_col(MdbColumn *col);
|
||||||
extern char *mdb_col_to_string(MdbHandle *mdb, void *buf, int start, int datatype, int size);
|
extern char *mdb_col_to_string(MdbHandle *mdb, void *buf, int start, int datatype, int size);
|
||||||
extern int mdb_find_pg_row(MdbHandle *mdb, int pg_row, void **buf, int *off, int *len);
|
extern int mdb_find_pg_row(MdbHandle *mdb, int pg_row, void **buf, int *off, size_t *len);
|
||||||
extern int mdb_find_row(MdbHandle *mdb, int row, int *start, int *len);
|
extern int mdb_find_row(MdbHandle *mdb, int row, int *start, size_t *len);
|
||||||
extern int mdb_find_end_of_row(MdbHandle *mdb, int row);
|
extern int mdb_find_end_of_row(MdbHandle *mdb, int row);
|
||||||
extern int mdb_col_fixed_size(MdbColumn *col);
|
extern int mdb_col_fixed_size(MdbColumn *col);
|
||||||
extern int mdb_col_disp_size(MdbColumn *col);
|
extern int mdb_col_disp_size(MdbColumn *col);
|
||||||
extern int mdb_ole_read_next(MdbHandle *mdb, MdbColumn *col, void *ole_ptr);
|
extern size_t mdb_ole_read_next(MdbHandle *mdb, MdbColumn *col, void *ole_ptr);
|
||||||
extern int mdb_ole_read(MdbHandle *mdb, MdbColumn *col, void *ole_ptr, int chunk_size);
|
extern size_t mdb_ole_read(MdbHandle *mdb, MdbColumn *col, void *ole_ptr, int chunk_size);
|
||||||
extern void mdb_set_date_fmt(const char *);
|
extern void mdb_set_date_fmt(const char *);
|
||||||
extern int mdb_read_row(MdbTableDef *table, unsigned int row);
|
extern int mdb_read_row(MdbTableDef *table, unsigned int row);
|
||||||
|
|
||||||
@@ -502,10 +502,10 @@ extern int mdb_crack_row(MdbTableDef *table, int row_start, int row_end, MdbFiel
|
|||||||
extern guint16 mdb_add_row_to_pg(MdbTableDef *table, unsigned char *row_buffer, int new_row_size);
|
extern guint16 mdb_add_row_to_pg(MdbTableDef *table, unsigned char *row_buffer, int new_row_size);
|
||||||
extern int mdb_update_index(MdbTableDef *table, MdbIndex *idx, unsigned int num_fields, MdbField *fields, guint32 pgnum, guint16 rownum);
|
extern int mdb_update_index(MdbTableDef *table, MdbIndex *idx, unsigned int num_fields, MdbField *fields, guint32 pgnum, guint16 rownum);
|
||||||
extern int mdb_pack_row(MdbTableDef *table, unsigned char *row_buffer, unsigned int num_fields, MdbField *fields);
|
extern int mdb_pack_row(MdbTableDef *table, unsigned char *row_buffer, unsigned int num_fields, MdbField *fields);
|
||||||
extern int mdb_replace_row(MdbTableDef *table, int row, unsigned char *new_row, int new_row_size);
|
extern int mdb_replace_row(MdbTableDef *table, int row, void *new_row, int new_row_size);
|
||||||
extern int mdb_pg_get_freespace(MdbHandle *mdb);
|
extern int mdb_pg_get_freespace(MdbHandle *mdb);
|
||||||
extern int mdb_update_row(MdbTableDef *table);
|
extern int mdb_update_row(MdbTableDef *table);
|
||||||
extern unsigned char *mdb_new_data_pg(MdbCatalogEntry *entry);
|
extern void *mdb_new_data_pg(MdbCatalogEntry *entry);
|
||||||
|
|
||||||
/* map.c */
|
/* map.c */
|
||||||
extern guint32 mdb_map_find_next_freepage(MdbTableDef *table, int row_size);
|
extern guint32 mdb_map_find_next_freepage(MdbTableDef *table, int row_size);
|
||||||
|
@@ -42,8 +42,8 @@ static void gmdb_debug_text_off(GtkWidget *textbox);
|
|||||||
static GtkTreeIter *gmdb_debug_add_item(GtkTreeStore *store, GtkTreeIter *iter, gchar *text, int start, int len);
|
static GtkTreeIter *gmdb_debug_add_item(GtkTreeStore *store, GtkTreeIter *iter, gchar *text, int start, int len);
|
||||||
static void gmdb_debug_clear(GladeXML *xml);
|
static void gmdb_debug_clear(GladeXML *xml);
|
||||||
static void gmdb_debug_dissect(GtkTreeStore *store, char *fbuf, int offset, int len);
|
static void gmdb_debug_dissect(GtkTreeStore *store, char *fbuf, int offset, int len);
|
||||||
static guint16 get_uint16(unsigned char *c);
|
static guint16 get_uint16(void *c);
|
||||||
static guint32 get_uint32(unsigned char *c);
|
static guint32 get_uint32(void *c);
|
||||||
static long gmdb_get_max_page(MdbHandle *mdb);
|
static long gmdb_get_max_page(MdbHandle *mdb);
|
||||||
static void gmdb_debug_display(GladeXML *xml, guint32 page);
|
static void gmdb_debug_display(GladeXML *xml, guint32 page);
|
||||||
static void gmdb_debug_jump(GladeXML *xml, int msb);
|
static void gmdb_debug_jump(GladeXML *xml, int msb);
|
||||||
@@ -412,14 +412,14 @@ int i = 0;
|
|||||||
return "unknown";
|
return "unknown";
|
||||||
}
|
}
|
||||||
static guint16
|
static guint16
|
||||||
get_uint16(unsigned char *c)
|
get_uint16(void *c)
|
||||||
{
|
{
|
||||||
guint16 i;
|
guint16 i;
|
||||||
memcpy(&i, c, 2);
|
memcpy(&i, c, 2);
|
||||||
return GINT16_FROM_LE(i);
|
return GINT16_FROM_LE(i);
|
||||||
}
|
}
|
||||||
static guint32
|
static guint32
|
||||||
get_uint32(unsigned char *c)
|
get_uint32(void *c)
|
||||||
{
|
{
|
||||||
guint32 l;
|
guint32 l;
|
||||||
memcpy(&l, c, 4);
|
memcpy(&l, c, 4);
|
||||||
|
@@ -32,7 +32,9 @@ static int _mdb_attempt_bind(MdbHandle *mdb,
|
|||||||
MdbColumn *col, unsigned char isnull, int offset, int len);
|
MdbColumn *col, unsigned char isnull, int offset, int len);
|
||||||
static char *mdb_num_to_string(MdbHandle *mdb, int start, int datatype, int prec, int scale);
|
static char *mdb_num_to_string(MdbHandle *mdb, int start, int datatype, int prec, int scale);
|
||||||
static char *mdb_date_to_string(MdbHandle *mdb, int start);
|
static char *mdb_date_to_string(MdbHandle *mdb, int start);
|
||||||
int mdb_copy_ole(MdbHandle *mdb, char *dest, int start, int size);
|
#ifdef MDB_COPY_OLE
|
||||||
|
static size_t mdb_copy_ole(MdbHandle *mdb, char *dest, int start, int size);
|
||||||
|
#endif
|
||||||
|
|
||||||
static char date_fmt[64] = "%x %X";
|
static char date_fmt[64] = "%x %X";
|
||||||
|
|
||||||
@@ -88,7 +90,7 @@ mdb_bind_column_by_name(MdbTableDef *table, gchar *col_name, void *bind_ptr, int
|
|||||||
*
|
*
|
||||||
* Returns: 0 on success. 1 on failure.
|
* Returns: 0 on success. 1 on failure.
|
||||||
*/
|
*/
|
||||||
int mdb_find_pg_row(MdbHandle *mdb, int pg_row, void **buf, int *off, int *len)
|
int mdb_find_pg_row(MdbHandle *mdb, int pg_row, void **buf, int *off, size_t *len)
|
||||||
{
|
{
|
||||||
unsigned int pg = pg_row >> 8;
|
unsigned int pg = pg_row >> 8;
|
||||||
unsigned int row = pg_row & 0xff;
|
unsigned int row = pg_row & 0xff;
|
||||||
@@ -102,7 +104,7 @@ int mdb_find_pg_row(MdbHandle *mdb, int pg_row, void **buf, int *off, int *len)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int mdb_find_row(MdbHandle *mdb, int row, int *start, int *len)
|
int mdb_find_row(MdbHandle *mdb, int row, int *start, size_t *len)
|
||||||
{
|
{
|
||||||
int rco = mdb->fmt->row_count_offset;
|
int rco = mdb->fmt->row_count_offset;
|
||||||
int next_start;
|
int next_start;
|
||||||
@@ -183,7 +185,9 @@ static int mdb_xfer_bound_ole(MdbHandle *mdb, int start, MdbColumn *col, int len
|
|||||||
col->cur_value_len = 0;
|
col->cur_value_len = 0;
|
||||||
}
|
}
|
||||||
if (col->bind_ptr || col->len_ptr) {
|
if (col->bind_ptr || col->len_ptr) {
|
||||||
//ret = mdb_copy_ole(mdb, col->bind_ptr, start, len);
|
#ifdef MDB_COPY_OLE
|
||||||
|
ret = mdb_copy_ole(mdb, col->bind_ptr, start, len);
|
||||||
|
#endif
|
||||||
memcpy(col->bind_ptr, &mdb->pg_buf[start], MDB_MEMO_OVERHEAD);
|
memcpy(col->bind_ptr, &mdb->pg_buf[start], MDB_MEMO_OVERHEAD);
|
||||||
}
|
}
|
||||||
if (col->len_ptr) {
|
if (col->len_ptr) {
|
||||||
@@ -235,7 +239,8 @@ int mdb_read_row(MdbTableDef *table, unsigned int row)
|
|||||||
MdbColumn *col;
|
MdbColumn *col;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
int rc;
|
int rc;
|
||||||
int row_start, row_size;
|
int row_start;
|
||||||
|
size_t row_size;
|
||||||
int delflag, lookupflag;
|
int delflag, lookupflag;
|
||||||
MdbField fields[256];
|
MdbField fields[256];
|
||||||
int num_fields;
|
int num_fields;
|
||||||
@@ -437,13 +442,13 @@ int i;
|
|||||||
return text;
|
return text;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
int
|
size_t
|
||||||
mdb_ole_read_next(MdbHandle *mdb, MdbColumn *col, void *ole_ptr)
|
mdb_ole_read_next(MdbHandle *mdb, MdbColumn *col, void *ole_ptr)
|
||||||
{
|
{
|
||||||
guint32 ole_len;
|
guint32 ole_len;
|
||||||
void *buf;
|
void *buf;
|
||||||
int row_start;
|
int row_start;
|
||||||
int len;
|
size_t len;
|
||||||
|
|
||||||
ole_len = mdb_get_int32(ole_ptr, 0);
|
ole_len = mdb_get_int32(ole_ptr, 0);
|
||||||
|
|
||||||
@@ -464,13 +469,13 @@ mdb_ole_read_next(MdbHandle *mdb, MdbColumn *col, void *ole_ptr)
|
|||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
int
|
size_t
|
||||||
mdb_ole_read(MdbHandle *mdb, MdbColumn *col, void *ole_ptr, int chunk_size)
|
mdb_ole_read(MdbHandle *mdb, MdbColumn *col, void *ole_ptr, int chunk_size)
|
||||||
{
|
{
|
||||||
guint32 ole_len;
|
guint32 ole_len;
|
||||||
void *buf;
|
void *buf;
|
||||||
int row_start;
|
int row_start;
|
||||||
int len;
|
size_t len;
|
||||||
|
|
||||||
ole_len = mdb_get_int32(ole_ptr, 0);
|
ole_len = mdb_get_int32(ole_ptr, 0);
|
||||||
mdb_debug(MDB_DEBUG_OLE,"ole len = %d ole flags = %02x",
|
mdb_debug(MDB_DEBUG_OLE,"ole len = %d ole flags = %02x",
|
||||||
@@ -526,11 +531,12 @@ mdb_ole_read(MdbHandle *mdb, MdbColumn *col, void *ole_ptr, int chunk_size)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
int mdb_copy_ole(MdbHandle *mdb, char *dest, int start, int size)
|
#ifdef MDB_COPY_OLE
|
||||||
|
static size_t mdb_copy_ole(MdbHandle *mdb, char *dest, int start, int size)
|
||||||
{
|
{
|
||||||
guint32 ole_len;
|
guint32 ole_len;
|
||||||
gint32 row_start, pg_row;
|
gint32 row_start, pg_row;
|
||||||
gint32 len;
|
size_t len;
|
||||||
void *buf, *pg_buf = mdb->pg_buf;
|
void *buf, *pg_buf = mdb->pg_buf;
|
||||||
|
|
||||||
if (size<MDB_MEMO_OVERHEAD) {
|
if (size<MDB_MEMO_OVERHEAD) {
|
||||||
@@ -589,11 +595,12 @@ int mdb_copy_ole(MdbHandle *mdb, char *dest, int start, int size)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
static char *mdb_memo_to_string(MdbHandle *mdb, int start, int size)
|
static char *mdb_memo_to_string(MdbHandle *mdb, int start, int size)
|
||||||
{
|
{
|
||||||
guint32 memo_len;
|
guint32 memo_len;
|
||||||
gint32 row_start, pg_row;
|
gint32 row_start, pg_row;
|
||||||
gint32 len;
|
size_t len;
|
||||||
void *buf, *pg_buf = mdb->pg_buf;
|
void *buf, *pg_buf = mdb->pg_buf;
|
||||||
char *text = (char *) g_malloc(MDB_BIND_SIZE);
|
char *text = (char *) g_malloc(MDB_BIND_SIZE);
|
||||||
|
|
||||||
@@ -803,6 +810,7 @@ char *mdb_col_to_string(MdbHandle *mdb, void *buf, int start, int datatype, int
|
|||||||
char *text;
|
char *text;
|
||||||
float tf;
|
float tf;
|
||||||
double td;
|
double td;
|
||||||
|
void *pg_buf = mdb->pg_buf;
|
||||||
|
|
||||||
switch (datatype) {
|
switch (datatype) {
|
||||||
case MDB_BOOL:
|
case MDB_BOOL:
|
||||||
@@ -821,13 +829,13 @@ char *mdb_col_to_string(MdbHandle *mdb, void *buf, int start, int datatype, int
|
|||||||
mdb_get_int32(buf, start));
|
mdb_get_int32(buf, start));
|
||||||
break;
|
break;
|
||||||
case MDB_FLOAT:
|
case MDB_FLOAT:
|
||||||
tf = mdb_get_single(mdb->pg_buf, start);
|
tf = mdb_get_single(pg_buf, start);
|
||||||
text = g_strdup_printf("%.*f",
|
text = g_strdup_printf("%.*f",
|
||||||
FLT_DIG - floor_log10(tf,1) - 1, tf);
|
FLT_DIG - floor_log10(tf,1) - 1, tf);
|
||||||
trim_trailing_zeros(text);
|
trim_trailing_zeros(text);
|
||||||
break;
|
break;
|
||||||
case MDB_DOUBLE:
|
case MDB_DOUBLE:
|
||||||
td = mdb_get_double(mdb->pg_buf, start);
|
td = mdb_get_double(pg_buf, start);
|
||||||
text = g_strdup_printf("%.*f",
|
text = g_strdup_printf("%.*f",
|
||||||
DBL_DIG - floor_log10(td,0) - 1, td);
|
DBL_DIG - floor_log10(td,0) - 1, td);
|
||||||
trim_trailing_zeros(text);
|
trim_trailing_zeros(text);
|
||||||
@@ -837,7 +845,7 @@ char *mdb_col_to_string(MdbHandle *mdb, void *buf, int start, int datatype, int
|
|||||||
text = g_strdup("");
|
text = g_strdup("");
|
||||||
} else {
|
} else {
|
||||||
text = (char *) g_malloc(MDB_BIND_SIZE);
|
text = (char *) g_malloc(MDB_BIND_SIZE);
|
||||||
mdb_unicode2ascii(mdb, mdb->pg_buf + start,
|
mdb_unicode2ascii(mdb, pg_buf + start,
|
||||||
size, text, MDB_BIND_SIZE);
|
size, text, MDB_BIND_SIZE);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@@ -52,7 +52,7 @@ MdbFormatConstants MdbJet3Constants = {
|
|||||||
2048, 0x08, 12, 25, 27, 31, 35, 36, 43, 8, 13, 16, 1, 18, 39, 3, 14, 5
|
2048, 0x08, 12, 25, 27, 31, 35, 36, 43, 8, 13, 16, 1, 18, 39, 3, 14, 5
|
||||||
};
|
};
|
||||||
|
|
||||||
static ssize_t _mdb_read_pg(MdbHandle *mdb, unsigned char *pg_buf, unsigned long pg);
|
static ssize_t _mdb_read_pg(MdbHandle *mdb, void *pg_buf, unsigned long pg);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* mdb_find_file:
|
* mdb_find_file:
|
||||||
@@ -65,7 +65,7 @@ static ssize_t _mdb_read_pg(MdbHandle *mdb, unsigned char *pg_buf, unsigned long
|
|||||||
* freeing.
|
* freeing.
|
||||||
**/
|
**/
|
||||||
|
|
||||||
static gchar *mdb_find_file(const char *file_name)
|
static char *mdb_find_file(const char *file_name)
|
||||||
{
|
{
|
||||||
struct stat status;
|
struct stat status;
|
||||||
gchar *mdbpath, **dir, *tmpfname;
|
gchar *mdbpath, **dir, *tmpfname;
|
||||||
@@ -121,7 +121,7 @@ MdbHandle *mdb_open(const char *filename, MdbFileFlags flags)
|
|||||||
mdb->f = (MdbFile *) g_malloc0(sizeof(MdbFile));
|
mdb->f = (MdbFile *) g_malloc0(sizeof(MdbFile));
|
||||||
mdb->f->refs = 1;
|
mdb->f->refs = 1;
|
||||||
mdb->f->fd = -1;
|
mdb->f->fd = -1;
|
||||||
mdb->f->filename = (char *) mdb_find_file(filename);
|
mdb->f->filename = mdb_find_file(filename);
|
||||||
if (!mdb->f->filename) {
|
if (!mdb->f->filename) {
|
||||||
fprintf(stderr, "Can't alloc filename\n");
|
fprintf(stderr, "Can't alloc filename\n");
|
||||||
mdb_close(mdb);
|
mdb_close(mdb);
|
||||||
@@ -253,7 +253,7 @@ ssize_t mdb_read_alt_pg(MdbHandle *mdb, unsigned long pg)
|
|||||||
len = _mdb_read_pg(mdb, mdb->alt_pg_buf, pg);
|
len = _mdb_read_pg(mdb, mdb->alt_pg_buf, pg);
|
||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
static ssize_t _mdb_read_pg(MdbHandle *mdb, unsigned char *pg_buf, unsigned long pg)
|
static ssize_t _mdb_read_pg(MdbHandle *mdb, void *pg_buf, unsigned long pg)
|
||||||
{
|
{
|
||||||
ssize_t len;
|
ssize_t len;
|
||||||
struct stat status;
|
struct stat status;
|
||||||
@@ -289,7 +289,6 @@ char tmpbuf[MDB_PGSIZE];
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* really stupid, just here for consistancy */
|
|
||||||
unsigned char mdb_get_byte(void *buf, int offset)
|
unsigned char mdb_get_byte(void *buf, int offset)
|
||||||
{
|
{
|
||||||
return ((unsigned char *)(buf))[offset];
|
return ((unsigned char *)(buf))[offset];
|
||||||
|
@@ -30,19 +30,19 @@
|
|||||||
static int mdb_add_row_to_leaf_pg(MdbTableDef *table, MdbIndex *idx, MdbIndexPage *ipg, MdbField *idx_fields, guint32 pgnum, guint16 rownum);
|
static int mdb_add_row_to_leaf_pg(MdbTableDef *table, MdbIndex *idx, MdbIndexPage *ipg, MdbField *idx_fields, guint32 pgnum, guint16 rownum);
|
||||||
|
|
||||||
void
|
void
|
||||||
_mdb_put_int16(unsigned char *buf, guint32 offset, guint32 value)
|
_mdb_put_int16(void *buf, guint32 offset, guint32 value)
|
||||||
{
|
{
|
||||||
value = GINT32_TO_LE(value);
|
value = GINT32_TO_LE(value);
|
||||||
memcpy(buf + offset, &value, 2);
|
memcpy(buf + offset, &value, 2);
|
||||||
}
|
}
|
||||||
void
|
void
|
||||||
_mdb_put_int32(unsigned char *buf, guint32 offset, guint32 value)
|
_mdb_put_int32(void *buf, guint32 offset, guint32 value)
|
||||||
{
|
{
|
||||||
value = GINT32_TO_LE(value);
|
value = GINT32_TO_LE(value);
|
||||||
memcpy(buf + offset, &value, 4);
|
memcpy(buf + offset, &value, 4);
|
||||||
}
|
}
|
||||||
void
|
void
|
||||||
_mdb_put_int32_msb(unsigned char *buf, guint32 offset, guint32 value)
|
_mdb_put_int32_msb(void *buf, guint32 offset, guint32 value)
|
||||||
{
|
{
|
||||||
value = GINT32_TO_BE(value);
|
value = GINT32_TO_BE(value);
|
||||||
memcpy(buf + offset, &value, 4);
|
memcpy(buf + offset, &value, 4);
|
||||||
@@ -148,7 +148,7 @@ mdb_crack_row(MdbTableDef *table, int row_start, int row_end, MdbField *fields)
|
|||||||
MdbColumn *col;
|
MdbColumn *col;
|
||||||
MdbCatalogEntry *entry = table->entry;
|
MdbCatalogEntry *entry = table->entry;
|
||||||
MdbHandle *mdb = entry->mdb;
|
MdbHandle *mdb = entry->mdb;
|
||||||
unsigned char *pg_buf = mdb->pg_buf;
|
void *pg_buf = mdb->pg_buf;
|
||||||
unsigned int row_var_cols=0, row_cols;
|
unsigned int row_var_cols=0, row_cols;
|
||||||
unsigned char *nullmask;
|
unsigned char *nullmask;
|
||||||
unsigned int bitmask_sz;
|
unsigned int bitmask_sz;
|
||||||
@@ -162,20 +162,20 @@ mdb_crack_row(MdbTableDef *table, int row_start, int row_end, MdbField *fields)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (IS_JET4(mdb)) {
|
if (IS_JET4(mdb)) {
|
||||||
row_cols = mdb_get_int16(mdb->pg_buf, row_start);
|
row_cols = mdb_get_int16(pg_buf, row_start);
|
||||||
col_count_size = 2;
|
col_count_size = 2;
|
||||||
} else {
|
} else {
|
||||||
row_cols = pg_buf[row_start];
|
row_cols = mdb_get_byte(pg_buf, row_start);
|
||||||
col_count_size = 1;
|
col_count_size = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
bitmask_sz = (row_cols + 7) / 8;
|
bitmask_sz = (row_cols + 7) / 8;
|
||||||
nullmask = &pg_buf[row_end - bitmask_sz + 1];
|
nullmask = pg_buf + row_end - bitmask_sz + 1;
|
||||||
|
|
||||||
/* read table of variable column locations */
|
/* read table of variable column locations */
|
||||||
row_var_cols = IS_JET4(mdb) ?
|
row_var_cols = IS_JET4(mdb) ?
|
||||||
mdb_get_int16(mdb->pg_buf, row_end - bitmask_sz - 1) :
|
mdb_get_int16(pg_buf, row_end - bitmask_sz - 1) :
|
||||||
pg_buf[row_end - bitmask_sz];
|
mdb_get_byte(pg_buf, row_end - bitmask_sz);
|
||||||
var_col_offsets = (unsigned int *)g_malloc((row_var_cols+1)*sizeof(int));
|
var_col_offsets = (unsigned int *)g_malloc((row_var_cols+1)*sizeof(int));
|
||||||
if (table->num_var_cols > 0) {
|
if (table->num_var_cols > 0) {
|
||||||
if (IS_JET4(mdb)) {
|
if (IS_JET4(mdb)) {
|
||||||
@@ -211,7 +211,7 @@ mdb_crack_row(MdbTableDef *table, int row_start, int row_end, MdbField *fields)
|
|||||||
&& (fixed_cols_found < row_fixed_cols)) {
|
&& (fixed_cols_found < row_fixed_cols)) {
|
||||||
col_start = col->fixed_offset + col_count_size;
|
col_start = col->fixed_offset + col_count_size;
|
||||||
fields[i].start = row_start + col_start;
|
fields[i].start = row_start + col_start;
|
||||||
fields[i].value = &pg_buf[row_start + col_start];
|
fields[i].value = pg_buf + row_start + col_start;
|
||||||
fields[i].siz = col->col_size;
|
fields[i].siz = col->col_size;
|
||||||
fixed_cols_found++;
|
fixed_cols_found++;
|
||||||
/* Use col->var_col_num because a deleted column is still
|
/* Use col->var_col_num because a deleted column is still
|
||||||
@@ -220,7 +220,7 @@ mdb_crack_row(MdbTableDef *table, int row_start, int row_end, MdbField *fields)
|
|||||||
&& (col->var_col_num < row_var_cols)) {
|
&& (col->var_col_num < row_var_cols)) {
|
||||||
col_start = var_col_offsets[col->var_col_num];
|
col_start = var_col_offsets[col->var_col_num];
|
||||||
fields[i].start = row_start + col_start;
|
fields[i].start = row_start + col_start;
|
||||||
fields[i].value = &pg_buf[row_start + col_start];
|
fields[i].value = pg_buf + row_start + col_start;
|
||||||
fields[i].siz = var_col_offsets[(col->var_col_num)+1] -
|
fields[i].siz = var_col_offsets[(col->var_col_num)+1] -
|
||||||
col_start;
|
col_start;
|
||||||
} else {
|
} else {
|
||||||
@@ -356,7 +356,7 @@ mdb_pack_row3(MdbTableDef *table, unsigned char *row_buffer, unsigned int num_fi
|
|||||||
}
|
}
|
||||||
|
|
||||||
offset_high = (unsigned char *) g_malloc(var_cols+1);
|
offset_high = (unsigned char *) g_malloc(var_cols+1);
|
||||||
offset_high[0] = (pos << 8) & 0xff;
|
offset_high[0] = (pos >> 8) & 0xff;
|
||||||
j = 1;
|
j = 1;
|
||||||
|
|
||||||
/* EOD */
|
/* EOD */
|
||||||
@@ -367,7 +367,7 @@ mdb_pack_row3(MdbTableDef *table, unsigned char *row_buffer, unsigned int num_fi
|
|||||||
for (i=num_fields; i>0; i--) {
|
for (i=num_fields; i>0; i--) {
|
||||||
if (!fields[i-1].is_fixed) {
|
if (!fields[i-1].is_fixed) {
|
||||||
row_buffer[pos++] = fields[i-1].offset & 0xff;
|
row_buffer[pos++] = fields[i-1].offset & 0xff;
|
||||||
offset_high[j++] = (fields[i-1].offset << 8) & 0xff;
|
offset_high[j++] = (fields[i-1].offset >> 8) & 0xff;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -422,30 +422,24 @@ mdb_pg_get_freespace(MdbHandle *mdb)
|
|||||||
mdb_debug(MDB_DEBUG_WRITE,"free space left on page = %d", free_end - free_start);
|
mdb_debug(MDB_DEBUG_WRITE,"free space left on page = %d", free_end - free_start);
|
||||||
return (free_end - free_start);
|
return (free_end - free_start);
|
||||||
}
|
}
|
||||||
unsigned char *
|
void *
|
||||||
mdb_new_leaf_pg(MdbCatalogEntry *entry)
|
mdb_new_leaf_pg(MdbCatalogEntry *entry)
|
||||||
{
|
{
|
||||||
MdbHandle *mdb = entry->mdb;
|
MdbHandle *mdb = entry->mdb;
|
||||||
unsigned char *new_pg;
|
void *new_pg = g_malloc0(mdb->fmt->pg_size);
|
||||||
|
|
||||||
new_pg = (unsigned char *) g_malloc0(mdb->fmt->pg_size);
|
_mdb_put_int16(new_pg, 2, 0x0104);
|
||||||
|
|
||||||
new_pg[0]=0x04;
|
|
||||||
new_pg[1]=0x01;
|
|
||||||
_mdb_put_int32(new_pg, 4, entry->table_pg);
|
_mdb_put_int32(new_pg, 4, entry->table_pg);
|
||||||
|
|
||||||
return new_pg;
|
return new_pg;
|
||||||
}
|
}
|
||||||
unsigned char *
|
void *
|
||||||
mdb_new_data_pg(MdbCatalogEntry *entry)
|
mdb_new_data_pg(MdbCatalogEntry *entry)
|
||||||
{
|
{
|
||||||
MdbFormatConstants *fmt = entry->mdb->fmt;
|
MdbFormatConstants *fmt = entry->mdb->fmt;
|
||||||
unsigned char *new_pg;
|
void *new_pg = g_malloc0(fmt->pg_size);
|
||||||
|
|
||||||
new_pg = (unsigned char *) g_malloc0(fmt->pg_size);
|
_mdb_put_int16(new_pg, 2, 0x0101);
|
||||||
|
|
||||||
new_pg[0]=0x01;
|
|
||||||
new_pg[1]=0x01;
|
|
||||||
_mdb_put_int16(new_pg, 2, fmt->pg_size - fmt->row_count_offset - 2);
|
_mdb_put_int16(new_pg, 2, fmt->pg_size - fmt->row_count_offset - 2);
|
||||||
_mdb_put_int32(new_pg, 4, entry->table_pg);
|
_mdb_put_int32(new_pg, 4, entry->table_pg);
|
||||||
|
|
||||||
@@ -574,8 +568,9 @@ mdb_insert_row(MdbTableDef *table, int num_fields, MdbField *fields)
|
|||||||
guint16
|
guint16
|
||||||
mdb_add_row_to_pg(MdbTableDef *table, unsigned char *row_buffer, int new_row_size)
|
mdb_add_row_to_pg(MdbTableDef *table, unsigned char *row_buffer, int new_row_size)
|
||||||
{
|
{
|
||||||
unsigned char *new_pg;
|
void *new_pg;
|
||||||
int num_rows, i, pos, row_start, row_size;
|
int num_rows, i, pos, row_start;
|
||||||
|
size_t row_size;
|
||||||
MdbCatalogEntry *entry = table->entry;
|
MdbCatalogEntry *entry = table->entry;
|
||||||
MdbHandle *mdb = entry->mdb;
|
MdbHandle *mdb = entry->mdb;
|
||||||
MdbFormatConstants *fmt = mdb->fmt;
|
MdbFormatConstants *fmt = mdb->fmt;
|
||||||
@@ -606,14 +601,14 @@ mdb_add_row_to_pg(MdbTableDef *table, unsigned char *row_buffer, int new_row_siz
|
|||||||
for (i=0;i<num_rows;i++) {
|
for (i=0;i<num_rows;i++) {
|
||||||
mdb_find_row(mdb, i, &row_start, &row_size);
|
mdb_find_row(mdb, i, &row_start, &row_size);
|
||||||
pos -= row_size;
|
pos -= row_size;
|
||||||
memcpy(&new_pg[pos], &mdb->pg_buf[row_start], row_size);
|
memcpy(new_pg + pos, mdb->pg_buf + row_start, row_size);
|
||||||
_mdb_put_int16(new_pg, (fmt->row_count_offset + 2) + (i*2), pos);
|
_mdb_put_int16(new_pg, (fmt->row_count_offset + 2) + (i*2), pos);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* add our new row */
|
/* add our new row */
|
||||||
pos -= new_row_size;
|
pos -= new_row_size;
|
||||||
memcpy(&new_pg[pos], row_buffer, new_row_size);
|
memcpy(new_pg + pos, row_buffer, new_row_size);
|
||||||
/* add row to the row offset table */
|
/* add row to the row offset table */
|
||||||
_mdb_put_int16(new_pg, (fmt->row_count_offset + 2) + (num_rows*2), pos);
|
_mdb_put_int16(new_pg, (fmt->row_count_offset + 2) + (num_rows*2), pos);
|
||||||
|
|
||||||
@@ -642,7 +637,7 @@ MdbCatalogEntry *entry = table->entry;
|
|||||||
MdbHandle *mdb = entry->mdb;
|
MdbHandle *mdb = entry->mdb;
|
||||||
MdbField fields[256];
|
MdbField fields[256];
|
||||||
unsigned char row_buffer[4096];
|
unsigned char row_buffer[4096];
|
||||||
int old_row_size, new_row_size, delta;
|
size_t old_row_size, new_row_size;
|
||||||
unsigned int num_fields;
|
unsigned int num_fields;
|
||||||
|
|
||||||
if (!mdb->f->writable) {
|
if (!mdb->f->writable) {
|
||||||
@@ -683,8 +678,7 @@ unsigned int num_fields;
|
|||||||
new_row_size = mdb_pack_row(table, row_buffer, num_fields, fields);
|
new_row_size = mdb_pack_row(table, row_buffer, num_fields, fields);
|
||||||
if (mdb_get_option(MDB_DEBUG_WRITE))
|
if (mdb_get_option(MDB_DEBUG_WRITE))
|
||||||
buffer_dump(row_buffer, 0, new_row_size-1);
|
buffer_dump(row_buffer, 0, new_row_size-1);
|
||||||
delta = new_row_size - old_row_size;
|
if (new_row_size > (old_row_size + mdb_pg_get_freespace(mdb))) {
|
||||||
if ((mdb_pg_get_freespace(mdb) - delta) < 0) {
|
|
||||||
fprintf(stderr, "No space left on this page, update will not occur\n");
|
fprintf(stderr, "No space left on this page, update will not occur\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -693,15 +687,16 @@ unsigned int num_fields;
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
int
|
int
|
||||||
mdb_replace_row(MdbTableDef *table, int row, unsigned char *new_row, int new_row_size)
|
mdb_replace_row(MdbTableDef *table, int row, void *new_row, int new_row_size)
|
||||||
{
|
{
|
||||||
MdbCatalogEntry *entry = table->entry;
|
MdbCatalogEntry *entry = table->entry;
|
||||||
MdbHandle *mdb = entry->mdb;
|
MdbHandle *mdb = entry->mdb;
|
||||||
int pg_size = mdb->fmt->pg_size;
|
int pg_size = mdb->fmt->pg_size;
|
||||||
int rco = mdb->fmt->row_count_offset;
|
int rco = mdb->fmt->row_count_offset;
|
||||||
unsigned char *new_pg;
|
void *new_pg;
|
||||||
guint16 num_rows;
|
guint16 num_rows;
|
||||||
int row_start, row_size;
|
int row_start;
|
||||||
|
size_t row_size;
|
||||||
int i, pos;
|
int i, pos;
|
||||||
|
|
||||||
if (mdb_get_option(MDB_DEBUG_WRITE)) {
|
if (mdb_get_option(MDB_DEBUG_WRITE)) {
|
||||||
@@ -720,20 +715,20 @@ int i, pos;
|
|||||||
for (i=0;i<row;i++) {
|
for (i=0;i<row;i++) {
|
||||||
mdb_find_row(mdb, i, &row_start, &row_size);
|
mdb_find_row(mdb, i, &row_start, &row_size);
|
||||||
pos -= row_size;
|
pos -= row_size;
|
||||||
memcpy(&new_pg[pos], &mdb->pg_buf[row_start], row_size);
|
memcpy(new_pg + pos, mdb->pg_buf + row_start, row_size);
|
||||||
_mdb_put_int16(new_pg, rco + 2 + i*2, pos);
|
_mdb_put_int16(new_pg, rco + 2 + i*2, pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* our row */
|
/* our row */
|
||||||
pos -= new_row_size;
|
pos -= new_row_size;
|
||||||
memcpy(&new_pg[pos], new_row, new_row_size);
|
memcpy(new_pg + pos, new_row, new_row_size);
|
||||||
_mdb_put_int16(new_pg, rco + 2 + row*2, pos);
|
_mdb_put_int16(new_pg, rco + 2 + row*2, pos);
|
||||||
|
|
||||||
/* rows after */
|
/* rows after */
|
||||||
for (i=row+1;i<num_rows;i++) {
|
for (i=row+1;i<num_rows;i++) {
|
||||||
mdb_find_row(mdb, i, &row_start, &row_size);
|
mdb_find_row(mdb, i, &row_start, &row_size);
|
||||||
pos -= row_size;
|
pos -= row_size;
|
||||||
memcpy(&new_pg[pos], &mdb->pg_buf[row_start], row_size);
|
memcpy(new_pg + pos, mdb->pg_buf + row_start, row_size);
|
||||||
_mdb_put_int16(new_pg, rco + 2 + i*2, pos);
|
_mdb_put_int16(new_pg, rco + 2 + i*2, pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -766,7 +761,7 @@ mdb_copy_index_pg(MdbTableDef *table, MdbIndex *idx, MdbIndexPage *ipg)
|
|||||||
MdbColumn *col;
|
MdbColumn *col;
|
||||||
guint32 pg, pg_row;
|
guint32 pg, pg_row;
|
||||||
guint16 row;
|
guint16 row;
|
||||||
unsigned char *new_pg;
|
void *new_pg;
|
||||||
unsigned char key_hash[256];
|
unsigned char key_hash[256];
|
||||||
unsigned char iflag;
|
unsigned char iflag;
|
||||||
int keycol;
|
int keycol;
|
||||||
@@ -812,7 +807,7 @@ mdb_copy_index_pg(MdbTableDef *table, MdbIndex *idx, MdbIndexPage *ipg)
|
|||||||
buffer_dump(key_hash, 0, col->col_size - 1);
|
buffer_dump(key_hash, 0, col->col_size - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
memcpy(&new_pg[ipg->offset], &mdb->pg_buf[ipg->offset], ipg->len);
|
memcpy(new_pg + ipg->offset, mdb->pg_buf + ipg->offset, ipg->len);
|
||||||
ipg->offset += ipg->len;
|
ipg->offset += ipg->len;
|
||||||
ipg->len = 0;
|
ipg->len = 0;
|
||||||
|
|
||||||
@@ -831,8 +826,8 @@ mdb_copy_index_pg(MdbTableDef *table, MdbIndex *idx, MdbIndexPage *ipg)
|
|||||||
buffer_dump(key_hash, 0, col->col_size-1);
|
buffer_dump(key_hash, 0, col->col_size-1);
|
||||||
printf("--------\n");
|
printf("--------\n");
|
||||||
}
|
}
|
||||||
new_pg[ipg->offset] = 0x7f;
|
((char *)new_pg)[ipg->offset] = 0x7f;
|
||||||
memcpy(&new_pg[ipg->offset + 1], key_hash, col->col_size);
|
memcpy(new_pg + ipg->offset + 1, key_hash, col->col_size);
|
||||||
pg_row = (pgnum << 8) | ((rownum-1) & 0xff);
|
pg_row = (pgnum << 8) | ((rownum-1) & 0xff);
|
||||||
_mdb_put_int32_msb(new_pg, ipg->offset + 5, pg_row);
|
_mdb_put_int32_msb(new_pg, ipg->offset + 5, pg_row);
|
||||||
ipg->idx_starts[row++] = ipg->offset + ipg->len;
|
ipg->idx_starts[row++] = ipg->offset + ipg->len;
|
||||||
|
@@ -25,7 +25,8 @@ main(int argc, char **argv)
|
|||||||
{
|
{
|
||||||
MdbHandle *mdb;
|
MdbHandle *mdb;
|
||||||
int j;
|
int j;
|
||||||
long int pgnum = 0, row_start, map_sz;
|
long int pgnum = 0, row_start;
|
||||||
|
size_t map_sz;
|
||||||
int coln = 1;
|
int coln = 1;
|
||||||
unsigned char *map_buf;
|
unsigned char *map_buf;
|
||||||
|
|
||||||
|
@@ -80,7 +80,8 @@ void check_row(MdbHandle *mdb, MdbIndex *idx, guint32 pg, int row, unsigned char
|
|||||||
{
|
{
|
||||||
MdbField fields[256];
|
MdbField fields[256];
|
||||||
unsigned int num_fields, i, j;
|
unsigned int num_fields, i, j;
|
||||||
int row_start, row_size;
|
int row_start;
|
||||||
|
size_t row_size;
|
||||||
MdbColumn *col;
|
MdbColumn *col;
|
||||||
gchar buf[256], key[256];
|
gchar buf[256], key[256];
|
||||||
int elem;
|
int elem;
|
||||||
|
Reference in New Issue
Block a user