Warnings fixes and better use of GLib

This commit is contained in:
whydoubt
2004-07-17 07:48:11 +00:00
parent e121a82946
commit 4a245f2af7
8 changed files with 74 additions and 75 deletions

View File

@@ -1,3 +1,12 @@
Sat Jul 17 02:47:16 CDT 2004 Jeff Smith <whydoubt@yahoo.com>
* include/mdbtools.h:
* src/libmdb/data.c:
* src/libmdb/kkd.c:
* src/libmdb/like.c:
* src/libmdb/table.c:
* src/libmdb/write.c:
* src/util/mdb-import.c: Warnings fixes and better use of GLib
Fri Jul 9 07:47:27 CDT 2004 Jeff Smith <whydoubt@yahoo.com> Fri Jul 9 07:47:27 CDT 2004 Jeff Smith <whydoubt@yahoo.com>
* include/mdbsql.h: * include/mdbsql.h:
* include/mdbtools.h: * include/mdbtools.h:

View File

@@ -320,7 +320,7 @@ typedef struct {
char name[MDB_MAX_OBJ_NAME+1]; char name[MDB_MAX_OBJ_NAME+1];
unsigned int num_cols; unsigned int num_cols;
GPtrArray *columns; GPtrArray *columns;
int num_rows; unsigned int num_rows;
int index_start; int index_start;
unsigned int num_real_idxs; unsigned int num_real_idxs;
unsigned int num_idxs; unsigned int num_idxs;
@@ -332,11 +332,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;
int map_sz; unsigned int 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;
int freemap_sz; unsigned int freemap_sz;
unsigned char *free_usage_map; unsigned char *free_usage_map;
/* query planner */ /* query planner */
MdbSargNode *sarg_tree; MdbSargNode *sarg_tree;
@@ -442,7 +442,7 @@ extern void mdb_bind_len(MdbTableDef *table, int col_num, int *len_ptr);
extern int mdb_ole_read_next(MdbHandle *mdb, MdbColumn *col, void *ole_ptr); 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 int 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, int row); extern int mdb_read_row(MdbTableDef *table, unsigned int row);
/* dump.c */ /* dump.c */
extern void buffer_dump(const unsigned char* buf, int start, int end); extern void buffer_dump(const unsigned char* buf, int start, int end);

View File

