--- avahi-0.5/avahi-core/dns.c.orig 2005-09-23 16:35:02 +0200 +++ avahi-0.5/avahi-core/dns.c 2005-09-23 16:35:07 +0200 @@ -177,11 +177,13 @@ assert(idx < p->size); if (idx < 0x4000) { - uint16_t *t; - if (!(t = (uint16_t*) avahi_dns_packet_extend(p, sizeof(uint16_t)))) + uint8_t *t; + + if (!(t = (uint8_t*) avahi_dns_packet_extend(p, sizeof(uint16_t)))) return NULL; - *t = htons((0xC000 | idx)); + t[0] = (uint8_t) ((0xC000 | idx) >> 8); + t[1] = (uint8_t) idx; return saved_ptr; } } @@ -223,7 +225,8 @@ if (!(d = avahi_dns_packet_extend(p, sizeof(uint16_t)))) return NULL; - *((uint16_t*) d) = htons(v); + d[0] = (uint8_t) (v >> 8); + d[1] = (uint8_t) v; return d; } @@ -234,7 +237,10 @@ if (!(d = avahi_dns_packet_extend(p, sizeof(uint32_t)))) return NULL; - *((uint32_t*) d) = htonl(v); + d[0] = (uint8_t) (v >> 24); + d[1] = (uint8_t) (v >> 16); + d[2] = (uint8_t) (v >> 8); + d[3] = (uint8_t) v; return d; } @@ -385,26 +391,42 @@ } int avahi_dns_packet_consume_uint16(AvahiDnsPacket *p, uint16_t *ret_v) { + uint8_t *d; + uint16_t tmp_v; + assert(p); assert(ret_v); if (p->rindex + sizeof(uint16_t) > p->size) return -1; - *ret_v = ntohs(*((uint16_t*) (AVAHI_DNS_PACKET_DATA(p) + p->rindex))); + d = (uint8_t*) (AVAHI_DNS_PACKET_DATA(p) + p->rindex); + tmp_v = (d[0] << 8) | d[1]; + d = (uint8_t*) ret_v; + d[0] = ((uint8_t*)(&tmp_v))[0]; + d[1] = ((uint8_t*)(&tmp_v))[1]; p->rindex += sizeof(uint16_t); return 0; } int avahi_dns_packet_consume_uint32(AvahiDnsPacket *p, uint32_t *ret_v) { + uint8_t* d; + uint32_t tmp_v; + assert(p); assert(ret_v); if (p->rindex + sizeof(uint32_t) > p->size) return -1; - *ret_v = ntohl(*((uint32_t*) (AVAHI_DNS_PACKET_DATA(p) + p->rindex))); + d = (uint8_t*) (AVAHI_DNS_PACKET_DATA(p) + p->rindex); + tmp_v = (d[0] << 24) | (d[1] << 16) | (d[2] << 8) | d[3]; + d = (uint8_t*) ret_v; + d[0] = ((uint8_t*)(&tmp_v))[0]; + d[1] = ((uint8_t*)(&tmp_v))[1]; + d[2] = ((uint8_t*)(&tmp_v))[2]; + d[3] = ((uint8_t*)(&tmp_v))[3]; p->rindex += sizeof(uint32_t); return 0; @@ -733,7 +755,8 @@ /* avahi_log_debug("appended %u", size); */ - * (uint16_t*) l = htons((uint16_t) size); + l[0] = (uint8_t) ((uint16_t) size >> 8); + l[1] = (uint8_t) ((uint16_t) size); return t;