mirror of
https://github.com/mdbtools/mdbtools.git
synced 2025-11-26 02:09:49 +08:00
Fix several lockups, leaks, and warnings
This commit is contained in:
@@ -1,3 +1,7 @@
|
|||||||
|
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>
|
Thu Jun 16 21:19:37 CDT 2005 Jeff Smith <whydoubt@yahoo.com>
|
||||||
* src/libmdb/data.c: Fix segmentation fault
|
* src/libmdb/data.c: Fix segmentation fault
|
||||||
* src/libmdb/write.c: Fix bug in handling certain 'jump tables'
|
* src/libmdb/write.c: Fix bug in handling certain 'jump tables'
|
||||||
|
|||||||
@@ -44,7 +44,6 @@ static void gmdb_debug_clear(GladeXML *xml);
|
|||||||
static void gmdb_debug_dissect(GtkTreeStore *store, char *fbuf, int offset, int len);
|
static void gmdb_debug_dissect(GtkTreeStore *store, char *fbuf, int offset, int len);
|
||||||
static guint16 get_uint16(unsigned char *c);
|
static guint16 get_uint16(unsigned char *c);
|
||||||
static guint32 get_uint32(unsigned char *c);
|
static guint32 get_uint32(unsigned char *c);
|
||||||
static gchar *gmdb_strappend(gchar *x, gchar *y);
|
|
||||||
static long gmdb_get_max_page(MdbHandle *mdb);
|
static long gmdb_get_max_page(MdbHandle *mdb);
|
||||||
static void gmdb_debug_display(GladeXML *xml, guint32 page);
|
static void gmdb_debug_display(GladeXML *xml, guint32 page);
|
||||||
static void gmdb_debug_jump(GladeXML *xml, int msb);
|
static void gmdb_debug_jump(GladeXML *xml, int msb);
|
||||||
@@ -56,8 +55,8 @@ typedef struct GMdbValStr {
|
|||||||
} GMdbValStr;
|
} GMdbValStr;
|
||||||
|
|
||||||
GMdbValStr table_types[] = {
|
GMdbValStr table_types[] = {
|
||||||
{ 0x4e, "User Table" },
|
{ 0x4e, "User" },
|
||||||
{ 0x53, "System Table" },
|
{ 0x53, "System" },
|
||||||
{ 0, NULL }
|
{ 0, NULL }
|
||||||
};
|
};
|
||||||
GMdbValStr column_types[] = {
|
GMdbValStr column_types[] = {
|
||||||
@@ -78,11 +77,11 @@ GMdbValStr column_types[] = {
|
|||||||
{ 0, NULL }
|
{ 0, NULL }
|
||||||
};
|
};
|
||||||
GMdbValStr object_types[] = {
|
GMdbValStr object_types[] = {
|
||||||
{ 0x00, "Database Definition Page" },
|
{ 0x00, "Database Definition" },
|
||||||
{ 0x01, "Data Page" },
|
{ 0x01, "Data" },
|
||||||
{ 0x02, "Table Definition Page" },
|
{ 0x02, "Table Definition" },
|
||||||
{ 0x03, "Index Page" },
|
{ 0x03, "Index" },
|
||||||
{ 0x04, "Leaf Index Page" },
|
{ 0x04, "Leaf Index" },
|
||||||
{ 0, NULL }
|
{ 0, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -90,36 +89,35 @@ GMdbValStr object_types[] = {
|
|||||||
static void
|
static void
|
||||||
gmdb_debug_select_cb(GtkTreeSelection *select, GladeXML *xml)
|
gmdb_debug_select_cb(GtkTreeSelection *select, GladeXML *xml)
|
||||||
{
|
{
|
||||||
int start_row, end_row;
|
int start_row, end_row;
|
||||||
int start_col, end_col;
|
int start_col, end_col;
|
||||||
int i;
|
GtkTreeIter iter;
|
||||||
GtkTreeIter iter;
|
GtkTreeModel *model;
|
||||||
GtkTreeModel *model;
|
gint32 start, end, len;
|
||||||
gint32 start, end;
|
GtkWidget *textview;
|
||||||
GtkWidget *textview;
|
gchar *fieldname;
|
||||||
|
|
||||||
if (!select) return;
|
textview = glade_xml_get_widget (xml, "debug_textview");
|
||||||
|
gmdb_debug_text_off(textview);
|
||||||
|
|
||||||
if (gtk_tree_selection_get_selected (select, &model, &iter)) {
|
if (!select)
|
||||||
gchar *fieldname;
|
return;
|
||||||
gint32 len;
|
if (!gtk_tree_selection_get_selected (select, &model, &iter))
|
||||||
gtk_tree_model_get (model, &iter, 0, &fieldname,
|
return;
|
||||||
1, &start,
|
|
||||||
2, &len, -1);
|
|
||||||
end = start + len - 1;
|
|
||||||
g_free (fieldname);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (start == -1 || end == -1) 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);
|
start_row = LINESZ * (start / 16);
|
||||||
end_row = LINESZ * (end / 16);
|
end_row = LINESZ * (end / 16);
|
||||||
start_col = 8 + (start % 16) * 3;
|
start_col = 8 + (start % 16) * 3;
|
||||||
end_col = 8 + (end % 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) {
|
if (start_row == end_row) {
|
||||||
gmdb_debug_text_on(textview,
|
gmdb_debug_text_on(textview,
|
||||||
start_row + start_col,
|
start_row + start_col,
|
||||||
@@ -128,6 +126,7 @@ GtkWidget *textview;
|
|||||||
start_row + 59 + (start % 16),
|
start_row + 59 + (start % 16),
|
||||||
start_row + 59 + (end % 16) + 1);
|
start_row + 59 + (end % 16) + 1);
|
||||||
} else {
|
} else {
|
||||||
|
int i;
|
||||||
gmdb_debug_text_on(textview,
|
gmdb_debug_text_on(textview,
|
||||||
start_row + start_col,
|
start_row + start_col,
|
||||||
/* 55 = 8 (addr) + 15 (bytes) * 3 (%02x " ") + 2 (last byte) */
|
/* 55 = 8 (addr) + 15 (bytes) * 3 (%02x " ") + 2 (last byte) */
|
||||||
@@ -389,13 +388,6 @@ gmdb_debug_display(GladeXML *xml, guint32 page)
|
|||||||
g_free(tbuf);
|
g_free(tbuf);
|
||||||
}
|
}
|
||||||
/* functions */
|
/* functions */
|
||||||
static gchar *
|
|
||||||
gmdb_strappend(gchar *x, gchar *y)
|
|
||||||
{
|
|
||||||
gchar *z = g_strconcat(x, y);
|
|
||||||
g_free(x);
|
|
||||||
return z;
|
|
||||||
}
|
|
||||||
static long
|
static long
|
||||||
gmdb_get_max_page(MdbHandle *mdb)
|
gmdb_get_max_page(MdbHandle *mdb)
|
||||||
{
|
{
|
||||||
@@ -483,20 +475,16 @@ gmdb_debug_dissect_index2(GtkTreeStore *store, GtkTreeIter *parent, char *fbuf,
|
|||||||
gmdb_debug_add_item(store, parent, str, offset+34, 4);
|
gmdb_debug_add_item(store, parent, str, offset+34, 4);
|
||||||
|
|
||||||
flags = fbuf[offset+38];
|
flags = fbuf[offset+38];
|
||||||
str = g_strdup("Index Flags (");
|
str = g_strconcat("Index Flags:",
|
||||||
if (flags & MDB_IDX_UNIQUE) {
|
(flags & MDB_IDX_UNIQUE) ? " Unique" : "",
|
||||||
str = gmdb_strappend(str, "Unique"); mod++;
|
(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_IGNORENULLS) {
|
|
||||||
if (mod) str = gmdb_strappend(str, ",");
|
|
||||||
str = gmdb_strappend(str, "Ignore Nulls"); mod++;
|
|
||||||
}
|
|
||||||
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);
|
gmdb_debug_add_item(store, parent, str, offset+38, 1);
|
||||||
}
|
}
|
||||||
static void
|
static void
|
||||||
@@ -577,7 +565,7 @@ gmdb_debug_dissect_leaf_pg(GtkTreeStore *store, char *fbuf, int offset, int len)
|
|||||||
guint32 temp;
|
guint32 temp;
|
||||||
|
|
||||||
temp = get_uint32(fbuf+offset+4);
|
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);
|
(unsigned long)temp);
|
||||||
gmdb_debug_add_item(store, NULL, str, offset+4, 4);
|
gmdb_debug_add_item(store, NULL, str, offset+4, 4);
|
||||||
|
|
||||||
@@ -690,8 +678,8 @@ gmdb_debug_dissect_tabledef_pg4(GtkTreeStore *store, char *fbuf, int offset, int
|
|||||||
{
|
{
|
||||||
gchar *str;
|
gchar *str;
|
||||||
guint32 i, num_idx, num_cols, idx_entries;
|
guint32 i, num_idx, num_cols, idx_entries;
|
||||||
int newbase;
|
int newbase, infobase;
|
||||||
GtkTreeIter *node, *container;
|
GtkTreeIter *container;
|
||||||
char *foff = fbuf + offset;
|
char *foff = fbuf + offset;
|
||||||
|
|
||||||
str = g_strdup_printf("Next TDEF Page: 0x%06x (%lu)",
|
str = g_strdup_printf("Next TDEF Page: 0x%06x (%lu)",
|
||||||
@@ -700,7 +688,7 @@ gmdb_debug_dissect_tabledef_pg4(GtkTreeStore *store, char *fbuf, int offset, int
|
|||||||
str = g_strdup_printf("Length of Data: %lu",
|
str = g_strdup_printf("Length of Data: %lu",
|
||||||
(unsigned long)get_uint32(foff+8));
|
(unsigned long)get_uint32(foff+8));
|
||||||
gmdb_debug_add_item(store, NULL, str, offset+8, 4);
|
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));
|
(unsigned long)get_uint32(foff+16));
|
||||||
gmdb_debug_add_item(store, NULL, str, offset+16, 4);
|
gmdb_debug_add_item(store, NULL, str, offset+16, 4);
|
||||||
str = g_strdup_printf("Autonumber Value: %lu",
|
str = g_strdup_printf("Autonumber Value: %lu",
|
||||||
@@ -709,19 +697,19 @@ gmdb_debug_dissect_tabledef_pg4(GtkTreeStore *store, char *fbuf, int offset, int
|
|||||||
str = g_strdup_printf("Table Type: 0x%02x (%s)", foff[40],
|
str = g_strdup_printf("Table Type: 0x%02x (%s)", foff[40],
|
||||||
gmdb_val_to_str(table_types, foff[40]));
|
gmdb_val_to_str(table_types, foff[40]));
|
||||||
gmdb_debug_add_item(store, NULL, str, offset+40, 1);
|
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);
|
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);
|
gmdb_debug_add_item(store, NULL, str, offset+43, 2);
|
||||||
num_cols = get_uint16(foff+45);
|
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);
|
gmdb_debug_add_item(store, NULL, str, offset+45, 2);
|
||||||
idx_entries = get_uint32(foff+47);
|
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);
|
(unsigned long)idx_entries);
|
||||||
gmdb_debug_add_item(store, NULL, str, offset+47, 4);
|
gmdb_debug_add_item(store, NULL, str, offset+47, 4);
|
||||||
num_idx = get_uint32(foff+51);
|
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);
|
(unsigned long)num_idx);
|
||||||
gmdb_debug_add_item(store, NULL, str, offset+51, 4);
|
gmdb_debug_add_item(store, NULL, str, offset+51, 4);
|
||||||
|
|
||||||
@@ -729,39 +717,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);
|
gmdb_debug_add_page_ptr(store, NULL, fbuf, "Pages Freespace Pointer", offset+59);
|
||||||
newbase = offset+63;
|
newbase = offset+63;
|
||||||
|
|
||||||
str = g_strdup("Index Entries");
|
if (num_idx > 0) {
|
||||||
container = gmdb_debug_add_item(store, NULL, str, -1, 1);
|
str = g_strdup("Index Entries");
|
||||||
|
container = gmdb_debug_add_item(store, NULL, str, -1, 0);
|
||||||
|
}
|
||||||
for (i=0;i<num_idx;i++) {
|
for (i=0;i<num_idx;i++) {
|
||||||
|
GtkTreeIter *node;
|
||||||
str = g_strdup_printf("Index %d", i+1);
|
str = g_strdup_printf("Index %d", i+1);
|
||||||
node = gmdb_debug_add_item(store, container, str, newbase, 12);
|
node = gmdb_debug_add_item(store, container, str, newbase, 12);
|
||||||
//gmdb_debug_dissect_index1(store, node, fbuf, offset+63);
|
//gmdb_debug_dissect_index1(store, node, fbuf, offset+63);
|
||||||
newbase += 12;
|
newbase += 12;
|
||||||
}
|
}
|
||||||
|
|
||||||
str = g_strdup("Column Data");
|
infobase = newbase;
|
||||||
container = gmdb_debug_add_item(store, NULL, str, -1, 1);
|
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++) {
|
for (i=0;i<num_cols;i++) {
|
||||||
str = g_strdup_printf("Column %d", i+1);
|
GtkTreeIter *node, *subnode;
|
||||||
node = gmdb_debug_add_item(store, container, str, newbase, 25);
|
// char *tmpstr;
|
||||||
//gmdb_debug_dissect_column(store, node, fbuf, newbase);
|
|
||||||
newbase += 25;
|
|
||||||
}
|
|
||||||
|
|
||||||
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;
|
int namelen;
|
||||||
|
|
||||||
|
str = g_strdup_printf("Column %d", i+1);
|
||||||
|
node = gmdb_debug_add_item(store, container, str, -1, 0);
|
||||||
|
|
||||||
|
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);
|
namelen = get_uint16(fbuf+newbase);
|
||||||
// tmpstr = g_malloc(namelen + 1);
|
// tmpstr = g_malloc(namelen + 1);
|
||||||
// strncpy(tmpstr, &fbuf[newbase+1], namelen);
|
// strncpy(tmpstr, &fbuf[newbase+1], namelen);
|
||||||
// tmpstr[namelen]=0;
|
// tmpstr[namelen]=0;
|
||||||
// str = g_strdup_printf("Column %d: %s", i+1, tmpstr);
|
// str = g_strdup_printf("Column %d: %s", i+1, tmpstr);
|
||||||
// g_free(tmpstr);
|
// g_free(tmpstr);
|
||||||
str = g_strdup_printf("Column %d", i+1);
|
gmdb_debug_add_item(store, node, str, newbase+2, namelen);
|
||||||
node = gmdb_debug_add_item(store, container, str,
|
|
||||||
newbase+2, namelen);
|
|
||||||
newbase += namelen+2;
|
newbase += namelen+2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -810,7 +802,7 @@ gmdb_debug_dissect_tabledef_pg3(GtkTreeStore *store, char *fbuf, int offset, int
|
|||||||
newbase = offset + 43;
|
newbase = offset + 43;
|
||||||
|
|
||||||
str = g_strdup("Index Entries");
|
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++) {
|
for (i=0;i<num_idx;i++) {
|
||||||
str = g_strdup_printf("Index %d", i+1);
|
str = g_strdup_printf("Index %d", i+1);
|
||||||
node = gmdb_debug_add_item(store, container, str, newbase, 8);
|
node = gmdb_debug_add_item(store, container, str, newbase, 8);
|
||||||
@@ -819,7 +811,7 @@ gmdb_debug_dissect_tabledef_pg3(GtkTreeStore *store, char *fbuf, int offset, int
|
|||||||
}
|
}
|
||||||
|
|
||||||
str = g_strdup("Column Data");
|
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++) {
|
for (i=0;i<num_cols;i++) {
|
||||||
str = g_strdup_printf("Column %d", i+1);
|
str = g_strdup_printf("Column %d", i+1);
|
||||||
node = gmdb_debug_add_item(store, container, str, newbase, 18);
|
node = gmdb_debug_add_item(store, container, str, newbase, 18);
|
||||||
@@ -828,7 +820,7 @@ gmdb_debug_dissect_tabledef_pg3(GtkTreeStore *store, char *fbuf, int offset, int
|
|||||||
}
|
}
|
||||||
|
|
||||||
str = g_strdup("Column Names");
|
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++) {
|
for (i=0;i<num_cols;i++) {
|
||||||
char *tmpstr;
|
char *tmpstr;
|
||||||
int namelen;
|
int namelen;
|
||||||
@@ -844,7 +836,7 @@ gmdb_debug_dissect_tabledef_pg3(GtkTreeStore *store, char *fbuf, int offset, int
|
|||||||
newbase += namelen + 1;
|
newbase += namelen + 1;
|
||||||
}
|
}
|
||||||
str = g_strdup("Index definition 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++) {
|
for (i=0;i<num_idx;i++) {
|
||||||
str = g_strdup_printf("Index %d", i+1);
|
str = g_strdup_printf("Index %d", i+1);
|
||||||
node = gmdb_debug_add_item(store, container, str, newbase, 39);
|
node = gmdb_debug_add_item(store, container, str, newbase, 39);
|
||||||
@@ -852,7 +844,7 @@ gmdb_debug_dissect_tabledef_pg3(GtkTreeStore *store, char *fbuf, int offset, int
|
|||||||
newbase += 39;
|
newbase += 39;
|
||||||
}
|
}
|
||||||
str = g_strdup("Index definition 2");
|
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++) {
|
for (i=0;i<idx_entries;i++) {
|
||||||
str = g_strdup_printf("Index %d", i+1);
|
str = g_strdup_printf("Index %d", i+1);
|
||||||
node = gmdb_debug_add_item(store, container, str, newbase, 20);
|
node = gmdb_debug_add_item(store, container, str, newbase, 20);
|
||||||
@@ -860,7 +852,7 @@ gmdb_debug_dissect_tabledef_pg3(GtkTreeStore *store, char *fbuf, int offset, int
|
|||||||
}
|
}
|
||||||
|
|
||||||
str = g_strdup("Index Names");
|
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++) {
|
for (i=0;i<idx_entries;i++) {
|
||||||
char *tmpstr;
|
char *tmpstr;
|
||||||
int namelen;
|
int namelen;
|
||||||
@@ -889,7 +881,7 @@ gmdb_debug_dissect(GtkTreeStore *store, char *fbuf, int offset, int len)
|
|||||||
{
|
{
|
||||||
gchar *str;
|
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_val_to_str(object_types, fbuf[offset]));
|
||||||
gmdb_debug_add_item(store, NULL, str, 0, 1);
|
gmdb_debug_add_item(store, NULL, str, 0, 1);
|
||||||
switch (fbuf[offset]) {
|
switch (fbuf[offset]) {
|
||||||
@@ -947,44 +939,29 @@ static void
|
|||||||
gmdb_debug_text_on(GtkWidget *textbox,
|
gmdb_debug_text_on(GtkWidget *textbox,
|
||||||
int start_byte, int end_byte)
|
int start_byte, int end_byte)
|
||||||
{
|
{
|
||||||
GtkTextBuffer *buffer;
|
GtkTextBuffer *buffer;
|
||||||
GtkTextTag *tag;
|
GtkTextIter start, end;
|
||||||
GtkTextIter start, end;
|
|
||||||
|
|
||||||
buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (textbox));
|
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, &start, start_byte);
|
||||||
gtk_text_buffer_get_iter_at_offset (buffer, &end, end_byte);
|
gtk_text_buffer_get_iter_at_offset (buffer, &end, end_byte);
|
||||||
gtk_text_view_scroll_to_iter(GTK_TEXT_VIEW(textbox),
|
gtk_text_view_scroll_to_iter(GTK_TEXT_VIEW(textbox),
|
||||||
&start, 0.0, FALSE, 0.0, 0.0);
|
&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
|
static void
|
||||||
gmdb_debug_text_off(GtkWidget *textbox)
|
gmdb_debug_text_off(GtkWidget *textbox)
|
||||||
{
|
{
|
||||||
GtkTextBuffer *buffer;
|
GtkTextBuffer *buffer;
|
||||||
GtkTextTag *tag;
|
int end_byte;
|
||||||
int end_byte;
|
GtkTextIter start, end;
|
||||||
GtkTextIter start, end;
|
|
||||||
|
|
||||||
buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (textbox));
|
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);
|
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, &start, 0);
|
||||||
gtk_text_buffer_get_iter_at_offset (buffer, &end, end_byte);
|
gtk_text_buffer_get_iter_at_offset (buffer, &end, end_byte);
|
||||||
|
gtk_text_buffer_remove_all_tags (buffer, &start, &end);
|
||||||
gtk_text_buffer_apply_tag (buffer, tag, &start, &end);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static gint
|
static gint
|
||||||
@@ -1089,7 +1066,8 @@ gmdb_debug_set_dissect_cb(GtkWidget *w, gpointer data)
|
|||||||
static void gmdb_debug_init(MdbHandle *mdb, GladeXML *xml)
|
static void gmdb_debug_init(MdbHandle *mdb, GladeXML *xml)
|
||||||
{
|
{
|
||||||
gchar *str;
|
gchar *str;
|
||||||
GtkWidget *pglabel, *entry, *window;
|
GtkWidget *pglabel, *entry, *window, *textview;
|
||||||
|
GtkTextBuffer *buffer;
|
||||||
gboolean *dissect;
|
gboolean *dissect;
|
||||||
|
|
||||||
pglabel = glade_xml_get_widget (xml, "debug_num_label");
|
pglabel = glade_xml_get_widget (xml, "debug_num_label");
|
||||||
@@ -1104,4 +1082,9 @@ static void gmdb_debug_init(MdbHandle *mdb, GladeXML *xml)
|
|||||||
dissect = g_malloc0(sizeof(guint));
|
dissect = g_malloc0(sizeof(guint));
|
||||||
*dissect = TRUE;
|
*dissect = TRUE;
|
||||||
g_object_set_data(G_OBJECT(window), "dissect", dissect);
|
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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -191,7 +191,6 @@
|
|||||||
<property name="tooltip" translatable="yes">Back</property>
|
<property name="tooltip" translatable="yes">Back</property>
|
||||||
<property name="stock-id">gtk-go-back</property>
|
<property name="stock-id">gtk-go-back</property>
|
||||||
<signal name="clicked" handler="gmdb_debug_back_cb" object="debug_window"/>
|
<signal name="clicked" handler="gmdb_debug_back_cb" object="debug_window"/>
|
||||||
<property name="new_group">True</property>
|
|
||||||
</widget>
|
</widget>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="new_group">True</property>
|
<property name="new_group">True</property>
|
||||||
@@ -222,7 +221,6 @@
|
|||||||
<property name="tooltip" translatable="yes">Close window</property>
|
<property name="tooltip" translatable="yes">Close window</property>
|
||||||
<property name="stock-id">gtk-close</property>
|
<property name="stock-id">gtk-close</property>
|
||||||
<signal name="clicked" handler="gmdb_debug_close_cb" object="debug_window"/>
|
<signal name="clicked" handler="gmdb_debug_close_cb" object="debug_window"/>
|
||||||
<property name="new_group">True</property>
|
|
||||||
</widget>
|
</widget>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="new_group">True</property>
|
<property name="new_group">True</property>
|
||||||
|
|||||||
Reference in New Issue
Block a user