Use more appropriate types (void *, size_t)

This commit is contained in:
whydoubt 2005-06-28 04:53:37 +00:00
parent d0474b4692
commit 22c3b15218
8 changed files with 89 additions and 76 deletions

View File

@ -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>
* src/libmdb/write.c: Use col->is_fixed member directly
* doc/reference/libmdb/libmdb-sections.txt:

View File

@ -337,11 +337,11 @@ typedef struct {
int noskip_del; /* don't skip deleted rows */
/* object allocation map */
guint32 map_base_pg;
unsigned int map_sz;
size_t map_sz;
unsigned char *usage_map;
/* pages with free space left */
guint32 freemap_base_pg;
unsigned int freemap_sz;
size_t freemap_sz;
unsigned char *free_usage_map;
/* query planner */
MdbSargNode *sarg_tree;
@ -441,13 +441,13 @@ extern int mdb_rewind_table(MdbTableDef *table);
extern int mdb_fetch_row(MdbTableDef *table);
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 int mdb_find_pg_row(MdbHandle *mdb, int pg_row, void **buf, int *off, int *len);
extern int mdb_find_row(MdbHandle *mdb, int row, int *start, 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, size_t *len);
extern int mdb_find_end_of_row(MdbHandle *mdb, int row);
extern int mdb_col_fixed_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 int mdb_ole_read(MdbHandle *mdb, MdbColumn *col, void *ole_ptr, int chunk_size);
extern size_t mdb_ole_read_next(MdbHandle *mdb, MdbColumn *col, void *ole_ptr);
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 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 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_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_update_row(MdbTableDef *table);
extern unsigned char *mdb_new_data_pg(MdbCatalogEntry *entry);
extern void *mdb_new_data_pg(MdbCatalogEntry *entry);
/* map.c */
extern guint32 mdb_map_find_next_freepage(MdbTableDef *table, int row_size);

View File

@ -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 void gmdb_debug_clear(GladeXML *xml);
static void gmdb_debug_dissect(GtkTreeStore *store, char *fbuf, int offset, int len);
static guint16 get_uint16(unsigned char *c);
static guint32 get_uint32(unsigned char *c);
static guint16 get_uint16(void *c);
static guint32 get_uint32(void *c);
static long gmdb_get_max_page(MdbHandle *mdb);
static void gmdb_debug_display(GladeXML *xml, guint32 page);
static void gmdb_debug_jump(GladeXML *xml, int msb);
@ -412,14 +412,14 @@ int i = 0;
return "unknown";
}
static guint16
get_uint16(unsigned char *c)
get_uint16(void *c)
{
guint16 i;
memcpy(&i, c, 2);
return GINT16_FROM_LE(i);
}
static guint32
get_uint32(unsigned char *c)
get_uint32(void *c)
{
guint32 l;
memcpy(&l, c, 4);

View File

@ -32,7 +32,9 @@ static int _mdb_attempt_bind(MdbHandle *mdb,
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_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";
@ -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.
*/
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 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;
}
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 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;
}
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);
}
if (col->len_ptr) {
@ -235,7 +239,8 @@ int mdb_read_row(MdbTableDef *table, unsigned int row)
MdbColumn *col;
unsigned int i;
int rc;
int row_start, row_size;
int row_start;
size_t row_size;
int delflag, lookupflag;
MdbField fields[256];
int num_fields;
@ -437,13 +442,13 @@ int i;
return text;
}
#endif
int
size_t
mdb_ole_read_next(MdbHandle *mdb, MdbColumn *col, void *ole_ptr)
{
guint32 ole_len;
void *buf;
int row_start;
int len;
size_t len;
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;
}
int
size_t
mdb_ole_read(MdbHandle *mdb, MdbColumn *col, void *ole_ptr, int chunk_size)
{
guint32 ole_len;
void *buf;
int row_start;
int len;
size_t len;
ole_len = mdb_get_int32(ole_ptr, 0);
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;
}
}
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;
gint32 row_start, pg_row;
gint32 len;
size_t len;
void *buf, *pg_buf = mdb->pg_buf;
if (size<MDB_MEMO_OVERHEAD) {
@ -589,11 +595,12 @@ int mdb_copy_ole(MdbHandle *mdb, char *dest, int start, int size)
return 0;
}
}
#endif
static char *mdb_memo_to_string(MdbHandle *mdb, int start, int size)
{
guint32 memo_len;
gint32 row_start, pg_row;
gint32 len;
size_t len;
void *buf, *pg_buf = mdb->pg_buf;
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;
float tf;
double td;
void *pg_buf = mdb->pg_buf;
switch (datatype) {
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));
break;
case MDB_FLOAT:
tf = mdb_get_single(mdb->pg_buf, start);
tf = mdb_get_single(pg_buf, start);
text = g_strdup_printf("%.*f",
FLT_DIG - floor_log10(tf,1) - 1, tf);
trim_trailing_zeros(text);
break;
case MDB_DOUBLE:
td = mdb_get_double(mdb->pg_buf, start);
td = mdb_get_double(pg_buf, start);
text = g_strdup_printf("%.*f",
DBL_DIG - floor_log10(td,0) - 1, td);
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("");
} else {
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);
}
break;

