annotate src/debug.c @ 118:0f1492b7fe8b

patch from Fridrich Strba for building on mingw and general cleanup of autoconf files add processing for pst files of type 0x0f start adding support for properly building and installing libpst.so and the header files required to use it. remove version.h since the version number is now in config.h more const correctness issues regarding getopt()
author Carl Byington <carl@five-ten-sg.com>
date Sat, 31 Jan 2009 12:12:36 -0800
parents 1fc33da23175
children bdb38b434c0a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
48
f66078abed38 more fixes for 64 bit format
carl
parents: 46
diff changeset
1
f66078abed38 more fixes for 64 bit format
carl
parents: 46
diff changeset
2 #include "define.h"
118
0f1492b7fe8b patch from Fridrich Strba for building on mingw and general cleanup of autoconf files
Carl Byington <carl@five-ten-sg.com>
parents: 101
diff changeset
3 //#include <stdint.h>
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
4
46
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
5 struct pst_debug_item {
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
6 int type;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
7 char * function;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
8 unsigned int line;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
9 char * file;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
10 char * text;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
11 struct pst_debug_item *next;
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
12 } *item_head=NULL, *item_tail=NULL, *item_ptr=NULL, *info_ptr=NULL, *temp_list=NULL;
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
13
33
12cac756bc05 enable -d option, but if not specified, don't generate a debug file
carl
parents: 31
diff changeset
14
46
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
15 struct pst_debug_func {
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
16 char * name;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
17 struct pst_debug_func *next;
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
18 } *func_head=NULL, *func_ptr=NULL;
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
19
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
20
73
3cb02cb1e6cd Patch from Robert Simpson to fix doubly-linked list in the cache_ptr code, and allow arrays of unicode strings (without converting them).
Carl Byington <carl@five-ten-sg.com>
parents: 70
diff changeset
21 void pst_debug_write_msg(struct pst_debug_item *item, const char *fmt, va_list *ap, int size);
3cb02cb1e6cd Patch from Robert Simpson to fix doubly-linked list in the cache_ptr code, and allow arrays of unicode strings (without converting them).
Carl Byington <carl@five-ten-sg.com>
parents: 70
diff changeset
22 void pst_debug_write_hex(struct pst_debug_item *item, char *buf, size_t size, int col);
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
23 void * xmalloc(size_t size);
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
24
73
3cb02cb1e6cd Patch from Robert Simpson to fix doubly-linked list in the cache_ptr code, and allow arrays of unicode strings (without converting them).
Carl Byington <carl@five-ten-sg.com>
parents: 70
diff changeset
25 size_t pst_debug_fwrite(const void *ptr, size_t size, size_t nitems, FILE *stream) {
3cb02cb1e6cd Patch from Robert Simpson to fix doubly-linked list in the cache_ptr code, and allow arrays of unicode strings (without converting them).
Carl Byington <carl@five-ten-sg.com>
parents: 70
diff changeset
26 return fwrite(ptr, size, nitems, stream);
3cb02cb1e6cd Patch from Robert Simpson to fix doubly-linked list in the cache_ptr code, and allow arrays of unicode strings (without converting them).
Carl Byington <carl@five-ten-sg.com>
parents: 70
diff changeset
27 }
3cb02cb1e6cd Patch from Robert Simpson to fix doubly-linked list in the cache_ptr code, and allow arrays of unicode strings (without converting them).
Carl Byington <carl@five-ten-sg.com>
parents: 70
diff changeset
28
3cb02cb1e6cd Patch from Robert Simpson to fix doubly-linked list in the cache_ptr code, and allow arrays of unicode strings (without converting them).
Carl Byington <carl@five-ten-sg.com>
parents: 70
diff changeset
29
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
30 // the largest text size we will store in memory. Otherwise we
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
31 // will do a debug_write, then create a new record, and write the
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
32 // text body directly to the file
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
33 #define MAX_MESSAGE_SIZE 4096
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
34
73
3cb02cb1e6cd Patch from Robert Simpson to fix doubly-linked list in the cache_ptr code, and allow arrays of unicode strings (without converting them).
Carl Byington <carl@five-ten-sg.com>
parents: 70
diff changeset
35 void pst_debug(const char *fmt, ...) {
46
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
36 va_list ap;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
37 va_start(ap,fmt);
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
38 vfprintf(stderr, fmt, ap);
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
39 va_end(ap);
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
40 }
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
41
33
12cac756bc05 enable -d option, but if not specified, don't generate a debug file
carl
parents: 31
diff changeset
42
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
43 #define NUM_COL 30
73
3cb02cb1e6cd Patch from Robert Simpson to fix doubly-linked list in the cache_ptr code, and allow arrays of unicode strings (without converting them).
Carl Byington <carl@five-ten-sg.com>
parents: 70
diff changeset
44 void pst_debug_hexdumper(FILE *out, char *buf, size_t size, int col, int delta) {
70
b12f4e50e2e8 Patch from Joachim Metz <joachim.metz@gmail.com> for 64 bit compile.
Carl Byington <carl@five-ten-sg.com>
parents: 48
diff changeset
45 size_t off = 0, toff;
46
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
46 int count = 0;
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
47
46
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
48 if (!out) return; // no file
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
49 if (col == -1) col = NUM_COL;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
50 fprintf(out, "\n");
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
51 while (off < size) {
90
631d02d30a1c More fixes for 32/64 bit portability on big endian ppc.
Carl Byington <carl@five-ten-sg.com>
parents: 79
diff changeset
52 fprintf(out, "%06"PRIx64"\t:", (uint64_t)(off+delta));
46
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
53 toff = off;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
54 while (count < col && off < size) {
73
3cb02cb1e6cd Patch from Robert Simpson to fix doubly-linked list in the cache_ptr code, and allow arrays of unicode strings (without converting them).
Carl Byington <carl@five-ten-sg.com>
parents: 70
diff changeset
55 fprintf(out, "%02hhx ", (unsigned char)buf[off]);
46
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
56 off++; count++;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
57 }
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
58 off = toff;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
59 while (count < col) {
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
60 // only happens at end of block to pad the text over to the text column
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
61 fprintf(out, " ");
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
62 count++;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
63 }
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
64 count = 0;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
65 fprintf(out, ":");
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
66 while (count < col && off < size) {
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
67 fprintf(out, "%c", isgraph(buf[off])?buf[off]:'.');
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
68 off++; count ++;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
69 }
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
70
46
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
71 fprintf(out, "\n");
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
72 count=0;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
73 }
33
12cac756bc05 enable -d option, but if not specified, don't generate a debug file
carl
parents: 31
diff changeset
74
46
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
75 fprintf(out, "\n");
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
76 }
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
77
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
78
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
79 FILE *debug_fp = NULL;
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
80 unsigned int max_items=DEBUG_MAX_ITEMS, curr_items=0;
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
81
33
12cac756bc05 enable -d option, but if not specified, don't generate a debug file
carl
parents: 31
diff changeset
82
73
3cb02cb1e6cd Patch from Robert Simpson to fix doubly-linked list in the cache_ptr code, and allow arrays of unicode strings (without converting them).
Carl Byington <carl@five-ten-sg.com>
parents: 70
diff changeset
83 void pst_debug_init(const char* fname) {
46
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
84 unsigned char version = DEBUG_VERSION;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
85 item_head = item_tail = NULL;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
86 curr_items = 0;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
87 if (debug_fp) pst_debug_close();
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
88 if (!fname) return;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
89 if ((debug_fp = fopen(fname, "wb")) == NULL) {
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
90 fprintf(stderr, "Opening of file %s failed\n", fname);
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
91 exit(1);
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
92 }
101
1fc33da23175 fix for orphan children when building descriptor tree, avoid writing uninitialized data to debug log file
Carl Byington <carl@five-ten-sg.com>
parents: 91
diff changeset
93 pst_debug_fwrite(&version, sizeof(char), 1, debug_fp);
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
94 }
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
95
33
12cac756bc05 enable -d option, but if not specified, don't generate a debug file
carl
parents: 31
diff changeset
96
46
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
97 // function must be called before pst_debug_msg. It sets up the
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
98 // structure for the function that follows
73
3cb02cb1e6cd Patch from Robert Simpson to fix doubly-linked list in the cache_ptr code, and allow arrays of unicode strings (without converting them).
Carl Byington <carl@five-ten-sg.com>
parents: 70
diff changeset
99 void pst_debug_msg_info(int line, const char* file, int type) {
46
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
100 char *x;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
101 if (!debug_fp) return; // no file
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
102 info_ptr = (struct pst_debug_item*) xmalloc(sizeof(struct pst_debug_item));
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
103 info_ptr->type = type;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
104 info_ptr->line = line;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
105 x = (func_head==NULL?"No Function":func_head->name);
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
106 info_ptr->function = (char*) xmalloc(strlen(x)+1);
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
107 strcpy(info_ptr->function, x);
33
12cac756bc05 enable -d option, but if not specified, don't generate a debug file
carl
parents: 31
diff changeset
108
46
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
109 info_ptr->file = (char*) xmalloc(strlen(file)+1);
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
110 strcpy(info_ptr->file, file);
33
12cac756bc05 enable -d option, but if not specified, don't generate a debug file
carl
parents: 31
diff changeset
111
46
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
112 //put the current record on a temp linked list
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
113 info_ptr->next = temp_list;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
114 temp_list = info_ptr;
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
115 }
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
116
33
12cac756bc05 enable -d option, but if not specified, don't generate a debug file
carl
parents: 31
diff changeset
117
73
3cb02cb1e6cd Patch from Robert Simpson to fix doubly-linked list in the cache_ptr code, and allow arrays of unicode strings (without converting them).
Carl Byington <carl@five-ten-sg.com>
parents: 70
diff changeset
118 void pst_debug_msg_text(const char* fmt, ...) {
46
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
119 va_list ap;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
120 int f, g;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
121 char x[2];
79
56fa05fd5271 Patch from Robert Simpson for encryption type 2.
Carl Byington <carl@five-ten-sg.com>
parents: 75
diff changeset
122 #ifdef _WIN32
56fa05fd5271 Patch from Robert Simpson for encryption type 2.
Carl Byington <carl@five-ten-sg.com>
parents: 75
diff changeset
123 char *buf = NULL;
56fa05fd5271 Patch from Robert Simpson for encryption type 2.
Carl Byington <carl@five-ten-sg.com>
parents: 75
diff changeset
124 #endif
46
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
125 struct pst_debug_item *temp;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
126 if (!debug_fp) return; // no file
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
127 // get the record off of the temp_list
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
128 info_ptr = temp_list;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
129 if (info_ptr)
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
130 temp_list = info_ptr->next;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
131 else {
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
132 fprintf(stderr, "NULL info_ptr. ERROR!!\n");
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
133 exit(-2);
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
134 }
75
987aa872294e Use ftello/fseeko to properly handle large files.
Carl Byington <carl@five-ten-sg.com>
parents: 73
diff changeset
135
987aa872294e Use ftello/fseeko to properly handle large files.
Carl Byington <carl@five-ten-sg.com>
parents: 73
diff changeset
136 #ifdef _WIN32
987aa872294e Use ftello/fseeko to properly handle large files.
Carl Byington <carl@five-ten-sg.com>
parents: 73
diff changeset
137 // vsnprintf trick doesn't work on msvc.
987aa872294e Use ftello/fseeko to properly handle large files.
Carl Byington <carl@five-ten-sg.com>
parents: 73
diff changeset
138 g = 2000;
987aa872294e Use ftello/fseeko to properly handle large files.
Carl Byington <carl@five-ten-sg.com>
parents: 73
diff changeset
139 f = -1;
987aa872294e Use ftello/fseeko to properly handle large files.
Carl Byington <carl@five-ten-sg.com>
parents: 73
diff changeset
140 while (f < 0) {
987aa872294e Use ftello/fseeko to properly handle large files.
Carl Byington <carl@five-ten-sg.com>
parents: 73
diff changeset
141 buf = realloc(buf, g+1);
987aa872294e Use ftello/fseeko to properly handle large files.
Carl Byington <carl@five-ten-sg.com>
parents: 73
diff changeset
142 va_start(ap, fmt);
987aa872294e Use ftello/fseeko to properly handle large files.
Carl Byington <carl@five-ten-sg.com>
parents: 73
diff changeset
143 f = vsnprintf(buf, g, fmt, ap);
987aa872294e Use ftello/fseeko to properly handle large files.
Carl Byington <carl@five-ten-sg.com>
parents: 73
diff changeset
144 va_end(ap);
987aa872294e Use ftello/fseeko to properly handle large files.
Carl Byington <carl@five-ten-sg.com>
parents: 73
diff changeset
145 g += g/2;
987aa872294e Use ftello/fseeko to properly handle large files.
Carl Byington <carl@five-ten-sg.com>
parents: 73
diff changeset
146 }
987aa872294e Use ftello/fseeko to properly handle large files.
Carl Byington <carl@five-ten-sg.com>
parents: 73
diff changeset
147 free(buf);
987aa872294e Use ftello/fseeko to properly handle large files.
Carl Byington <carl@five-ten-sg.com>
parents: 73
diff changeset
148 #else
987aa872294e Use ftello/fseeko to properly handle large files.
Carl Byington <carl@five-ten-sg.com>
parents: 73
diff changeset
149 // according to glibc 2.1, this should return the req. number of bytes for
987aa872294e Use ftello/fseeko to properly handle large files.
Carl Byington <carl@five-ten-sg.com>
parents: 73
diff changeset
150 // the string
987aa872294e Use ftello/fseeko to properly handle large files.
Carl Byington <carl@five-ten-sg.com>
parents: 73
diff changeset
151 va_start(ap, fmt);
987aa872294e Use ftello/fseeko to properly handle large files.
Carl Byington <carl@five-ten-sg.com>
parents: 73
diff changeset
152 f = vsnprintf(x, 1, fmt, ap);
987aa872294e Use ftello/fseeko to properly handle large files.
Carl Byington <carl@five-ten-sg.com>
parents: 73
diff changeset
153 va_end(ap);
987aa872294e Use ftello/fseeko to properly handle large files.
Carl Byington <carl@five-ten-sg.com>
parents: 73
diff changeset
154 #endif
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
155
46
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
156 if (f > 0 && f < MAX_MESSAGE_SIZE) {
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
157 info_ptr->text = (char*) xmalloc(f+1);
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
158 va_start(ap, fmt);
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
159 if ((g = vsnprintf(info_ptr->text, f, fmt, ap)) == -1) {
75
987aa872294e Use ftello/fseeko to properly handle large files.
Carl Byington <carl@five-ten-sg.com>
parents: 73
diff changeset
160 fprintf(stderr, "_debug_msg: Dying! vsnprintf returned -1 for format \"%s\"\n", fmt);
46
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
161 exit(-2);
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
162 }
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
163 va_end(ap);
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
164 info_ptr->text[g] = '\0';
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
165 if (f != g) {
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
166 fprintf(stderr, "_debug_msg: f != g\n");
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
167 }
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
168 } else if (f > 0) { // it is over the max_message_size then
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
169 f += strlen(info_ptr->file)+strlen(info_ptr->function);
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
170 temp = info_ptr;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
171 pst_debug_write(); // dump the current messages
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
172 info_ptr = temp;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
173 va_start(ap, fmt);
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
174 pst_debug_write_msg(info_ptr, fmt, &ap, f);
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
175 va_end(ap);
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
176 free(info_ptr->function);
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
177 free(info_ptr->file);
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
178 free(info_ptr);
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
179 info_ptr = NULL;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
180 return;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
181 } else {
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
182 fprintf(stderr, "_debug_msg: error getting requested size of debug message\n");
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
183 info_ptr->text = "ERROR Saving\n";
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
184 }
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
185
101
1fc33da23175 fix for orphan children when building descriptor tree, avoid writing uninitialized data to debug log file
Carl Byington <carl@five-ten-sg.com>
parents: 91
diff changeset
186 // add to the linked list of pending items
1fc33da23175 fix for orphan children when building descriptor tree, avoid writing uninitialized data to debug log file
Carl Byington <carl@five-ten-sg.com>
parents: 91
diff changeset
187 if (!item_head) item_head = info_ptr;
46
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
188 info_ptr->next = NULL;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
189 if (item_tail) item_tail->next = info_ptr;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
190 item_tail = info_ptr;
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
191
46
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
192 if (++curr_items == max_items) {
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
193 // here we will jump off and save the contents
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
194 pst_debug_write();
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
195 info_ptr = NULL;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
196 }
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
197 }
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
198
33
12cac756bc05 enable -d option, but if not specified, don't generate a debug file
carl
parents: 31
diff changeset
199
73
3cb02cb1e6cd Patch from Robert Simpson to fix doubly-linked list in the cache_ptr code, and allow arrays of unicode strings (without converting them).
Carl Byington <carl@five-ten-sg.com>
parents: 70
diff changeset
200 void pst_debug_hexdump(char *x, size_t y, int cols, int delta) {
46
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
201 struct pst_debug_item *temp;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
202 if (!debug_fp) return; // no file
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
203 info_ptr = temp_list;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
204 if (info_ptr) temp_list = info_ptr->next;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
205 temp = info_ptr;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
206 pst_debug_write();
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
207 info_ptr = temp;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
208 pst_debug_write_hex(info_ptr, x, y, cols);
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
209 free(info_ptr->function);
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
210 free(info_ptr->file);
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
211 free(info_ptr);
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
212 info_ptr = NULL;
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
213 }
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
214
33
12cac756bc05 enable -d option, but if not specified, don't generate a debug file
carl
parents: 31
diff changeset
215
73
3cb02cb1e6cd Patch from Robert Simpson to fix doubly-linked list in the cache_ptr code, and allow arrays of unicode strings (without converting them).
Carl Byington <carl@five-ten-sg.com>
parents: 70
diff changeset
216 void pst_debug_func(const char *function) {
46
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
217 func_ptr = xmalloc (sizeof(struct pst_debug_func));
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
218 func_ptr->name = xmalloc(strlen(function)+1);
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
219 strcpy(func_ptr->name, function);
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
220 func_ptr->next = func_head;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
221 func_head = func_ptr;
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
222 }
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
223
33
12cac756bc05 enable -d option, but if not specified, don't generate a debug file
carl
parents: 31
diff changeset
224
46
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
225 void pst_debug_func_ret() {
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
226 //remove the head item
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
227 func_ptr = func_head;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
228 if (func_head) {
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
229 func_head = func_head->next;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
230 free(func_ptr->name);
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
231 free(func_ptr);
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
232 } else {
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
233 DIE(("function list is empty!\n"));
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
234 }
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
235 }
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
236
33
12cac756bc05 enable -d option, but if not specified, don't generate a debug file
carl
parents: 31
diff changeset
237
46
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
238 void pst_debug_close(void) {
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
239 pst_debug_write();
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
240 while (func_head) {
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
241 func_ptr = func_head;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
242 func_head = func_head->next;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
243 free(func_ptr->name);
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
244 free(func_ptr);
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
245 }
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
246 if (debug_fp) fclose(debug_fp);
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
247 debug_fp = NULL;
33
12cac756bc05 enable -d option, but if not specified, don't generate a debug file
carl
parents: 31
diff changeset
248 }
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
249
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
250
46
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
251 void pst_debug_write() {
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
252 size_t size, ptr, funcname, filename, text, end;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
253 char *buf = NULL, rec_type;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
254 if (!debug_fp) return; // no file
75
987aa872294e Use ftello/fseeko to properly handle large files.
Carl Byington <carl@five-ten-sg.com>
parents: 73
diff changeset
255 off_t index_pos = ftello(debug_fp);
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 37
diff changeset
256 off_t file_pos = index_pos;
46
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
257 // add 2. One for the pointer to the next index,
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
258 // one for the count of this index
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
259 int index_size = ((curr_items+2) * sizeof(off_t));
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
260 off_t *index;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
261 int index_ptr = 0;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
262 struct pst_debug_file_rec_m mfile_rec;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
263 struct pst_debug_file_rec_l lfile_rec;
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
264
46
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
265 if (curr_items == 0) return; // no items to write.
33
12cac756bc05 enable -d option, but if not specified, don't generate a debug file
carl
parents: 31
diff changeset
266
46
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
267 index = (off_t*)xmalloc(index_size);
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
268 memset(index, 0, index_size); // valgrind, avoid writing uninitialized data
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
269 file_pos += index_size;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
270 // write the index first, we will re-write it later, but
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
271 // we want to allocate the space
73
3cb02cb1e6cd Patch from Robert Simpson to fix doubly-linked list in the cache_ptr code, and allow arrays of unicode strings (without converting them).
Carl Byington <carl@five-ten-sg.com>
parents: 70
diff changeset
272 pst_debug_fwrite(index, index_size, 1, debug_fp);
46
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
273 index[index_ptr++] = curr_items;
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
274
46
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
275 item_ptr = item_head;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
276 while (item_ptr) {
75
987aa872294e Use ftello/fseeko to properly handle large files.
Carl Byington <carl@five-ten-sg.com>
parents: 73
diff changeset
277 file_pos = ftello(debug_fp);
46
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
278 index[index_ptr++] = file_pos;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
279 size = strlen(item_ptr->function) +
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
280 strlen(item_ptr->file) +
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
281 strlen(item_ptr->text) + 3; //for the three \0s
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
282 if (buf) free(buf);
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
283 buf = xmalloc(size+1);
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
284 ptr = 0;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
285 funcname=ptr;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
286 ptr += sprintf(&(buf[ptr]), "%s", item_ptr->function)+1;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
287 filename=ptr;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
288 ptr += sprintf(&(buf[ptr]), "%s", item_ptr->file)+1;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
289 text=ptr;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
290 ptr += sprintf(&(buf[ptr]), "%s", item_ptr->text)+1;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
291 end=ptr;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
292 if (end > USHRT_MAX) { // bigger than can be stored in a short
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
293 rec_type = 'L';
101
1fc33da23175 fix for orphan children when building descriptor tree, avoid writing uninitialized data to debug log file
Carl Byington <carl@five-ten-sg.com>
parents: 91
diff changeset
294 pst_debug_fwrite(&rec_type, sizeof(char), 1, debug_fp);
1fc33da23175 fix for orphan children when building descriptor tree, avoid writing uninitialized data to debug log file
Carl Byington <carl@five-ten-sg.com>
parents: 91
diff changeset
295 lfile_rec.type = item_ptr->type;
1fc33da23175 fix for orphan children when building descriptor tree, avoid writing uninitialized data to debug log file
Carl Byington <carl@five-ten-sg.com>
parents: 91
diff changeset
296 lfile_rec.line = item_ptr->line;
46
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
297 lfile_rec.funcname = funcname;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
298 lfile_rec.filename = filename;
101
1fc33da23175 fix for orphan children when building descriptor tree, avoid writing uninitialized data to debug log file
Carl Byington <carl@five-ten-sg.com>
parents: 91
diff changeset
299 lfile_rec.text = text;
1fc33da23175 fix for orphan children when building descriptor tree, avoid writing uninitialized data to debug log file
Carl Byington <carl@five-ten-sg.com>
parents: 91
diff changeset
300 lfile_rec.end = end;
73
3cb02cb1e6cd Patch from Robert Simpson to fix doubly-linked list in the cache_ptr code, and allow arrays of unicode strings (without converting them).
Carl Byington <carl@five-ten-sg.com>
parents: 70
diff changeset
301 pst_debug_fwrite(&lfile_rec, sizeof(lfile_rec), 1, debug_fp);
46
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
302 } else {
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
303 rec_type = 'M';
101
1fc33da23175 fix for orphan children when building descriptor tree, avoid writing uninitialized data to debug log file
Carl Byington <carl@five-ten-sg.com>
parents: 91
diff changeset
304 pst_debug_fwrite(&rec_type, sizeof(char), 1, debug_fp);
1fc33da23175 fix for orphan children when building descriptor tree, avoid writing uninitialized data to debug log file
Carl Byington <carl@five-ten-sg.com>
parents: 91
diff changeset
305 mfile_rec.type = item_ptr->type;
1fc33da23175 fix for orphan children when building descriptor tree, avoid writing uninitialized data to debug log file
Carl Byington <carl@five-ten-sg.com>
parents: 91
diff changeset
306 mfile_rec.line = item_ptr->line;
46
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
307 mfile_rec.funcname = funcname;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
308 mfile_rec.filename = filename;
101
1fc33da23175 fix for orphan children when building descriptor tree, avoid writing uninitialized data to debug log file
Carl Byington <carl@five-ten-sg.com>
parents: 91
diff changeset
309 mfile_rec.text = text;
1fc33da23175 fix for orphan children when building descriptor tree, avoid writing uninitialized data to debug log file
Carl Byington <carl@five-ten-sg.com>
parents: 91
diff changeset
310 mfile_rec.end = end;
73
3cb02cb1e6cd Patch from Robert Simpson to fix doubly-linked list in the cache_ptr code, and allow arrays of unicode strings (without converting them).
Carl Byington <carl@five-ten-sg.com>
parents: 70
diff changeset
311 pst_debug_fwrite(&mfile_rec, sizeof(mfile_rec), 1, debug_fp);
46
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
312 }
101
1fc33da23175 fix for orphan children when building descriptor tree, avoid writing uninitialized data to debug log file
Carl Byington <carl@five-ten-sg.com>
parents: 91
diff changeset
313 pst_debug_fwrite(buf, ptr, 1, debug_fp);
46
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
314 if (buf) free(buf); buf = NULL;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
315 item_head = item_ptr->next;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
316 free(item_ptr->function);
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
317 free(item_ptr->file);
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
318 free(item_ptr->text);
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
319 free(item_ptr);
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
320 item_ptr = item_head;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
321 }
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
322 curr_items = 0;
75
987aa872294e Use ftello/fseeko to properly handle large files.
Carl Byington <carl@five-ten-sg.com>
parents: 73
diff changeset
323 index[index_ptr] = ftello(debug_fp);
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
324
46
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
325 // we should now have a complete index
75
987aa872294e Use ftello/fseeko to properly handle large files.
Carl Byington <carl@five-ten-sg.com>
parents: 73
diff changeset
326 fseeko(debug_fp, index_pos, SEEK_SET);
73
3cb02cb1e6cd Patch from Robert Simpson to fix doubly-linked list in the cache_ptr code, and allow arrays of unicode strings (without converting them).
Carl Byington <carl@five-ten-sg.com>
parents: 70
diff changeset
327 pst_debug_fwrite(index, index_size, 1, debug_fp);
75
987aa872294e Use ftello/fseeko to properly handle large files.
Carl Byington <carl@five-ten-sg.com>
parents: 73
diff changeset
328 fseeko(debug_fp, 0, SEEK_END);
46
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
329 item_ptr = item_head = item_tail = NULL;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
330 free(index);
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
331 if (buf) free(buf);
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
332 }
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
333
33
12cac756bc05 enable -d option, but if not specified, don't generate a debug file
carl
parents: 31
diff changeset
334
73
3cb02cb1e6cd Patch from Robert Simpson to fix doubly-linked list in the cache_ptr code, and allow arrays of unicode strings (without converting them).
Carl Byington <carl@five-ten-sg.com>
parents: 70
diff changeset
335 void pst_debug_write_msg(struct pst_debug_item *item, const char *fmt, va_list *ap, int size) {
46
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
336 struct pst_debug_file_rec_l lfile_rec;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
337 struct pst_debug_file_rec_m mfile_rec;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
338 unsigned char rec_type;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
339 int index_size = 3 * sizeof(off_t);
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
340 off_t index[3];
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
341 off_t index_pos, file_pos;
101
1fc33da23175 fix for orphan children when building descriptor tree, avoid writing uninitialized data to debug log file
Carl Byington <carl@five-ten-sg.com>
parents: 91
diff changeset
342 char zero = '\0';
46
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
343 unsigned int end;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
344 if (!debug_fp) return; // no file
101
1fc33da23175 fix for orphan children when building descriptor tree, avoid writing uninitialized data to debug log file
Carl Byington <carl@five-ten-sg.com>
parents: 91
diff changeset
345 index[0] = 1; // only one item in this index
1fc33da23175 fix for orphan children when building descriptor tree, avoid writing uninitialized data to debug log file
Carl Byington <carl@five-ten-sg.com>
parents: 91
diff changeset
346 index[1] = 0; // valgrind, avoid writing uninitialized data
1fc33da23175 fix for orphan children when building descriptor tree, avoid writing uninitialized data to debug log file
Carl Byington <carl@five-ten-sg.com>
parents: 91
diff changeset
347 index[2] = 0; // ""
75
987aa872294e Use ftello/fseeko to properly handle large files.
Carl Byington <carl@five-ten-sg.com>
parents: 73
diff changeset
348 index_pos = ftello(debug_fp);
73
3cb02cb1e6cd Patch from Robert Simpson to fix doubly-linked list in the cache_ptr code, and allow arrays of unicode strings (without converting them).
Carl Byington <carl@five-ten-sg.com>
parents: 70
diff changeset
349 pst_debug_fwrite(index, index_size, 1, debug_fp);
33
12cac756bc05 enable -d option, but if not specified, don't generate a debug file
carl
parents: 31
diff changeset
350
75
987aa872294e Use ftello/fseeko to properly handle large files.
Carl Byington <carl@five-ten-sg.com>
parents: 73
diff changeset
351 index[1] = ftello(debug_fp);
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
352
46
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
353 if (size > USHRT_MAX) { // bigger than can be stored in a short
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
354 rec_type = 'L';
101
1fc33da23175 fix for orphan children when building descriptor tree, avoid writing uninitialized data to debug log file
Carl Byington <carl@five-ten-sg.com>
parents: 91
diff changeset
355 pst_debug_fwrite(&rec_type, sizeof(char), 1, debug_fp);
1fc33da23175 fix for orphan children when building descriptor tree, avoid writing uninitialized data to debug log file
Carl Byington <carl@five-ten-sg.com>
parents: 91
diff changeset
356 lfile_rec.type = item->type;
1fc33da23175 fix for orphan children when building descriptor tree, avoid writing uninitialized data to debug log file
Carl Byington <carl@five-ten-sg.com>
parents: 91
diff changeset
357 lfile_rec.line = item->line;
46
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
358 lfile_rec.funcname = 0;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
359 lfile_rec.filename = strlen(item->function)+1;
101
1fc33da23175 fix for orphan children when building descriptor tree, avoid writing uninitialized data to debug log file
Carl Byington <carl@five-ten-sg.com>
parents: 91
diff changeset
360 lfile_rec.text = lfile_rec.filename+strlen(item->file)+1;
1fc33da23175 fix for orphan children when building descriptor tree, avoid writing uninitialized data to debug log file
Carl Byington <carl@five-ten-sg.com>
parents: 91
diff changeset
361 lfile_rec.end = 0; // valgrind, avoid writing uninitialized data
73
3cb02cb1e6cd Patch from Robert Simpson to fix doubly-linked list in the cache_ptr code, and allow arrays of unicode strings (without converting them).
Carl Byington <carl@five-ten-sg.com>
parents: 70
diff changeset
362 pst_debug_fwrite(&lfile_rec, sizeof(lfile_rec), 1, debug_fp);
46
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
363 } else {
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
364 rec_type = 'M';
101
1fc33da23175 fix for orphan children when building descriptor tree, avoid writing uninitialized data to debug log file
Carl Byington <carl@five-ten-sg.com>
parents: 91
diff changeset
365 pst_debug_fwrite(&rec_type, sizeof(char), 1, debug_fp);
1fc33da23175 fix for orphan children when building descriptor tree, avoid writing uninitialized data to debug log file
Carl Byington <carl@five-ten-sg.com>
parents: 91
diff changeset
366 mfile_rec.type = item->type;
1fc33da23175 fix for orphan children when building descriptor tree, avoid writing uninitialized data to debug log file
Carl Byington <carl@five-ten-sg.com>
parents: 91
diff changeset
367 mfile_rec.line = item->line;
46
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
368 mfile_rec.funcname = 0;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
369 mfile_rec.filename = strlen(item->function)+1;
101
1fc33da23175 fix for orphan children when building descriptor tree, avoid writing uninitialized data to debug log file
Carl Byington <carl@five-ten-sg.com>
parents: 91
diff changeset
370 mfile_rec.text = mfile_rec.filename+strlen(item->file)+1;
1fc33da23175 fix for orphan children when building descriptor tree, avoid writing uninitialized data to debug log file
Carl Byington <carl@five-ten-sg.com>
parents: 91
diff changeset
371 mfile_rec.end = 0; // valgrind, avoid writing uninitialized data
73
3cb02cb1e6cd Patch from Robert Simpson to fix doubly-linked list in the cache_ptr code, and allow arrays of unicode strings (without converting them).
Carl Byington <carl@five-ten-sg.com>
parents: 70
diff changeset
372 pst_debug_fwrite(&mfile_rec, sizeof(mfile_rec), 1, debug_fp);
46
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
373 }
75
987aa872294e Use ftello/fseeko to properly handle large files.
Carl Byington <carl@five-ten-sg.com>
parents: 73
diff changeset
374 file_pos = ftello(debug_fp);
73
3cb02cb1e6cd Patch from Robert Simpson to fix doubly-linked list in the cache_ptr code, and allow arrays of unicode strings (without converting them).
Carl Byington <carl@five-ten-sg.com>
parents: 70
diff changeset
375 pst_debug_fwrite(item->function, strlen(item->function)+1, 1, debug_fp);
3cb02cb1e6cd Patch from Robert Simpson to fix doubly-linked list in the cache_ptr code, and allow arrays of unicode strings (without converting them).
Carl Byington <carl@five-ten-sg.com>
parents: 70
diff changeset
376 pst_debug_fwrite(item->file, strlen(item->file)+1, 1, debug_fp);
46
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
377 vfprintf(debug_fp, fmt, *ap);
73
3cb02cb1e6cd Patch from Robert Simpson to fix doubly-linked list in the cache_ptr code, and allow arrays of unicode strings (without converting them).
Carl Byington <carl@five-ten-sg.com>
parents: 70
diff changeset
378 pst_debug_fwrite(&zero, 1, 1, debug_fp);
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
379
75
987aa872294e Use ftello/fseeko to properly handle large files.
Carl Byington <carl@five-ten-sg.com>
parents: 73
diff changeset
380 end = (unsigned int) (ftello(debug_fp) - file_pos);
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
381
75
987aa872294e Use ftello/fseeko to properly handle large files.
Carl Byington <carl@five-ten-sg.com>
parents: 73
diff changeset
382 index[2] = ftello(debug_fp);
987aa872294e Use ftello/fseeko to properly handle large files.
Carl Byington <carl@five-ten-sg.com>
parents: 73
diff changeset
383 fseeko(debug_fp, index_pos, SEEK_SET);
73
3cb02cb1e6cd Patch from Robert Simpson to fix doubly-linked list in the cache_ptr code, and allow arrays of unicode strings (without converting them).
Carl Byington <carl@five-ten-sg.com>
parents: 70
diff changeset
384 pst_debug_fwrite(index, index_size, 1, debug_fp);
46
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
385 if (size > USHRT_MAX) {
101
1fc33da23175 fix for orphan children when building descriptor tree, avoid writing uninitialized data to debug log file
Carl Byington <carl@five-ten-sg.com>
parents: 91
diff changeset
386 pst_debug_fwrite(&rec_type, sizeof(char), 1, debug_fp);
46
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
387 lfile_rec.end = end;
73
3cb02cb1e6cd Patch from Robert Simpson to fix doubly-linked list in the cache_ptr code, and allow arrays of unicode strings (without converting them).
Carl Byington <carl@five-ten-sg.com>
parents: 70
diff changeset
388 pst_debug_fwrite(&lfile_rec, sizeof(lfile_rec), 1, debug_fp);
46
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
389 } else {
101
1fc33da23175 fix for orphan children when building descriptor tree, avoid writing uninitialized data to debug log file
Carl Byington <carl@five-ten-sg.com>
parents: 91
diff changeset
390 pst_debug_fwrite(&rec_type, sizeof(char), 1, debug_fp);
46
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
391 mfile_rec.end = end;
73
3cb02cb1e6cd Patch from Robert Simpson to fix doubly-linked list in the cache_ptr code, and allow arrays of unicode strings (without converting them).
Carl Byington <carl@five-ten-sg.com>
parents: 70
diff changeset
392 pst_debug_fwrite(&mfile_rec, sizeof(mfile_rec), 1, debug_fp);
46
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
393 }
75
987aa872294e Use ftello/fseeko to properly handle large files.
Carl Byington <carl@five-ten-sg.com>
parents: 73
diff changeset
394 fseeko(debug_fp, 0, SEEK_END);
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
395 }
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
396
33
12cac756bc05 enable -d option, but if not specified, don't generate a debug file
carl
parents: 31
diff changeset
397
73
3cb02cb1e6cd Patch from Robert Simpson to fix doubly-linked list in the cache_ptr code, and allow arrays of unicode strings (without converting them).
Carl Byington <carl@five-ten-sg.com>
parents: 70
diff changeset
398 void pst_debug_write_hex(struct pst_debug_item *item, char *buf, size_t size, int col) {
46
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
399 struct pst_debug_file_rec_l lfile_rec;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
400 unsigned char rec_type;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
401 int index_size = 3 * sizeof(off_t);
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
402 off_t index_pos, file_pos, index[3];
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
403 char zero='\0';
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
404 if (!debug_fp) return; // no file
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
405 index[0] = 1; // only one item in this index run
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
406 index[1] = 0; // valgrind, avoid writing uninitialized data
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
407 index[2] = 0; // ""
75
987aa872294e Use ftello/fseeko to properly handle large files.
Carl Byington <carl@five-ten-sg.com>
parents: 73
diff changeset
408 index_pos = ftello(debug_fp);
73
3cb02cb1e6cd Patch from Robert Simpson to fix doubly-linked list in the cache_ptr code, and allow arrays of unicode strings (without converting them).
Carl Byington <carl@five-ten-sg.com>
parents: 70
diff changeset
409 pst_debug_fwrite(index, index_size, 1, debug_fp);
75
987aa872294e Use ftello/fseeko to properly handle large files.
Carl Byington <carl@five-ten-sg.com>
parents: 73
diff changeset
410 index[1] = ftello(debug_fp);
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
411
46
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
412 // always use the long
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
413 rec_type = 'L';
101
1fc33da23175 fix for orphan children when building descriptor tree, avoid writing uninitialized data to debug log file
Carl Byington <carl@five-ten-sg.com>
parents: 91
diff changeset
414 pst_debug_fwrite(&rec_type, sizeof(char), 1, debug_fp);
46
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
415 lfile_rec.funcname = 0;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
416 lfile_rec.filename = strlen(item->function)+1;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
417 lfile_rec.text = lfile_rec.filename+strlen(item->file)+1;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
418 lfile_rec.end = 0; // valgrind, avoid writing uninitialized data
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
419 lfile_rec.line = item->line;
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
420 lfile_rec.type = item->type;
73
3cb02cb1e6cd Patch from Robert Simpson to fix doubly-linked list in the cache_ptr code, and allow arrays of unicode strings (without converting them).
Carl Byington <carl@five-ten-sg.com>
parents: 70
diff changeset
421 pst_debug_fwrite(&lfile_rec, sizeof(lfile_rec), 1, debug_fp);
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
422
75
987aa872294e Use ftello/fseeko to properly handle large files.
Carl Byington <carl@five-ten-sg.com>
parents: 73
diff changeset
423 file_pos = ftello(debug_fp);
73
3cb02cb1e6cd Patch from Robert Simpson to fix doubly-linked list in the cache_ptr code, and allow arrays of unicode strings (without converting them).
Carl Byington <carl@five-ten-sg.com>
parents: 70
diff changeset
424 pst_debug_fwrite(item->function, strlen(item->function)+1, 1, debug_fp);
3cb02cb1e6cd Patch from Robert Simpson to fix doubly-linked list in the cache_ptr code, and allow arrays of unicode strings (without converting them).
Carl Byington <carl@five-ten-sg.com>
parents: 70
diff changeset
425 pst_debug_fwrite(item->file, strlen(item->file)+1, 1, debug_fp);
33
12cac756bc05 enable -d option, but if not specified, don't generate a debug file
carl
parents: 31
diff changeset
426
46
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
427 pst_debug_hexdumper(debug_fp, buf, size, col, 0);
73
3cb02cb1e6cd Patch from Robert Simpson to fix doubly-linked list in the cache_ptr code, and allow arrays of unicode strings (without converting them).
Carl Byington <carl@five-ten-sg.com>
parents: 70
diff changeset
428 pst_debug_fwrite(&zero, 1, 1, debug_fp);
75
987aa872294e Use ftello/fseeko to properly handle large files.
Carl Byington <carl@five-ten-sg.com>
parents: 73
diff changeset
429 lfile_rec.end = ftello(debug_fp) - file_pos;
33
12cac756bc05 enable -d option, but if not specified, don't generate a debug file
carl
parents: 31
diff changeset
430
75
987aa872294e Use ftello/fseeko to properly handle large files.
Carl Byington <carl@five-ten-sg.com>
parents: 73
diff changeset
431 index[2] = ftello(debug_fp);
987aa872294e Use ftello/fseeko to properly handle large files.
Carl Byington <carl@five-ten-sg.com>
parents: 73
diff changeset
432 fseeko(debug_fp, index_pos, SEEK_SET);
73
3cb02cb1e6cd Patch from Robert Simpson to fix doubly-linked list in the cache_ptr code, and allow arrays of unicode strings (without converting them).
Carl Byington <carl@five-ten-sg.com>
parents: 70
diff changeset
433 pst_debug_fwrite(index, index_size, 1, debug_fp);
101
1fc33da23175 fix for orphan children when building descriptor tree, avoid writing uninitialized data to debug log file
Carl Byington <carl@five-ten-sg.com>
parents: 91
diff changeset
434 pst_debug_fwrite(&rec_type, sizeof(char), 1, debug_fp);
73
3cb02cb1e6cd Patch from Robert Simpson to fix doubly-linked list in the cache_ptr code, and allow arrays of unicode strings (without converting them).
Carl Byington <carl@five-ten-sg.com>
parents: 70
diff changeset
435 pst_debug_fwrite(&lfile_rec, sizeof(lfile_rec), 1, debug_fp);
75
987aa872294e Use ftello/fseeko to properly handle large files.
Carl Byington <carl@five-ten-sg.com>
parents: 73
diff changeset
436 fseeko(debug_fp, 0, SEEK_END);
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
437 }
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
438
33
12cac756bc05 enable -d option, but if not specified, don't generate a debug file
carl
parents: 31
diff changeset
439
36
6fe121a971c9 valgrind fixes
carl
parents: 35
diff changeset
440 void *xmalloc(size_t size) {
46
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
441 void *mem = malloc(size);
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
442 if (!mem) {
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
443 fprintf(stderr, "xMalloc: Out Of memory [req: %ld]\n", (long)size);
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
444 exit(1);
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
445 }
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 43
diff changeset
446 return mem;
33
12cac756bc05 enable -d option, but if not specified, don't generate a debug file
carl
parents: 31
diff changeset
447 }
12cac756bc05 enable -d option, but if not specified, don't generate a debug file
carl
parents: 31
diff changeset
448