diff --git a/ChangeLog b/ChangeLog
index 4e80c39..8bf7dfc 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -4,6 +4,9 @@ Wed Nov 9 07:23:01 CST 2005 Jeff Smith <whydoubt@yahoo.com>
* src/util/mdb-header.c:
* src/sql/parser.y: Fix several leaks and errors
+Fri Nov 4 06:10:41 CST 2005 Jeff Smith <whydoubt@yahoo.com>
+ * src/libmdb/data.c: Fix in reading bound boolean fields (Yasir Assam)
+ * src/libmdb/data.c: Several more fixes in reading data into bound fields
Mon Oct 17 06:25:44 CDT 2005 Jeff Smith <whydoubt@yahoo.com>
* HACKING: Correct info about MDBICONV
@@ -21,7 +24,20 @@ Tue Aug 30 21:24:46 EDT 2005 Brian Bruns <brian@bruns.com>
* configure.in: add --disable-gmdb2 switch
+Mon Jun 27 23:52:15 CDT 2005 Jeff Smith <whydoubt@yahoo.com>
+ * src/gmdb2/debug.c:
+ * src/libmdb/data.c:
+ * src/util/prfreemap.c:
+ * src/util/prindex.c: Use more appropriate types (void *, size_t)
+
+
+Sat Jun 18 01:49:03 CDT 2005 Jeff Smith <whydoubt@yahoo.com>
+ * src/gmdb2/gladefiles/gmdb-debug.glade:
+ * src/gmdb2/debug.c: Fix several lockups, leaks, and warnings
+
Thu Jun 16 21:19:37 CDT 2005 Jeff Smith <whydoubt@yahoo.com>
+ * src/libmdb/data.c: Fix segmentation fault
+ * src/libmdb/write.c: Fix bug in handling certain 'jump tables'
* src/util/mdb-schema.c: Handle 'file not found' case
* src/libmdb/catalog.c: Fix some potential segmentation faults
@@ -34,9 +50,12 @@ Thu Apr 28 21:34:57 CDT 2005 Jeff Smith <whydoubt@yahoo.com>
* src/util/mdb-check.c:
* src/util/sargtest.c: Remove an unused variable and a noop
* src/libmdb/backend.c:
+ * src/libmdb/iconv.c:
+ * src/libmdb/table.c:
* src/odbc/unittest.c: Clean up some gcc4 warnings and errors
Sat Apr 9 15:40:17 CDT 2005 Jeff Smith <whydoubt@yahoo.com>
+ * src/gmdb2/gladefiles/gmdb-debug.glade:
* src/gmdb2/gladefiles/gmdb-schema.glade:
* src/gmdb2/gladefiles/gmdb-sql.glade:
* src/gmdb2/gladefiles/gmdb.glade: Gladefile fixes (Edward Catmur)
diff --git a/include/mdbtools.h b/include/mdbtools.h
index 8e3e44b..388b2a8 100644
--- a/include/mdbtools.h
+++ b/include/mdbtools.h
@@ -444,13 +444,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, unsigned char *buf, int start, int datatype, int size);
-extern int mdb_find_pg_row(MdbHandle *mdb, int pg_row, char **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_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);
diff --git a/src/gmdb2/debug.c b/src/gmdb2/debug.c
index d911d07..030f5ea 100644
--- a/src/gmdb2/debug.c
+++ b/src/gmdb2/debug.c
@@ -42,9 +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 gchar *gmdb_strappend(gchar *x, gchar *y);
+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);
@@ -56,8 +55,8 @@ typedef struct GMdbValStr {
} GMdbValStr;
GMdbValStr table_types[] = {
- { 0x4e, "User Table" },
- { 0x53, "System Table" },
+ { 0x4e, "User" },
+ { 0x53, "System" },
{ 0, NULL }
};
GMdbValStr column_types[] = {
@@ -78,11 +77,11 @@ GMdbValStr column_types[] = {
{ 0, NULL }
};
GMdbValStr object_types[] = {
- { 0x00, "Database Definition Page" },
- { 0x01, "Data Page" },
- { 0x02, "Table Definition Page" },
- { 0x03, "Index Page" },
- { 0x04, "Leaf Index Page" },
+ { 0x00, "Database Definition" },
+ { 0x01, "Data" },
+ { 0x02, "Table Definition" },
+ { 0x03, "Index" },
+ { 0x04, "Leaf Index" },
{ 0, NULL }
};
@@ -90,36 +89,37 @@ GMdbValStr object_types[] = {
static void
gmdb_debug_select_cb(GtkTreeSelection *select, GladeXML *xml)
{
-int start_row, end_row;
-int start_col, end_col;
-int i;
-GtkTreeIter iter;
-GtkTreeModel *model;
-gint32 start, end;
-GtkWidget *textview;
-
- if (!select) return;
-
- if (gtk_tree_selection_get_selected (select, &model, &iter)) {
- gchar *fieldname;
- gint32 len;
- gtk_tree_model_get (model, &iter, 0, &fieldname,
- 1, &start,
- 2, &len, -1);
- end = start + len - 1;
- g_free (fieldname);
- }
+ int start_row, end_row;
+ int start_col, end_col;
+ GtkTreeIter iter;
+ GtkTreeModel *model;
+ gint32 start, end, len;
+ GtkWidget *textview;
+ gchar *fieldname;
+
+ fprintf(stderr, "select_cb fired\n");
- if (start == -1 || end == -1) return;
+ textview = glade_xml_get_widget (xml, "debug_textview");
+ gmdb_debug_text_off(textview);
+
+ if (!select)
+ return;
+ if (!gtk_tree_selection_get_selected (select, &model, &iter))
+ return;
+ gtk_tree_model_get (model, &iter, 0, &fieldname,
+ 1, &start,
+ 2, &len, -1);
+ g_free (fieldname);
+ if ((start == -1) || (len < 1))
+ return;
+
+ end = start + len - 1;
start_row = LINESZ * (start / 16);
end_row = LINESZ * (end / 16);
start_col = 8 + (start % 16) * 3;
end_col = 8 + (end % 16) * 3;
- textview = glade_xml_get_widget (xml, "debug_textview");
- gmdb_debug_text_off(textview);
-
if (start_row == end_row) {
gmdb_debug_text_on(textview,
start_row + start_col,
@@ -128,6 +128,7 @@ GtkWidget *textview;
start_row + 59 + (start % 16),
start_row + 59 + (end % 16) + 1);
} else {
+ int i;
gmdb_debug_text_on(textview,
start_row + start_col,
/* 55 = 8 (addr) + 15 (bytes) * 3 (%02x " ") + 2 (last byte) */
@@ -292,6 +293,8 @@ gmdb_debug_display_cb(GtkWidget *w, gpointer data)
gchar *s;
GladeXML *xml;
+ fprintf(stderr, "display fired\n");
+
if (!mdb) return;
win = gtk_widget_get_toplevel(w);
@@ -389,13 +392,6 @@ gmdb_debug_display(GladeXML *xml, guint32 page)
g_free(tbuf);
}
/* functions */
-static gchar *
-gmdb_strappend(gchar *x, gchar *y)
-{
- gchar *z = g_strconcat(x, y);
- g_free(x);
- return z;
-}
static long
gmdb_get_max_page(MdbHandle *mdb)
{
@@ -420,14 +416,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);
@@ -483,20 +479,16 @@ gmdb_debug_dissect_index2(GtkTreeStore *store, GtkTreeIter *parent, char *fbuf,
gmdb_debug_add_item(store, parent, str, offset+34, 4);
flags = fbuf[offset+38];
- str = g_strdup("Index Flags (");
- if (flags & MDB_IDX_UNIQUE) {
- str = gmdb_strappend(str, "Unique"); mod++;
- }
- if (flags & MDB_IDX_IGNORENULLS) {
- if (mod) str = gmdb_strappend(str, ",");
- str = gmdb_strappend(str, "Ignore Nulls"); mod++;
+ str = g_strconcat("Index Flags:",
+ (flags & MDB_IDX_UNIQUE) ? " Unique" : "",
+ (flags & MDB_IDX_IGNORENULLS) ? " IgnoreNulls" : "",
+ (flags & MDB_IDX_REQUIRED) ? " Required" : "",
+ NULL);
+ if (strcmp(str, "Index Flags:") == 0) {
+ gchar *str2 = g_strconcat(str, " None");
+ g_free(str);
+ str = str2;
}
- if (flags & MDB_IDX_REQUIRED) {
- if (mod) str = gmdb_strappend(str, ",");
- str = gmdb_strappend(str, "Required"); mod++;
- }
- if (!mod) str = gmdb_strappend(str, "None");
- str = gmdb_strappend(str, ")");
gmdb_debug_add_item(store, parent, str, offset+38, 1);
}
static void
@@ -577,7 +569,7 @@ gmdb_debug_dissect_leaf_pg(GtkTreeStore *store, char *fbuf, int offset, int len)
guint32 temp;
temp = get_uint32(fbuf+offset+4);
- str = g_strdup_printf("Parents TDEF page: 0x%06x (%lu)", temp,
+ str = g_strdup_printf("Parent's TDEF page: 0x%06x (%lu)", temp,
(unsigned long)temp);
gmdb_debug_add_item(store, NULL, str, offset+4, 4);
@@ -690,8 +682,8 @@ gmdb_debug_dissect_tabledef_pg4(GtkTreeStore *store, char *fbuf, int offset, int
{
gchar *str;
guint32 i, num_idx, num_cols, idx_entries;
- int newbase;
- GtkTreeIter *node, *container;
+ int newbase, infobase;
+ GtkTreeIter *container;
char *foff = fbuf + offset;
str = g_strdup_printf("Next TDEF Page: 0x%06x (%lu)",
@@ -700,7 +692,7 @@ gmdb_debug_dissect_tabledef_pg4(GtkTreeStore *store, char *fbuf, int offset, int
str = g_strdup_printf("Length of Data: %lu",
(unsigned long)get_uint32(foff+8));
gmdb_debug_add_item(store, NULL, str, offset+8, 4);
- str = g_strdup_printf("# of Records: %lu",
+ str = g_strdup_printf("Records: %lu",
(unsigned long)get_uint32(foff+16));
gmdb_debug_add_item(store, NULL, str, offset+16, 4);
str = g_strdup_printf("Autonumber Value: %lu",
@@ -709,19 +701,19 @@ gmdb_debug_dissect_tabledef_pg4(GtkTreeStore *store, char *fbuf, int offset, int
str = g_strdup_printf("Table Type: 0x%02x (%s)", foff[40],
gmdb_val_to_str(table_types, foff[40]));
gmdb_debug_add_item(store, NULL, str, offset+40, 1);
- str = g_strdup_printf("Max # of Columns: %u", get_uint16(foff+41));
+ str = g_strdup_printf("Max Columns: %u", get_uint16(foff+41));
gmdb_debug_add_item(store, NULL, str, offset+41, 2);
- str = g_strdup_printf("# of VarCols: %u", get_uint16(foff+43));
+ str = g_strdup_printf("Var Columns: %u", get_uint16(foff+43));
gmdb_debug_add_item(store, NULL, str, offset+43, 2);
num_cols = get_uint16(foff+45);
- str = g_strdup_printf("# of Columns: %u", num_cols);
+ str = g_strdup_printf("Columns: %u", num_cols);
gmdb_debug_add_item(store, NULL, str, offset+45, 2);
idx_entries = get_uint32(foff+47);
- str = g_strdup_printf("# of Index Entries: %lu",
+ str = g_strdup_printf("Index Entries: %lu",
(unsigned long)idx_entries);
gmdb_debug_add_item(store, NULL, str, offset+47, 4);
num_idx = get_uint32(foff+51);
- str = g_strdup_printf("# of Real Indices: %lu",
+ str = g_strdup_printf("Real Indices: %lu",
(unsigned long)num_idx);
gmdb_debug_add_item(store, NULL, str, offset+51, 4);
@@ -729,39 +721,43 @@ gmdb_debug_dissect_tabledef_pg4(GtkTreeStore *store, char *fbuf, int offset, int
gmdb_debug_add_page_ptr(store, NULL, fbuf, "Pages Freespace Pointer", offset+59);
newbase = offset+63;
- str = g_strdup("Index Entries");
- container = gmdb_debug_add_item(store, NULL, str, -1, 1);
+ if (num_idx > 0) {
+ str = g_strdup("Index Entries");
+ container = gmdb_debug_add_item(store, NULL, str, -1, 0);
+ }
for (i=0;i<num_idx;i++) {
+ GtkTreeIter *node;
str = g_strdup_printf("Index %d", i+1);
node = gmdb_debug_add_item(store, container, str, newbase, 12);
//gmdb_debug_dissect_index1(store, node, fbuf, offset+63);
newbase += 12;
}
- str = g_strdup("Column Data");
- container = gmdb_debug_add_item(store, NULL, str, -1, 1);
+ infobase = newbase;
+ newbase += 25 * num_cols;
+ str = g_strdup("Column Info");
+ container = gmdb_debug_add_item(store, NULL, str, -1, 0);
for (i=0;i<num_cols;i++) {
+ GtkTreeIter *node, *subnode;
+// char *tmpstr;
+ int namelen;
+
str = g_strdup_printf("Column %d", i+1);
- node = gmdb_debug_add_item(store, container, str, newbase, 25);
- //gmdb_debug_dissect_column(store, node, fbuf, newbase);
- newbase += 25;
- }
+ node = gmdb_debug_add_item(store, container, str, -1, 0);
- str = g_strdup("Column Names");
- container = gmdb_debug_add_item(store, NULL, str, -1, 1);
- for (i=0;i<num_cols;i++) {
- char *tmpstr;
- int namelen;
+ str = g_strdup("Data");
+ subnode = gmdb_debug_add_item(store, node, str, infobase, 25);
+ //gmdb_debug_dissect_column(store, subnode, fbuf, infobase);
+ infobase += 25;
+ str = g_strdup("Name");
namelen = get_uint16(fbuf+newbase);
// tmpstr = g_malloc(namelen + 1);
// strncpy(tmpstr, &fbuf[newbase+1], namelen);
// tmpstr[namelen]=0;
// str = g_strdup_printf("Column %d: %s", i+1, tmpstr);
// g_free(tmpstr);
- str = g_strdup_printf("Column %d", i+1);
- node = gmdb_debug_add_item(store, container, str,
- newbase+2, namelen);
+ gmdb_debug_add_item(store, node, str, newbase+2, namelen);
newbase += namelen+2;
}
}
@@ -810,7 +806,7 @@ gmdb_debug_dissect_tabledef_pg3(GtkTreeStore *store, char *fbuf, int offset, int
newbase = offset + 43;
str = g_strdup("Index Entries");
- container = gmdb_debug_add_item(store, NULL, str, -1, 1);
+ container = gmdb_debug_add_item(store, NULL, str, -1, 0);
for (i=0;i<num_idx;i++) {
str = g_strdup_printf("Index %d", i+1);
node = gmdb_debug_add_item(store, container, str, newbase, 8);
@@ -819,7 +815,7 @@ gmdb_debug_dissect_tabledef_pg3(GtkTreeStore *store, char *fbuf, int offset, int
}
str = g_strdup("Column Data");
- container = gmdb_debug_add_item(store, NULL, str, -1, 1);
+ container = gmdb_debug_add_item(store, NULL, str, -1, 0);
for (i=0;i<num_cols;i++) {
str = g_strdup_printf("Column %d", i+1);
node = gmdb_debug_add_item(store, container, str, newbase, 18);
@@ -828,7 +824,7 @@ gmdb_debug_dissect_tabledef_pg3(GtkTreeStore *store, char *fbuf, int offset, int
}
str = g_strdup("Column Names");
- container = gmdb_debug_add_item(store, NULL, str, -1, 1);
+ container = gmdb_debug_add_item(store, NULL, str, -1, 0);
for (i=0;i<num_cols;i++) {
char *tmpstr;
int namelen;
@@ -844,7 +840,7 @@ gmdb_debug_dissect_tabledef_pg3(GtkTreeStore *store, char *fbuf, int offset, int
newbase += namelen + 1;
}
str = g_strdup("Index definition 1");
- container = gmdb_debug_add_item(store, NULL, str, -1, 1);
+ container = gmdb_debug_add_item(store, NULL, str, -1, 0);
for (i=0;i<num_idx;i++) {
str = g_strdup_printf("Index %d", i+1);
node = gmdb_debug_add_item(store, container, str, newbase, 39);
@@ -852,7 +848,7 @@ gmdb_debug_dissect_tabledef_pg3(GtkTreeStore *store, char *fbuf, int offset, int
newbase += 39;
}
str = g_strdup("Index definition 2");
- container = gmdb_debug_add_item(store, NULL, str, -1, 1);
+ container = gmdb_debug_add_item(store, NULL, str, -1, 0);
for (i=0;i<idx_entries;i++) {
str = g_strdup_printf("Index %d", i+1);
node = gmdb_debug_add_item(store, container, str, newbase, 20);
@@ -860,7 +856,7 @@ gmdb_debug_dissect_tabledef_pg3(GtkTreeStore *store, char *fbuf, int offset, int
}
str = g_strdup("Index Names");
- container = gmdb_debug_add_item(store, NULL, str, -1, 1);
+ container = gmdb_debug_add_item(store, NULL, str, -1, 0);
for (i=0;i<idx_entries;i++) {
char *tmpstr;
int namelen;
@@ -889,7 +885,7 @@ gmdb_debug_dissect(GtkTreeStore *store, char *fbuf, int offset, int len)
{
gchar *str;
- str = g_strdup_printf("Object Type: 0x%02x (%s)", fbuf[offset],
+ str = g_strdup_printf("Page Type: 0x%02x (%s)", fbuf[offset],
gmdb_val_to_str(object_types, fbuf[offset]));
gmdb_debug_add_item(store, NULL, str, 0, 1);
switch (fbuf[offset]) {
@@ -947,44 +943,29 @@ static void
gmdb_debug_text_on(GtkWidget *textbox,
int start_byte, int end_byte)
{
-GtkTextBuffer *buffer;
-GtkTextTag *tag;
-GtkTextIter start, end;
+ GtkTextBuffer *buffer;
+ GtkTextIter start, end;
buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (textbox));
-
- tag = gtk_text_buffer_create_tag (buffer, NULL,
- "foreground", "white", NULL);
- tag = gtk_text_buffer_create_tag (buffer, NULL,
- "background", "blue", NULL);
-
gtk_text_buffer_get_iter_at_offset (buffer, &start, start_byte);
gtk_text_buffer_get_iter_at_offset (buffer, &end, end_byte);
gtk_text_view_scroll_to_iter(GTK_TEXT_VIEW(textbox),
&start, 0.0, FALSE, 0.0, 0.0);
- gtk_text_buffer_apply_tag (buffer, tag, &start, &end);
+ gtk_text_buffer_apply_tag_by_name (buffer, "debug_on", &start, &end);
}
static void
gmdb_debug_text_off(GtkWidget *textbox)
{
-GtkTextBuffer *buffer;
-GtkTextTag *tag;
-int end_byte;
-GtkTextIter start, end;
+ GtkTextBuffer *buffer;
+ int end_byte;
+ GtkTextIter start, end;
buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (textbox));
-
- tag = gtk_text_buffer_create_tag (buffer, NULL,
- "foreground", "black", NULL);
- tag = gtk_text_buffer_create_tag (buffer, NULL,
- "background", "white", NULL);
-
end_byte = gtk_text_buffer_get_char_count(buffer);
gtk_text_buffer_get_iter_at_offset (buffer, &start, 0);
gtk_text_buffer_get_iter_at_offset (buffer, &end, end_byte);
-
- gtk_text_buffer_apply_tag (buffer, tag, &start, &end);
+ gtk_text_buffer_remove_all_tags (buffer, &start, &end);
}
static gint
@@ -997,6 +978,7 @@ gmdb_debug_close_cb(GtkWidget *w, gpointer data)
{
GladeXML *xml;
+ fprintf(stderr, "close fired\n");
xml = g_object_get_data(G_OBJECT(w), "debugwin_xml");
debug_list = g_list_remove(debug_list, xml);
gtk_widget_destroy(w);
@@ -1007,6 +989,7 @@ gmdb_debug_close_all()
GladeXML *xml;
GtkWidget *win;
+ fprintf(stderr, "close_all fired\n");
while ((xml = g_list_nth_data(debug_list, 0))) {
win = glade_xml_get_widget (xml, "debug_window");
debug_list = g_list_remove(debug_list, xml);
@@ -1029,6 +1012,7 @@ gmdb_debug_new_cb(GtkWidget *w, gpointer data)
/* load the interface */
debugwin_xml = glade_xml_new(GMDB_GLADEDIR "gmdb-debug.glade", NULL, NULL);
/* connect the signals in the interface */
+ fprintf(stderr, "autoconnect signals\n");
glade_xml_signal_autoconnect(debugwin_xml);
debug_list = g_list_append(debug_list, debugwin_xml);
@@ -1089,7 +1073,8 @@ gmdb_debug_set_dissect_cb(GtkWidget *w, gpointer data)
static void gmdb_debug_init(MdbHandle *mdb, GladeXML *xml)
{
gchar *str;
- GtkWidget *pglabel, *entry, *window;
+ GtkWidget *pglabel, *entry, *window, *textview;
+ GtkTextBuffer *buffer;
gboolean *dissect;
pglabel = glade_xml_get_widget (xml, "debug_num_label");
@@ -1104,4 +1089,9 @@ static void gmdb_debug_init(MdbHandle *mdb, GladeXML *xml)
dissect = g_malloc0(sizeof(guint));
*dissect = TRUE;
g_object_set_data(G_OBJECT(window), "dissect", dissect);
+
+ textview = glade_xml_get_widget (xml, "debug_textview");
+ buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (textview));
+ gtk_text_buffer_create_tag (buffer, "debug_on",
+ "foreground", "white", "background", "blue", NULL);
}
diff --git a/src/gmdb2/gladefiles/gmdb-debug.glade b/src/gmdb2/gladefiles/gmdb-debug.glade
index 1278e5b..041aac0 100644
--- a/src/gmdb2/gladefiles/gmdb-debug.glade
+++ b/src/gmdb2/gladefiles/gmdb-debug.glade
@@ -392,7 +392,8 @@
<property name="label" translatable="yes">_Display</property>
<property name="use_underline">True</property>
<property name="relief">GTK_RELIEF_NORMAL</property>
- <signal name="clicked" handler="gmdb_debug_display_cb" object="debug_entry"/>
+ <property name="focus_on_click">True</property>
+ <signal name="clicked" handler="gtk_main_quit" object="debug_entry" last_modification_time="Tue, 23 Aug 2005 12:40:43 GMT"/>
</widget>
<packing>
<property name="padding">0</property>
diff --git a/src/libmdb/data.c b/src/libmdb/data.c
index d0965e1..80fae1b 100644
--- a/src/libmdb/data.c
+++ b/src/libmdb/data.c
@@ -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, void *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, char **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;
@@ -161,20 +163,23 @@ int bit_num = (col_num - 1) % 8;
}
/* bool has to be handled specially because it uses the null bit to store its
** value*/
-static int
+static size_t
mdb_xfer_bound_bool(MdbHandle *mdb, MdbColumn *col, int value)
{
-
col->cur_value_len = value;
if (col->bind_ptr) {
- strcpy(col->bind_ptr, value ? "0" : "1");
+ strcpy(col->bind_ptr, value ? "0" : "1");
+ }
+ if (col->len_ptr) {
+ *col->len_ptr = 1;
}
- return 0;
+ return 1;
}
-static int mdb_xfer_bound_ole(MdbHandle *mdb, int start, MdbColumn *col, int len)
+static size_t
+mdb_xfer_bound_ole(MdbHandle *mdb, int start, MdbColumn *col, int len)
{
- int ret = 0;
+ size_t ret = 0;
if (len) {
col->cur_value_start = start;
col->cur_value_len = len;
@@ -182,16 +187,23 @@ static int mdb_xfer_bound_ole(MdbHandle *mdb, int start, MdbColumn *col, int len
col->cur_value_start = 0;
col->cur_value_len = 0;
}
+#ifdef MDB_COPY_OLE
if (col->bind_ptr || col->len_ptr) {
- //ret = mdb_copy_ole(mdb, col->bind_ptr, start, len);
- memcpy(col->bind_ptr, &mdb->pg_buf[start], MDB_MEMO_OVERHEAD);
+ ret = mdb_copy_ole(mdb, col->bind_ptr, start, len);
}
+#else
+ if (col->bind_ptr) {
+ memcpy(col->bind_ptr, mdb->pg_buf + start, MDB_MEMO_OVERHEAD);
+ }
+ ret = MDB_MEMO_OVERHEAD;
+#endif
if (col->len_ptr) {
- *col->len_ptr = MDB_MEMO_OVERHEAD;
+ *col->len_ptr = ret;
}
return ret;
}
-static int mdb_xfer_bound_data(MdbHandle *mdb, int start, MdbColumn *col, int len)
+static size_t
+mdb_xfer_bound_data(MdbHandle *mdb, int start, MdbColumn *col, int len)
{
int ret;
//if (!strcmp("Name",col->name)) {
@@ -437,13 +449,13 @@ int i;
return text;
}
#endif
-int
+size_t
mdb_ole_read_next(MdbHandle *mdb, MdbColumn *col, void *ole_ptr)
{
guint32 ole_len;
- char *buf;
+ void *buf;
int row_start;
- int len;
+ size_t len;
ole_len = mdb_get_int32(ole_ptr, 0);
@@ -464,13 +476,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;
- char *buf;
+ 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,12 +538,13 @@ 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, void *dest, int start, int size)
{
guint32 ole_len;
guint32 row_start, pg_row;
- guint32 len;
- char *buf, *pg_buf = mdb->pg_buf;
+ size_t len;
+ void *buf, *pg_buf = mdb->pg_buf;
if (size<MDB_MEMO_OVERHEAD) {
return 0;
@@ -589,12 +602,13 @@ 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;
guint32 row_start, pg_row;
- guint32 len;
- char *buf, *pg_buf = mdb->pg_buf;
+ size_t len;
+ void *buf, *pg_buf = mdb->pg_buf;
char *text = (char *) g_malloc(MDB_BIND_SIZE);
if (size<MDB_MEMO_OVERHEAD) {
@@ -668,7 +682,8 @@ static char *mdb_memo_to_string(MdbHandle *mdb, int start, int size)
return text;
} else {
fprintf(stderr, "Unhandled memo field flags = %02x\n", memo_len >> 24);
- return "";
+ strcpy(text, "");
+ return text;
}
}
static char *
diff --git a/src/libmdb/iconv.c b/src/libmdb/iconv.c
index 3ce1b27..bfd2760 100644
--- a/src/libmdb/iconv.c
+++ b/src/libmdb/iconv.c
@@ -43,7 +43,7 @@ mdb_unicode2ascii(MdbHandle *mdb, unsigned char *src, unsigned int slen, unsigne
unsigned int compress=1;
src += 2;
slen -= 2;
- tmp = (char *)g_malloc(slen*2);
+ tmp = (unsigned char *)g_malloc(slen*2);
while (slen) {
if (*src == 0) {
compress = (compress) ? 0 : 1;
@@ -61,8 +61,8 @@ mdb_unicode2ascii(MdbHandle *mdb, unsigned char *src, unsigned int slen, unsigne
}
}
- in_ptr = (tmp) ? tmp : src;
- out_ptr = dest;
+ in_ptr = (char *)((tmp) ? tmp : src);
+ out_ptr = (char *)dest;
len_in = (tmp) ? tlen : slen;
len_out = dlen;
@@ -111,9 +111,9 @@ mdb_ascii2unicode(MdbHandle *mdb, unsigned char *src, unsigned int slen, unsigne
if ((!src) || (!dest))
return 0;
- in_ptr = src;
- out_ptr = dest;
- len_in = (slen) ? slen : strlen(src);
+ in_ptr = (char *)src;
+ out_ptr = (char *)dest;
+ len_in = (slen) ? slen : strlen(in_ptr);
len_out = dlen;
#ifdef HAVE_ICONV
@@ -137,7 +137,7 @@ mdb_ascii2unicode(MdbHandle *mdb, unsigned char *src, unsigned int slen, unsigne
/* Unicode Compression */
if(IS_JET4(mdb) && (dlen>4)) {
- char *tmp = g_malloc(dlen);
+ unsigned char *tmp = g_malloc(dlen);
unsigned int tptr = 0, dptr = 0;
int comp = 1;
diff --git a/src/libmdb/table.c b/src/libmdb/table.c
index c1eefe3..3119432 100644
--- a/src/libmdb/table.c
+++ b/src/libmdb/table.c
@@ -77,10 +77,10 @@ MdbTableDef *mdb_read_table(MdbCatalogEntry *entry)
MdbHandle *mdb = entry->mdb;
MdbFormatConstants *fmt = mdb->fmt;
int len, row_start, pg_row;
- char *buf, *pg_buf = mdb->pg_buf;
+ void *buf, *pg_buf = mdb->pg_buf;
mdb_read_pg(mdb, entry->table_pg);
- if (pg_buf[0] != 0x02) /* not a valid table def page */
+ if (mdb_get_byte(pg_buf, 0) != 0x02) /* not a valid table def page */
return NULL;
table = mdb_alloc_tabledef(entry);
@@ -270,7 +270,7 @@ GPtrArray *mdb_read_columns(MdbTableDef *table)
** column names - ordered the same as the column attributes table
*/
for (i=0;i<table->num_cols;i++) {
- char *tmp_buf;
+ unsigned char *tmp_buf;
pcol = g_ptr_array_index(table->columns, i);
if (IS_JET4(mdb)) {
@@ -284,7 +284,7 @@ GPtrArray *mdb_read_columns(MdbTableDef *table)
fprintf(stderr,"Unknown MDB version\n");
continue;
}
- tmp_buf = (char *) g_malloc(name_sz);
+ tmp_buf = (unsigned char *) g_malloc(name_sz);
read_pg_if_n(mdb, tmp_buf, &cur_pos, name_sz);
mdb_unicode2ascii(mdb, tmp_buf, name_sz, pcol->name, MDB_MAX_OBJ_NAME);
g_free(tmp_buf);
diff --git a/src/libmdb/write.c b/src/libmdb/write.c
index eaabb9a..bfe8b0c 100644
--- a/src/libmdb/write.c
+++ b/src/libmdb/write.c
@@ -132,7 +132,7 @@ mdb_crack_row3(MdbHandle *mdb, int row_start, int row_end, unsigned int bitmask_
jumps_used = 0;
for (i=0; i<row_var_cols+1; i++) {
- if ((jumps_used < num_jumps)
+ while ((jumps_used < num_jumps)
&& (i == mdb->pg_buf[row_end-bitmask_sz-jumps_used-1])) {
jumps_used++;
}
diff --git a/src/util/prfreemap.c b/src/util/prfreemap.c
index 6420cc8..e0f9fca 100644
--- a/src/util/prfreemap.c
+++ b/src/util/prfreemap.c
@@ -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;
diff --git a/src/util/prindex.c b/src/util/prindex.c
index 738ffa1..5504d11 100644
--- a/src/util/prindex.c
+++ b/src/util/prindex.c
@@ -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;