blob: 15040485a5b2c990084df13a490e07801b8ea20e [file] [log] [blame]
Nguyen Anh Quynh26ee41a2013-11-27 12:11:31 +08001/* Capstone Disassembler Engine */
2/* By Nguyen Anh Quynh <aquynh@gmail.com>, 2013> */
3
4#include <string.h>
5
6#include "utils.h"
7
Nguyen Anh Quynhbed90912013-12-13 18:28:38 +08008// return the position of a string in a list of strings
9// or -1 if given string is not in the list
10int str_in_list(char **list, char *s)
Nguyen Anh Quynh26ee41a2013-11-27 12:11:31 +080011{
12 char **l;
13
Nguyen Anh Quynhbed90912013-12-13 18:28:38 +080014 int c = 0;
15 for(l = list; *l; c++, l++) {
Nguyen Anh Quynh26ee41a2013-11-27 12:11:31 +080016 if (!strcasecmp(*l, s))
Nguyen Anh Quynhbed90912013-12-13 18:28:38 +080017 return c;
18 }
Nguyen Anh Quynh26ee41a2013-11-27 12:11:31 +080019
Nguyen Anh Quynhbed90912013-12-13 18:28:38 +080020 return -1;
Nguyen Anh Quynh26ee41a2013-11-27 12:11:31 +080021}
22
23// binary searching
24int insn_find(insn_map *m, unsigned int max, unsigned int id)
25{
26 unsigned int i, begin, end;
27
28 begin = 0;
29 end = max;
30
31 while(begin <= end) {
32 i = (begin + end) / 2;
33 if (id == m[i].id)
34 return i;
35 else if (id < m[i].id)
36 end = i - 1;
37 else
38 begin = i + 1;
39 }
40
41 // found nothing
42 return -1;
43}
44
pancakef0e4eed2013-12-11 22:14:42 +010045int name2id(name_map* map, int max, const char *name)
Nguyen Anh Quynh26ee41a2013-11-27 12:11:31 +080046{
47 int i;
48
49 for (i = 0; i < max; i++) {
50 if (!strcasecmp(map[i].name, name)) {
51 return map[i].id;
52 }
53 }
54
55 // nothing match
56 return -1;
57}
58
59unsigned int insn_reverse_id(insn_map *insns, unsigned int max, unsigned int id)
60{
61 unsigned int i;
62
63 for (i = 0; i < max; i++) {
64 if (id == insns[i].mapid)
65 return insns[i].id;
66 }
67
68 // found nothing
69 return 0;
70}
71
Nguyen Anh Quynhf35e2ad2013-12-03 11:10:26 +080072// count number of positive members in a list.
73// NOTE: list must be guaranteed to end in 0
Nguyen Anh Quynh18103e42013-12-20 17:35:15 +080074unsigned int count_positive(unsigned char *list)
Nguyen Anh Quynhf35e2ad2013-12-03 11:10:26 +080075{
76 unsigned int c;
77
78 for (c = 0; list[c] > 0; c++);
79
80 return c;
81}