blob: 75d3871047546d54614a74694d86ffea1d22bbb3 (
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
|
/* tagspace engine
* -scut
*/
typedef struct ts_tag {
struct ts_tag * next;
unsigned int rel;
unsigned int len;
} ts_tag;
ts_tag *
ts_add (ts_tag *t, unsigned int rel, unsigned int len)
{
ts_tag * w;
for (w = t ; w != NULL ; w = w->next) {
if (w->rel <= rel && (w->rel + w->len) >= (rel + len))
return (t); /* already in */
/* case 1: a part of rel is already in the tag */
if (w->rel <= rel && (w->rel + w->len) >= rel) {
w->len = rel + len - w->rel;
return (t);
}
/* case 2: end of rel cuts tag */
/* XXX: TODO: FIXME */
}
w = calloc (1, sizeof (ts_tag));
w->next = t;
w->rel = rel;
w->len = len;
return (w);
}
|