View File

@ -52,7 +52,7 @@ MdbFormatConstants MdbJet3Constants = {
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:
@ -65,7 +65,7 @@ static ssize_t _mdb_read_pg(MdbHandle *mdb, unsigned char *pg_buf, unsigned long
* freeing.
**/
static gchar *mdb_find_file(const char *file_name)
static char *mdb_find_file(const char *file_name)
{
struct stat status;
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->refs = 1;
mdb->f->fd = -1;
mdb->f->filename = (char *) mdb_find_file(filename);
mdb->f->filename = mdb_find_file(filename);
if (!mdb->f->filename) {
fprintf(stderr, "Can't alloc filename\n");
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);
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;
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)
{
return ((unsigned char *)(buf))[offset];

View File

@ -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);
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);
memcpy(buf + offset, &value, 2);
}
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);
memcpy(buf + offset, &value, 4);
}
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);
memcpy(buf + offset, &value, 4);
@ -148,7 +148,7 @@ mdb_crack_row(MdbTableDef *table, int row_start, int row_end, MdbField *fields)
MdbColumn *col;
MdbCatalogEntry *entry = table->entry;
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 char *nullmask;
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)) {
row_cols = mdb_get_int16(mdb->pg_buf, row_start);
row_cols = mdb_get_int16(pg_buf, row_start);
col_count_size = 2;
} else {
row_cols = pg_buf[row_start];
row_cols = mdb_get_byte(pg_buf, row_start);
col_count_size = 1;
}
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 */
row_var_cols = IS_JET4(mdb) ?
mdb_get_int16(mdb->pg_buf, row_end - bitmask_sz - 1) :
pg_buf[row_end - bitmask_sz];
mdb_get_int16(pg_buf, row_end - bitmask_sz - 1) :
mdb_get_byte(pg_buf, row_end - bitmask_sz);
var_col_offsets = (unsigned int *)g_malloc((row_var_cols+1)*sizeof(int));
if (table->num_var_cols > 0) {
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)) {
col_start = col->fixed_offset + col_count_size;
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;
fixed_cols_found++;
/* 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_start = var_col_offsets[col->var_col_num];
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] -
col_start;
} 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[0] = (pos << 8) & 0xff;
offset_high[0] = (pos >> 8) & 0xff;
j = 1;
/* 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--) {
if (!fields[i-1].is_fixed) {
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);
return (free_end - free_start);
}
unsigned char *
void *
mdb_new_leaf_pg(MdbCatalogEntry *entry)
{
MdbHandle *mdb = entry->mdb;
unsigned char *new_pg;
new_pg = (unsigned char *) g_malloc0(mdb->fmt->pg_size);
void *new_pg = g_malloc0(mdb->fmt->pg_size);
new_pg[0]=0x04;
new_pg[1]=0x01;
_mdb_put_int16(new_pg, 2, 0x0104);
_mdb_put_int32(new_pg, 4, entry->table_pg);
return new_pg;
}
unsigned char *
void *
mdb_new_data_pg(MdbCatalogEntry *entry)
{
MdbFormatConstants *fmt = entry->mdb->fmt;
unsigned char *new_pg;
new_pg = (unsigned char *) g_malloc0(fmt->pg_size);
void *new_pg = g_malloc0(fmt->pg_size);
new_pg[0]=0x01;
new_pg[1]=0x01;
_mdb_put_int16(new_pg, 2, 0x0101);
_mdb_put_int16(new_pg, 2, fmt->pg_size - fmt->row_count_offset - 2);
_mdb_put_int32(new_pg, 4, entry->table_pg);
@ -574,8 +568,9 @@ mdb_insert_row(MdbTableDef *table, int num_fields, MdbField *fields)
guint16
mdb_add_row_to_pg(MdbTableDef *table, unsigned char *row_buffer, int new_row_size)
{
unsigned char *new_pg;
int num_rows, i, pos, row_start, row_size;
void *new_pg;
int num_rows, i, pos, row_start;
size_t row_size;
MdbCatalogEntry *entry = table->entry;
MdbHandle *mdb = entry->mdb;
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++) {
mdb_find_row(mdb, i, &row_start, &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);
}
}
/* add our new row */
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 */
_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;
MdbField fields[256];
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;
if (!mdb->f->writable) {
@ -683,8 +678,7 @@ unsigned int num_fields;
new_row_size = mdb_pack_row(table, row_buffer, num_fields, fields);
if (mdb_get_option(MDB_DEBUG_WRITE))
buffer_dump(row_buffer, 0, new_row_size-1);
delta = new_row_size - old_row_size;
if ((mdb_pg_get_freespace(mdb) - delta) < 0) {
if (new_row_size > (old_row_size + mdb_pg_get_freespace(mdb))) {
fprintf(stderr, "No space left on this page, update will not occur\n");
return 0;
}
@ -693,15 +687,16 @@ unsigned int num_fields;
return 0;
}
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;
MdbHandle *mdb = entry->mdb;
int pg_size = mdb->fmt->pg_size;
int rco = mdb->fmt->row_count_offset;
unsigned char *new_pg;
void *new_pg;
guint16 num_rows;
int row_start, row_size;
int row_start;
size_t row_size;
int i, pos;
if (mdb_get_option(MDB_DEBUG_WRITE)) {
@ -720,20 +715,20 @@ int i, pos;
for (i=0;i<row;i++) {
mdb_find_row(mdb, i, &row_start, &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);
}
/* our row */
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);
/* rows after */
for (i=row+1;i<num_rows;i++) {
mdb_find_row(mdb, i, &row_start, &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);
}
@ -766,7 +761,7 @@ mdb_copy_index_pg(MdbTableDef *table, MdbIndex *idx, MdbIndexPage *ipg)
MdbColumn *col;
guint32 pg, pg_row;
guint16 row;
unsigned char *new_pg;
void *new_pg;
unsigned char key_hash[256];
unsigned char iflag;
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);
}
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->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);
printf("--------\n");
}
new_pg[ipg->offset] = 0x7f;
memcpy(&new_pg[ipg->offset + 1], key_hash, col->col_size);
((char *)new_pg)[ipg->offset] = 0x7f;
memcpy(new_pg + ipg->offset + 1, key_hash, col->col_size);
pg_row = (pgnum << 8) | ((rownum-1) & 0xff);
_mdb_put_int32_msb(new_pg, ipg->offset + 5, pg_row);
ipg->idx_starts[row++] = ipg->offset + ipg->len;

View File

@ -25,7 +25,8 @@ main(int argc, char **argv)
{
MdbHandle *mdb;
int j;
long int pgnum = 0, row_start, map_sz;
long int pgnum = 0, row_start;
size_t map_sz;
int coln = 1;
unsigned char *map_buf;

View File

@ -80,7 +80,8 @@ void check_row(MdbHandle *mdb, MdbIndex *idx, guint32 pg, int row, unsigned char
{
MdbField fields[256];
unsigned int num_fields, i, j;
int row_start, row_size;
int row_start;
size_t row_size;
MdbColumn *col;
gchar buf[256], key[256];
int elem;