@@ -30,7 +30,7 @@
char *mdb_money_to_string(MdbHandle *mdb, int start, char *s); char *mdb_money_to_string(MdbHandle *mdb, int start, char *s);
static int _mdb_attempt_bind(MdbHandle *mdb, 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);
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);
int mdb_copy_ole(MdbHandle *mdb, char *dest, int start, int size); int mdb_copy_ole(MdbHandle *mdb, char *dest, int start, int size);
static char date_fmt[64] = "%x %X"; static char date_fmt[64] = "%x %X";
@@ -137,7 +137,7 @@ mdb_xfer_bound_bool(MdbHandle *mdb, MdbColumn *col, int value)
} }
static int mdb_xfer_bound_ole(MdbHandle *mdb, int start, MdbColumn *col, int len) static int mdb_xfer_bound_ole(MdbHandle *mdb, int start, MdbColumn *col, int len)
{ {
int ret; int ret = 0;
if (len) { if (len) {
col->cur_value_start = start; col->cur_value_start = start;
col->cur_value_len = len; col->cur_value_len = len;
@@ -168,17 +168,18 @@ int ret;
col->cur_value_len = 0; col->cur_value_len = 0;
} }
if (col->bind_ptr) { if (col->bind_ptr) {
if (len) { if (!len) {
//fprintf(stdout,"len %d size %d\n",len, col->col_size); strcpy(col->bind_ptr, "");
if (col->col_type == MDB_NUMERIC) { } else if (col->col_type == MDB_NUMERIC) {
strcpy(col->bind_ptr, //fprintf(stdout,"len %d size %d\n",len, col->col_size);
mdb_num_to_string(mdb, start, col->col_type, col->col_prec, col->col_scale)); char *str = mdb_num_to_string(mdb, start, col->col_type,
} else { col->col_prec, col->col_scale);
strcpy(col->bind_ptr, strcpy(col->bind_ptr, str);
mdb_col_to_string(mdb, mdb->pg_buf, start, col->col_type, len)); g_free(str);
}
} else { } else {
strcpy(col->bind_ptr, ""); //fprintf(stdout,"len %d size %d\n",len, col->col_size);
strcpy(col->bind_ptr,
mdb_col_to_string(mdb, mdb->pg_buf, start, col->col_type, len));
} }
ret = strlen(col->bind_ptr); ret = strlen(col->bind_ptr);
if (col->len_ptr) { if (col->len_ptr) {
@@ -188,7 +189,7 @@ int ret;
} }
return 0; return 0;
} }
int mdb_read_row(MdbTableDef *table, int row) int mdb_read_row(MdbTableDef *table, unsigned int row)
{ {
MdbHandle *mdb = table->entry->mdb; MdbHandle *mdb = table->entry->mdb;
MdbFormatConstants *fmt = mdb->fmt; MdbFormatConstants *fmt = mdb->fmt;
@@ -436,9 +437,9 @@ static int _mdb_attempt_bind(MdbHandle *mdb,
int int
mdb_read_next_dpg_by_map0(MdbTableDef *table) mdb_read_next_dpg_by_map0(MdbTableDef *table)
{ {
MdbCatalogEntry *entry = table->entry; MdbCatalogEntry *entry = table->entry;
MdbHandle *mdb = entry->mdb; MdbHandle *mdb = entry->mdb;
int pgnum, i, bitn; unsigned int pgnum, i, bitn;
pgnum = mdb_get_int32(table->usage_map,1); pgnum = mdb_get_int32(table->usage_map,1);
/* the first 5 bytes of the usage map mean something */ /* the first 5 bytes of the usage map mean something */
@@ -951,8 +952,7 @@ guint16 len;
len = row_stop - row_start; len = row_stop - row_start;
strncat(text, &mdb->pg_buf[row_start+4], strncat(text, &mdb->pg_buf[row_start+4],
strlen(text) + len - 4 > MDB_BIND_SIZE ? strlen(text) + len - 4 > MDB_BIND_SIZE ?
MDB_BIND_SIZE - strlen(text) : MDB_BIND_SIZE - strlen(text) : len - 4);
len - 4);
/* find next lval page */ /* find next lval page */
memo_row = mdb->pg_buf[row_start]; memo_row = mdb->pg_buf[row_start];
@@ -968,31 +968,19 @@ guint16 len;
*/ */
} }
} }
char * static char *
mdb_num_to_string(MdbHandle *mdb, int start, int datatype, int prec, int scale) mdb_num_to_string(MdbHandle *mdb, int start, int datatype, int prec, int scale)
{ {
/* FIX ME -- not thread safe */ char *text;
static char text[MDB_BIND_SIZE]; gint32 l;
char tmpbuf[MDB_BIND_SIZE];
char mask[20];
gint32 l;
l = mdb->pg_buf[start+16] * 256 * 256 * 256 + memcpy(&l, mdb->pg_buf+start+13, 4);
mdb->pg_buf[start+15] * 256 * 256 +
mdb->pg_buf[start+14] * 256 +
mdb->pg_buf[start+13];
sprintf(mask,"%%0%dld",prec); text = (char *) g_malloc(prec+2);
sprintf(tmpbuf,mask,l); sprintf(text, "%0*" G_GINT32_FORMAT, prec, GINT32_FROM_LE(l));
//strcpy(text, tmpbuf); if (scale) {
//return text; memmove(text+prec-scale, text+prec-scale+1, scale+1);
if (!scale) { text[prec-scale] = '.';
strcpy(text,tmpbuf);
} else {
memset(text,0,sizeof(text));
strncpy(text,tmpbuf,prec-scale);
strcat(text,".");
strcat(text,&tmpbuf[strlen(tmpbuf)-scale]);
} }
return text; return text;
} }

View File

@@ -55,7 +55,7 @@ MdbHandle *mdb = entry->mdb;
GHashTable *mdb_get_column_def(MdbCatalogEntry *entry, int start) GHashTable *mdb_get_column_def(MdbCatalogEntry *entry, int start)
{ {
GHashTable *hash; GHashTable *hash = NULL;
MdbHandle *mdb = entry->mdb; MdbHandle *mdb = entry->mdb;
MdbColumnProp prop; MdbColumnProp prop;
int tmp, pos, col_num, val_len, i; int tmp, pos, col_num, val_len, i;

View File

@@ -38,7 +38,8 @@
*/ */
int mdb_like_cmp(char *s, char *r) int mdb_like_cmp(char *s, char *r)
{ {
int i, ret; unsigned int i;
int ret;
mdb_debug(MDB_DEBUG_LIKE, "comparing %s and %s", s, r); mdb_debug(MDB_DEBUG_LIKE, "comparing %s and %s", s, r);
switch (r[0]) { switch (r[0]) {

View File

@@ -339,8 +339,10 @@ guint32 pgnum;
} }
if (table->usage_map) { if (table->usage_map) {
printf("pages reserved by this object\n"); printf("pages reserved by this object\n");
printf("usage map pg %lu\n", table->map_base_pg); printf("usage map pg %" G_GUINT32_FORMAT "\n",
printf("free map pg %lu\n", table->freemap_base_pg); table->map_base_pg);
printf("free map pg %" G_GUINT32_FORMAT "\n",
table->freemap_base_pg);
pgnum = mdb_get_int32(table->usage_map,1); pgnum = mdb_get_int32(table->usage_map,1);
/* the first 5 bytes of the usage map mean something */ /* the first 5 bytes of the usage map mean something */
coln = 0; coln = 0;
@@ -348,10 +350,12 @@ guint32 pgnum;
for (bitn=0;bitn<8;bitn++) { for (bitn=0;bitn<8;bitn++) {
if (table->usage_map[i] & 1 << bitn) { if (table->usage_map[i] & 1 << bitn) {
coln++; coln++;
printf("%6lu ",(long unsigned) pgnum); printf("%6" G_GUINT32_FORMAT, pgnum);
if (coln==10) { if (coln==10) {
printf("\n"); printf("\n");
coln = 0; coln = 0;
} else {
printf(" ");
} }
} }
pgnum++; pgnum++;

View File

@@ -642,7 +642,8 @@ mdb_update_index(MdbTableDef *table, MdbIndex *idx, int num_fields, MdbField *fi
mdb_index_find_row(mdb, idx, chain, pgnum, rownum); mdb_index_find_row(mdb, idx, chain, pgnum, rownum);
printf("chain depth = %d\n", chain->cur_depth); printf("chain depth = %d\n", chain->cur_depth);
printf("pg = %lu\n", chain->pages[chain->cur_depth-1].pg); printf("pg = %" G_GUINT32_FORMAT "\n",
chain->pages[chain->cur_depth-1].pg);
//mdb_copy_index_pg(table, idx, &chain->pages[chain->cur_depth-1]); //mdb_copy_index_pg(table, idx, &chain->pages[chain->cur_depth-1]);
mdb_add_row_to_leaf_pg(table, idx, &chain->pages[chain->cur_depth-1], idx_fields); mdb_add_row_to_leaf_pg(table, idx, &chain->pages[chain->cur_depth-1], idx_fields);
@@ -915,7 +916,8 @@ mdb_copy_index_pg(MdbTableDef *table, MdbIndex *idx, MdbIndexPage *ipg)
mdb_index_swap_n(&mdb->pg_buf[ipg->offset + 1], col->col_size, key_hash); mdb_index_swap_n(&mdb->pg_buf[ipg->offset + 1], col->col_size, key_hash);
key_hash[col->col_size - 1] &= 0x7f; key_hash[col->col_size - 1] &= 0x7f;
printf("length = %d\n", ipg->len); printf("length = %d\n", ipg->len);
printf("iflag = %d pg = %lu row = %d\n", iflag, pg, row); printf("iflag = %d pg = %" G_GUINT32_FORMAT
" row = %" G_GUINT16_FORMAT "\n", iflag, pg, row);
buffer_dump(mdb->pg_buf, ipg->offset, ipg->offset + ipg->len - 1); buffer_dump(mdb->pg_buf, ipg->offset, ipg->offset + ipg->len - 1);
buffer_dump(mdb->pg_buf, ipg->offset + 1, ipg->offset + col->col_size); buffer_dump(mdb->pg_buf, ipg->offset + 1, ipg->offset + col->col_size);
buffer_dump(key_hash, 0, col->col_size - 1); buffer_dump(key_hash, 0, col->col_size - 1);

View File

@@ -107,43 +107,43 @@ int
prep_row(MdbTableDef *table, unsigned char *line, MdbField *fields, char *delim) prep_row(MdbTableDef *table, unsigned char *line, MdbField *fields, char *delim)
{ {
MdbColumn *col; MdbColumn *col;
char delims[20]; char **sarray, *s;
char *s; unsigned int i;
unsigned int file_cols;
/* /*
* pull apart the row and turn it into something respectable * pull apart the row and turn it into something respectable
*/ */
sprintf(delims, "%c\n", delim[0]); g_strdelimit(line, delim, '\n');
s = strtok(line, delims); sarray = g_strsplit (line, "\n", 0);
file_cols = 0; for (i=0; (s = sarray[i]); i++) {
do { if (i >= table->num_cols) {
if (file_cols >= table->num_cols) {
fprintf(stderr, "Number of columns in file exceeds number in table.\n"); fprintf(stderr, "Number of columns in file exceeds number in table.\n");
g_strfreev(sarray);
return 0; return 0;
} }
if (s[0]=='"' && s[strlen(s)-1]=='"') { if (s[0]=='"' && s[strlen(s)-1]=='"') {
s[strlen(s)-1] = '\0'; s[strlen(s)-1] = '\0';
s++; memmove(s+1, s, strlen(s));
} }
printf("field = %s\n", s); printf("field = %s\n", s);
col = g_ptr_array_index (table->columns, file_cols); col = g_ptr_array_index (table->columns, i);
if (convert_field(col, s, &fields[file_cols])) { if (convert_field(col, s, &fields[i])) {
fprintf(stderr, "Format error in column %d\n", file_cols+1); fprintf(stderr, "Format error in column %d\n", i+1);
g_strfreev(sarray);
return 0; return 0;
} }
file_cols++; }
} while (s = strtok(NULL, delims)); g_strfreev(sarray);
/* /*
* verify number of columns in table against number in row * verify number of columns in table against number in row
*/ */
if (file_cols < table->num_cols) { if (i < table->num_cols) {
fprintf(stderr, "Row has %d columns, but table has %d\n", file_cols, table->num_cols); fprintf(stderr, "Row has %d columns, but table has %d\n", i, table->num_cols);
free_values(fields, file_cols); free_values(fields, i);
return 0; return 0;
} }
return file_cols; return i;
} }
int int
main(int argc, char **argv) main(int argc, char **argv)
@@ -156,9 +156,8 @@ main(int argc, char **argv)
int num_fields; int num_fields;
/* doesn't handle tables > 256 columns. Can that happen? */ /* doesn't handle tables > 256 columns. Can that happen? */
int opt; int opt;
char *s;
FILE *in; FILE *in;
char *delimiter = NULL; char delimiter[2] = ",";
char header_rows = 0; char header_rows = 0;
while ((opt=getopt(argc, argv, "H:d:"))!=-1) { while ((opt=getopt(argc, argv, "H:d:"))!=-1) {
@@ -167,15 +166,12 @@ main(int argc, char **argv)
header_rows = atol(optarg); header_rows = atol(optarg);
break; break;
case 'd': case 'd':
delimiter = (char *) g_strdup(optarg); delimiter[0] = optarg[0];
break; break;
default: default:
break; break;
} }
} }
if (!delimiter) {
delimiter = (char *) g_strdup(",");
}
/* /*
** optind is now the position of the first non-option arg, ** optind is now the position of the first non-option arg,
@@ -229,7 +225,6 @@ main(int argc, char **argv)
} }
mdb_free_tabledef(table); mdb_free_tabledef(table);
g_free(delimiter);
fclose(in); fclose(in);
mdb_close(mdb); mdb_close(mdb);
mdb_exit(); mdb_exit();