mirror of
https://github.com/mdbtools/mdbtools.git
synced 2025-09-19 02:27:55 +08:00
Warnings fixes and better use of GLib
This commit is contained in:
@@ -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>
|
||||
* include/mdbsql.h:
|
||||
* 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);
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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;
|
||||
|
@@ -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]) {
|
||||
|
@@ -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++;
|
||||
|
@@ -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);
|
||||
|
@@ -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();
|
||||
|
Reference in New Issue
Block a user