]> git.pld-linux.org Git - packages/avahi.git/blob - avahi-core-reserve-space-for-record-data-when-size-estimate.patch
drop all Upstart hacks
[packages/avahi.git] / avahi-core-reserve-space-for-record-data-when-size-estimate.patch
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.033195 seconds and 3 git commands to generate.