Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download
7640 views
1
#include "mupdf/fitz.h"
2
3
void
4
fz_drop_link_dest(fz_context *ctx, fz_link_dest *dest)
5
{
6
switch (dest->kind)
7
{
8
case FZ_LINK_NONE:
9
case FZ_LINK_GOTO:
10
break;
11
case FZ_LINK_URI:
12
fz_free(ctx, dest->ld.uri.uri);
13
break;
14
case FZ_LINK_LAUNCH:
15
fz_free(ctx, dest->ld.launch.file_spec);
16
break;
17
case FZ_LINK_NAMED:
18
fz_free(ctx, dest->ld.named.named);
19
break;
20
case FZ_LINK_GOTOR:
21
fz_free(ctx, dest->ld.gotor.file_spec);
22
break;
23
}
24
}
25
26
fz_link *
27
fz_new_link(fz_context *ctx, const fz_rect *bbox, fz_link_dest dest)
28
{
29
fz_link *link;
30
31
fz_try(ctx)
32
{
33
link = fz_malloc_struct(ctx, fz_link);
34
link->refs = 1;
35
}
36
fz_catch(ctx)
37
{
38
fz_drop_link_dest(ctx, &dest);
39
fz_rethrow(ctx);
40
}
41
link->dest = dest;
42
link->rect = *bbox;
43
link->next = NULL;
44
return link;
45
}
46
47
fz_link *
48
fz_keep_link(fz_context *ctx, fz_link *link)
49
{
50
if (link)
51
link->refs++;
52
return link;
53
}
54
55
void
56
fz_drop_link(fz_context *ctx, fz_link *link)
57
{
58
while (link && --link->refs == 0)
59
{
60
fz_link *next = link->next;
61
fz_drop_link_dest(ctx, &link->dest);
62
fz_free(ctx, link);
63
link = next;
64
}
65
}
66
67