-
Notifications
You must be signed in to change notification settings - Fork 0
/
tnt_structs.h
135 lines (126 loc) · 3.51 KB
/
tnt_structs.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#ifndef __TNT_STRUCTS_H__
#define __TNT_STRUCTS_H__
//#include <stdlib.h>
#define MAX_LEN 256
#define STACK_SIZE 102400
Int myStringArray_getIndex( struct myStringArray *a, const HChar* string );
Int myStringArray_push( struct myStringArray *a, const HChar* string );
//Stack of strings---------------------------------------
struct myStringArray{
char m[STACK_SIZE][MAX_LEN];
int size;
// int get_index(char *string){
// for(int i = 0; i < size; i++ ){
// if( strstr(m[i], string) != NULL && strstr(string, m[i]) != NULL )
// return i;
// }
// //msg( "get_index: string %s not found\n", string );
// return -1;
// };
// void push( char *item ){
// if( size >= STACK_SIZE ){
// VG_(printf)("***Error - myStringArray.push: max stack limit reached %d\n", STACK_SIZE);
// return;
// }
//
// qsnprintf( m[size], MAX_LEN-1, "%s", item );
// size++;
// }
// // Same as push, but only unique strings. No copies allowed
// // returns: true if unique, false if already found
// bool pushUnique( char *item ){
//
// for(int i = 0; i < size; i++ ){
// if( strstr( m[i], item ) != NULL &&
// strstr( item, m[i] ) != NULL ){
// return false;
// }
// }
//
// push( item );
// return true;
// }
// char *pop( void ){
// size--;
// return m[size];
// }
// void chop( char *string ){
// char *p = string;
//
// while( *p != '\0' ){
// p++;
// }
//
// if( p != string ){
// *(p-1) = '\0';
// }
// }
};
Int myStringArray_getIndex(struct myStringArray *a, const HChar* string){
int i;
for( i = 0; i < a->size; i++ ){
if( VG_(strstr)(a->m[i], string) != NULL && VG_(strstr)(string, a->m[i]) != NULL )
return i;
}
//msg( "get_index: string %s not found\n", string );
return -1;
};
Int myStringArray_push( struct myStringArray *a, const HChar* string ){
Int idx;
if( a->size >= STACK_SIZE ){
VG_(printf)("***Error - myStringArray.push: max stack limit reached %d\n", STACK_SIZE);
//exit(-1);
return -1;
}
// check if it already exists
if ((idx = myStringArray_getIndex(a, string)) == -1) {
VG_(snprintf)( a->m[a->size], MAX_LEN-1, "%s", string );
idx = a->size;
a->size++;
}
return idx;
}
//End Stack of strings---------------------------------------------------
////Stack of addresses-----------------------------------------------------
//struct eaArray{
// ea_t m[STACK_SIZE];
// int size;
// int get_index(ea_t addr){
// for(int i = 0; i < size; i++ ){
// if( addr == m[i] )
// return i;
// }
// return -1;
// };
//
// void push( ea_t item ){
// if( size >= STACK_SIZE ){
// msg("***Error - eaArray.push: max stack limit reached %d\n", STACK_SIZE);
// return;
// }
//
// m[size] = item;
// size++;
// }
//
// // Same as push, but only unique items. No copies allowed
// // returns: true if unique, false if already found
// bool pushUnique( ea_t item ){
//
// for(int i = 0; i < size; i++ ){
// if( m[i] == item ){
// return false;
// }
// }
//
// push( item );
// return true;
// }
//
// ea_t pop( void ){
// size--;
// return m[size];
// }
//};
//End Stack of Addresses----------------------------------
#endif