OSDN Git Service

delete png_set_gAMA
[swfed/swfed.git] / src / swf_debug.c
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4
5 // #include "swf_define.h" no include
6
7 int swf_debug = 0;
8
9 // #define MALLOC_DEBUG_TABLE_NUM 0x20000
10 #define MALLOC_DEBUG_TABLE_NUM 0x40000
11
12 static struct malloc_debug_ {
13     void *ptr;
14     char *filename;
15     int  linenum;
16 } malloc_debug_table[MALLOC_DEBUG_TABLE_NUM];
17
18 static int malloc_debug_stack = 0;
19
20 void
21 malloc_debug_start(void) {
22     int i;
23     malloc_debug_stack ++;
24     if (malloc_debug_stack > 1) {
25         fprintf(stderr, "malloc_debug_start: malloc_debug_stack=%d\n", malloc_debug_stack);
26         return ;
27     }
28     for (i=0 ; i < MALLOC_DEBUG_TABLE_NUM ; i++) {
29         malloc_debug_table[i].ptr = NULL;
30     }
31     fprintf(stderr, "malloc_debug_start: 0/n=0/%d\n", MALLOC_DEBUG_TABLE_NUM);
32 }
33
34 void
35 malloc_debug_end(void) {
36     int i, j = 0;
37     malloc_debug_stack --;
38     if (malloc_debug_stack > 0) {
39         fprintf(stderr, "malloc_debug_end: malloc_debug_stack=%d\n", malloc_debug_stack);
40         return ;
41     }
42     for (i=0 ; i < MALLOC_DEBUG_TABLE_NUM ; i++) {
43         if (malloc_debug_table[i].ptr) {
44             fprintf(stderr, "XXX (%d) ptr=%p (%s, %d)\n",
45                     i, malloc_debug_table[i].ptr,
46                     malloc_debug_table[i].filename,
47                     malloc_debug_table[i].linenum);
48             j = i + 1;
49         }
50     }
51     fprintf(stderr, "malloc_debug_end: j/n=%d/%d\n", j, MALLOC_DEBUG_TABLE_NUM);
52 }
53
54 void *
55 calloc_debug(size_t nmemb, size_t size, char *filename, int linenum) {
56     int i;
57     void *ptr;
58     ptr = calloc(nmemb, size);
59 //    fprintf(stderr, "calloc_debug: ptr=%p (%s,%d)\n", ptr, filename, linenum);
60     for (i=0 ; i < MALLOC_DEBUG_TABLE_NUM ; i++) {
61         if (malloc_debug_table[i].ptr == NULL) {
62             malloc_debug_table[i].ptr = ptr;
63             malloc_debug_table[i].filename = filename;
64             malloc_debug_table[i].linenum = linenum;
65             break;
66         }
67     }
68     return ptr;
69 }
70
71 void *
72 malloc_debug(size_t size, char *filename, int linenum) {
73     int i;
74     void *ptr;
75     ptr = malloc(size);
76 //    fprintf(stderr, "malloc_debug: ptr=%p (%s,%d)\n", ptr, filename, linenum);
77     for (i=0 ; i < MALLOC_DEBUG_TABLE_NUM ; i++) {
78         if (malloc_debug_table[i].ptr == NULL) {
79             malloc_debug_table[i].ptr = ptr;
80             malloc_debug_table[i].filename = filename;
81             malloc_debug_table[i].linenum = linenum;
82 //            fprintf(stderr, "(%d)\n", i);
83             return ptr;
84         }
85     }
86     fprintf(stderr, "malloc: table full... ;_;\n");
87     return ptr;
88 }
89
90 void
91 free_debug(void *ptr, char *filename, int linenum) {
92     int i;
93 //    fprintf(stderr, "free_debug: ptr=%p (%s,%d)\n", ptr, filename, linenum);
94     for (i=0 ; i < MALLOC_DEBUG_TABLE_NUM ; i++) {
95         if (malloc_debug_table[i].ptr == ptr) {
96             malloc_debug_table[i].ptr = NULL;
97             break;
98         }
99     }
100     if (i == MALLOC_DEBUG_TABLE_NUM) {
101         fprintf(stderr, "free non-allocated memory: ptr=%p (%s,%d)\n", ptr,
102                 filename, linenum);
103         malloc_debug_end();
104         char *p = ptr;
105         *p = 0;
106     }
107     free(ptr);
108 }
109
110 void *
111 realloc_debug(void *ptr, size_t size, char *filename, int linenum) {
112     int i;
113     void *new_ptr;
114     new_ptr = realloc(ptr, size);
115     if (new_ptr == ptr) {
116         return new_ptr;
117     }
118 //    fprintf(stderr, "realloc_debug: ptr=%p => new_ptr=%p (%s,%d)\n",
119 //            ptr, new_ptr, filename, linenum);
120     for (i=0 ; i < MALLOC_DEBUG_TABLE_NUM ; i++) {
121         if (malloc_debug_table[i].ptr == ptr) {
122             malloc_debug_table[i].ptr = new_ptr;
123             malloc_debug_table[i].filename = filename;
124             malloc_debug_table[i].linenum = linenum;
125             break;
126         }
127     }
128     return new_ptr;
129 }
130
131 #define HEXBIN_DISP_UNIT 0x10
132
133 void
134 print_hexbin(unsigned char *data, int data_len) {
135     int i;
136     printf("\n");
137     for (i=0 ; i < data_len ; i++) {
138         if ((i%HEXBIN_DISP_UNIT) == 0) {
139             printf("0x%08x: ", i);
140         }
141 #if 1
142         printf("%02x ", data[i] & 0xff);
143         if ((i%HEXBIN_DISP_UNIT) == HEXBIN_DISP_UNIT-1) {
144             printf("\n");
145         }
146 #else
147         do {
148             unsigned char c = data[i];
149             signed int j;
150             if ((i%HEXBIN_DISP_UNIT) == 0) {
151                 printf("\n");
152             }
153             for (j=7 ; j >= 0 ; j--) {
154                 printf("%d", (c >> j) & 1);
155
156             }
157             printf("\n");
158         } while(0);
159 #endif
160     }
161     printf("\n");
162     return ;
163 }