blob: e6ef2d7d54d287306438affe14741e4f1b4e7277 (
plain)
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
|
/* { dg-do run } */
/* { dg-options "-O1 -fno-inline" } */
/* { dg-require-effective-target int32plus } */
extern void abort (void);
static int something;
static int * converterData[2]={
&something, &something,
};
static struct {
const char *name;
int type;
} const cnvNameType[] = {
{ "bocu1", 1 },
{ "utf7", 1 },
{ "utf8", 1 }
};
const int * getAlgorithmicTypeFromName(const char *realName);
const int *
getAlgorithmicTypeFromName(const char *realName)
{
unsigned mid, start, limit;
unsigned lastMid;
int result;
start = 0;
limit = sizeof(cnvNameType)/sizeof(cnvNameType[0]);
mid = limit;
lastMid = 0xffffffff;
for (;;) {
mid = (start + limit) / 2;
if (lastMid == mid) { /* Have we moved? */
break; /* We haven't moved, and it wasn't found. */
}
lastMid = mid;
result = __builtin_strcmp(realName, cnvNameType[mid].name);
if (result < 0) {
limit = mid;
} else if (result > 0) {
start = mid;
} else {
return converterData[cnvNameType[mid].type];
}
}
return 0;
}
int main (void)
{
if (!getAlgorithmicTypeFromName ("utf8"))
abort ();
return 0;
}
|