From 4a245f2af7857820f4713e2765b78810b8dcf90b Mon Sep 17 00:00:00 2001 From: whydoubt Date: Sat, 17 Jul 2004 07:48:11 +0000 Subject: [PATCH] Warnings fixes and better use of GLib --- ChangeLog | 9 ++++++ include/mdbtools.h | 8 +++--- src/libmdb/data.c | 66 ++++++++++++++++++------------------------- src/libmdb/kkd.c | 2 +- src/libmdb/like.c | 3 +- src/libmdb/table.c | 10 +++++-- src/libmdb/write.c | 6 ++-- src/util/mdb-import.c | 45 +++++++++++++---------------- 8 files changed, 74 insertions(+), 75 deletions(-) diff --git a/ChangeLog b/ChangeLog index 635d293..b35e56b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +Sat Jul 17 02:47:16 CDT 2004 Jeff Smith + * 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 * include/mdbsql.h: * include/mdbtools.h: diff --git a/include/mdbtools.h b/include/mdbtools.h index 33fdb76..7f91670 100644 --- a/include/mdbtools.h +++ b/include/mdbtools.h @@ -320,7 +320,7 @@ typedef struct { char name[MDB_MAX_OBJ_NAME+1]; unsigned int num_cols; GPtrArray *columns; - int num_rows; + unsigned int num_rows; int index_start; unsigned int num_real_idxs; unsigned int num_idxs; @@ -332,11 +332,11 @@ typedef struct { int noskip_del; /* don't skip deleted rows */ /* object allocation map */ guint32 map_base_pg; - int map_sz; + unsigned int map_sz; unsigned char *usage_map; /* pages with free space left */ guint32 freemap_base_pg; - int freemap_sz; + unsigned int freemap_sz; unsigned char *free_usage_map; /* query planner */ 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(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, int row); +extern int mdb_read_row(MdbTableDef *table, unsigned int row); /* dump.c */ extern void buffer_dump(const unsigned char* buf, int start, int end); diff --git a/src/libmdb/data.c b/src/libmdb/data.c index a29e611..aab2181 100644 --- a/src/libmdb/data.c +++ b/src/libmdb/data.c @@ -30,7 +30,7 @@ char *mdb_money_to_string(MdbHandle *mdb, int start, char *s); static int _mdb_attempt_bind(MdbHandle *mdb, 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); 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) { -int ret; + int ret = 0; if (len) { col->cur_value_start = start; col->cur_value_len = len; @@ -168,17 +168,18 @@ int ret; col->cur_value_len = 0; } if (col->bind_ptr) { - if (len) { -//fprintf(stdout,"len %d size %d\n",len, col->col_size); - if (col->col_type == MDB_NUMERIC) { - strcpy(col->bind_ptr, - mdb_num_to_string(mdb, start, col->col_type, col->col_prec, col->col_scale)); - } else { - strcpy(col->bind_ptr, - mdb_col_to_string(mdb, mdb->pg_buf, start, col->col_type, len)); - } + if (!len) { + strcpy(col->bind_ptr, ""); + } else if (col->col_type == MDB_NUMERIC) { + //fprintf(stdout,"len %d size %d\n",len, col->col_size); + char *str = mdb_num_to_string(mdb, start, col->col_type, + col->col_prec, col->col_scale); + strcpy(col->bind_ptr, str); + g_free(str); } 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); if (col->len_ptr) { @@ -188,7 +189,7 @@ int ret; } return 0; } -int mdb_read_row(MdbTableDef *table, int row) +int mdb_read_row(MdbTableDef *table, unsigned int row) { MdbHandle *mdb = table->entry->mdb; MdbFormatConstants *fmt = mdb->fmt; @@ -436,9 +437,9 @@ static int _mdb_attempt_bind(MdbHandle *mdb, int mdb_read_next_dpg_by_map0(MdbTableDef *table) { -MdbCatalogEntry *entry = table->entry; -MdbHandle *mdb = entry->mdb; -int pgnum, i, bitn; + MdbCatalogEntry *entry = table->entry; + MdbHandle *mdb = entry->mdb; + unsigned int pgnum, i, bitn; pgnum = mdb_get_int32(table->usage_map,1); /* the first 5 bytes of the usage map mean something */ @@ -951,8 +952,7 @@ guint16 len; len = row_stop - row_start; strncat(text, &mdb->pg_buf[row_start+4], strlen(text) + len - 4 > MDB_BIND_SIZE ? - MDB_BIND_SIZE - strlen(text) : - len - 4); + MDB_BIND_SIZE - strlen(text) : len - 4); /* find next lval page */ 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) { -/* FIX ME -- not thread safe */ -static char text[MDB_BIND_SIZE]; -char tmpbuf[MDB_BIND_SIZE]; -char mask[20]; -gint32 l; + char *text; + gint32 l; - l = mdb->pg_buf[start+16] * 256 * 256 * 256 + - mdb->pg_buf[start+15] * 256 * 256 + - mdb->pg_buf[start+14] * 256 + - mdb->pg_buf[start+13]; + memcpy(&l, mdb->pg_buf+start+13, 4); - sprintf(mask,"%%0%dld",prec); - sprintf(tmpbuf,mask,l); - //strcpy(text, tmpbuf); - //return text; - if (!scale) { - strcpy(text,tmpbuf); - } else { - memset(text,0,sizeof(text)); - strncpy(text,tmpbuf,prec-scale); - strcat(text,"."); - strcat(text,&tmpbuf[strlen(tmpbuf)-scale]); + text = (char *) g_malloc(prec+2); + sprintf(text, "%0*" G_GINT32_FORMAT, prec, GINT32_FROM_LE(l)); + if (scale) { + memmove(text+prec-scale, text+prec-scale+1, scale+1); + text[prec-scale] = '.'; } return text; } diff --git a/src/libmdb/kkd.c b/src/libmdb/kkd.c index 96fffc1..ea72887 100644 --- a/src/libmdb/kkd.c +++ b/src/libmdb/kkd.c @@ -55,7 +55,7 @@ MdbHandle *mdb = entry->mdb; GHashTable *mdb_get_column_def(MdbCatalogEntry *entry, int start) { -GHashTable *hash; +GHashTable *hash = NULL; MdbHandle *mdb = entry->mdb; MdbColumnProp prop; int tmp, pos, col_num, val_len, i; diff --git a/src/libmdb/like.c b/src/libmdb/like.c index 6972c63..0a23d45 100644 --- a/src/libmdb/like.c +++ b/src/libmdb/like.c @@ -38,7 +38,8 @@ */ 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); switch (r[0]) { diff --git a/src/libmdb/table.c b/src/libmdb/table.c index 5fea6a3..aceed8b 100644 --- a/src/libmdb/table.c +++ b/src/libmdb/table.c @@ -339,8 +339,10 @@ guint32 pgnum; } if (table->usage_map) { printf("pages reserved by this object\n"); - printf("usage map pg %lu\n", table->map_base_pg); - printf("free map pg %lu\n", table->freemap_base_pg); + printf("usage map pg %" G_GUINT32_FORMAT "\n", + table->map_base_pg); + printf("free map pg %" G_GUINT32_FORMAT "\n", + table->freemap_base_pg); pgnum = mdb_get_int32(table->usage_map,1); /* the first 5 bytes of the usage map mean something */ coln = 0; @@ -348,10 +350,12 @@ guint32 pgnum; for (bitn=0;bitn<8;bitn++) { if (table->usage_map[i] & 1 << bitn) { coln++; - printf("%6lu ",(long unsigned) pgnum); + printf("%6" G_GUINT32_FORMAT, pgnum); if (coln==10) { printf("\n"); coln = 0; + } else { + printf(" "); } } pgnum++; diff --git a/src/libmdb/write.c b/src/libmdb/write.c index ed1a69a..6c8fbd2 100644 --- a/src/libmdb/write.c +++ b/src/libmdb/write.c @@ -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); 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_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); key_hash[col->col_size - 1] &= 0x7f; 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 + 1, ipg->offset + col->col_size); buffer_dump(key_hash, 0, col->col_size - 1); diff --git a/src/util/mdb-import.c b/src/util/mdb-import.c index 9495fca..3362724 100644 --- a/src/util/mdb-import.c +++ b/src/util/mdb-import.c @@ -107,43 +107,43 @@ int prep_row(MdbTableDef *table, unsigned char *line, MdbField *fields, char *delim) { MdbColumn *col; - char delims[20]; - char *s; - unsigned int file_cols; + char **sarray, *s; + unsigned int i; /* * pull apart the row and turn it into something respectable */ - sprintf(delims, "%c\n", delim[0]); - s = strtok(line, delims); - file_cols = 0; - do { - if (file_cols >= table->num_cols) { + g_strdelimit(line, delim, '\n'); + sarray = g_strsplit (line, "\n", 0); + for (i=0; (s = sarray[i]); i++) { + if (i >= table->num_cols) { fprintf(stderr, "Number of columns in file exceeds number in table.\n"); + g_strfreev(sarray); return 0; } if (s[0]=='"' && s[strlen(s)-1]=='"') { s[strlen(s)-1] = '\0'; - s++; + memmove(s+1, s, strlen(s)); } printf("field = %s\n", s); - col = g_ptr_array_index (table->columns, file_cols); - if (convert_field(col, s, &fields[file_cols])) { - fprintf(stderr, "Format error in column %d\n", file_cols+1); + col = g_ptr_array_index (table->columns, i); + if (convert_field(col, s, &fields[i])) { + fprintf(stderr, "Format error in column %d\n", i+1); + g_strfreev(sarray); return 0; } - file_cols++; - } while (s = strtok(NULL, delims)); + } + g_strfreev(sarray); /* * verify number of columns in table against number in row */ - if (file_cols < table->num_cols) { - fprintf(stderr, "Row has %d columns, but table has %d\n", file_cols, table->num_cols); - free_values(fields, file_cols); + if (i < table->num_cols) { + fprintf(stderr, "Row has %d columns, but table has %d\n", i, table->num_cols); + free_values(fields, i); return 0; } - return file_cols; + return i; } int main(int argc, char **argv) @@ -156,9 +156,8 @@ main(int argc, char **argv) int num_fields; /* doesn't handle tables > 256 columns. Can that happen? */ int opt; - char *s; FILE *in; - char *delimiter = NULL; + char delimiter[2] = ","; char header_rows = 0; while ((opt=getopt(argc, argv, "H:d:"))!=-1) { @@ -167,15 +166,12 @@ main(int argc, char **argv) header_rows = atol(optarg); break; case 'd': - delimiter = (char *) g_strdup(optarg); + delimiter[0] = optarg[0]; break; default: break; } } - if (!delimiter) { - delimiter = (char *) g_strdup(","); - } /* ** optind is now the position of the first non-option arg, @@ -229,7 +225,6 @@ main(int argc, char **argv) } mdb_free_tabledef(table); - g_free(delimiter); fclose(in); mdb_close(mdb); mdb_exit();