]> git.pld-linux.org Git - packages/avahi.git/blame - avahi-core-reserve-space-for-record-data-when-size-estimate.patch
add compat-libdns_sd strict dep on -libs
[packages/avahi.git] / avahi-core-reserve-space-for-record-data-when-size-estimate.patch
CommitLineData
4a7813ac
AM
1--- a/avahi-core/dns.c
2+++ b/avahi-core/dns.c
3@@ -55,6 +55,7 @@
4
5 p->size = p->rindex = AVAHI_DNS_PACKET_HEADER_SIZE;
6 p->max_size = max_size;
7+ p->res_size = 0;
8 p->name_table = NULL;
9 p->data = NULL;
10
11@@ -833,6 +834,25 @@
12 return p->max_size - p->size;
13 }
14
15+size_t avahi_dns_packet_reserve_size(AvahiDnsPacket *p, size_t res_size) {
16+ assert(p);
17+
18+ assert(p->size + p->res_size <= p->max_size);
19+
20+ if ((p->size + p->res_size + res_size) <= p->max_size)
21+ p->res_size += res_size;
22+
23+ return p->res_size;
24+}
25+
26+size_t avahi_dns_packet_reserved_space(AvahiDnsPacket *p) {
27+ assert(p);
28+
29+ assert(p->size + p->res_size <= p->max_size);
30+
31+ return p->max_size - p->size - p->res_size;
32+}
33+
34 int avahi_rdata_parse(AvahiRecord *record, const void* rdata, size_t size) {
35 int ret;
36 AvahiDnsPacket p;
37--- a/avahi-core/dns.h
38+++ b/avahi-core/dns.h
39@@ -30,7 +30,7 @@
40 #define AVAHI_DNS_PACKET_SIZE_MAX (AVAHI_DNS_PACKET_HEADER_SIZE + 256 + 2 + 2 + 4 + 2 + AVAHI_DNS_RDATA_MAX)
41
42 typedef struct AvahiDnsPacket {
43- size_t size, rindex, max_size;
44+ size_t size, rindex, max_size, res_size;
45 AvahiHashmap *name_table; /* for name compression */
46 uint8_t *data;
47 } AvahiDnsPacket;
48@@ -78,6 +78,8 @@
49
50 int avahi_dns_packet_is_empty(AvahiDnsPacket *p);
51 size_t avahi_dns_packet_space(AvahiDnsPacket *p);
52+size_t avahi_dns_packet_reserve_size(AvahiDnsPacket *p, size_t res_size);
53+size_t avahi_dns_packet_reserved_space(AvahiDnsPacket *p);
54
55 #define AVAHI_DNS_FIELD_ID 0
56 #define AVAHI_DNS_FIELD_FLAGS 1
57--- a/avahi-core/probe-sched.c
58+++ b/avahi-core/probe-sched.c
59@@ -179,7 +179,7 @@
60 avahi_record_get_estimate_size(pj->record);
61
62 /* Too large */
63- if (size > avahi_dns_packet_space(p))
64+ if (size > avahi_dns_packet_reserved_space(p))
65 return 0;
66
67 /* Create the probe query */
68@@ -189,6 +189,9 @@
69 b = !!avahi_dns_packet_append_key(p, k, 0);
70 assert(b);
71
72+ /* reserve size for record data */
73+ avahi_dns_packet_reserve_size(p, avahi_record_get_estimate_size(pj->record));
74+
75 /* Mark this job for addition to the packet */
76 pj->chosen = 1;
77
78@@ -202,9 +205,12 @@
79 continue;
80
81 /* This job wouldn't fit in */
82- if (avahi_record_get_estimate_size(pj->record) > avahi_dns_packet_space(p))
83+ if (avahi_record_get_estimate_size(pj->record) > avahi_dns_packet_reserved_space(p))
84 break;
85
86+ /* reserve size for record data */
87+ avahi_dns_packet_reserve_size(p, avahi_record_get_estimate_size(pj->record));
88+
89 /* Mark this job for addition to the packet */
90 pj->chosen = 1;
91 }
This page took 0.097565 seconds and 4 git commands to generate.