Hello! So, here's what I suggest:
1. Create a common header file called "unaligned.h" which contains all macros required for unaligned access, both for little-endian, big-endian and native-endian access. This can be handily sourced from the systemd sources [1]. 2. Go through the sources and fix all of the following pointers acrobatics using the macros from "unaligned.h": glaubitz@ikarus:/tmp/liblo-0.28/src$ grep -R \*\( * address.c: *((unsigned long*)&a.addr) = inet_addr(ip); message.c: *(types - 1), file, line); message.c: dsize = lo_otoh32(*(uint32_t *) data); message.c: elem_len = lo_otoh32(*((uint32_t *) pos)); message.c: *(int32_t *) data = lo_otoh32(*(int32_t *) data); message.c: *(int32_t *) data = lo_otoh32(*(int32_t *) data); message.c: *(int32_t *) data = lo_otoh32(*(int32_t *) data); message.c: *(int64_t *) data = lo_otoh64(*(int64_t *) data); message.c: *(int32_t *) data = lo_htoo32(*(int32_t *) data); message.c: *(uint32_t *) data = lo_htoo32(*(uint32_t *) data); message.c: *(uint32_t *) data = lo_htoo32(*(uint32_t *) data); message.c: *(int64_t *) data = lo_htoo64(*(int64_t *) data); message.c: val32.nl = lo_otoh32(*(int32_t *) data); message.c: val32.nl = *(int32_t *) data; message.c: bigendian ? lo_otoh32(*(uint32_t *) data) : *(uint32_t *) data; message.c: bigendian ? lo_otoh32(*(uint32_t *) data) : *(uint32_t *) data; message.c: val64.nl = lo_otoh64(*(int64_t *) data); message.c: val64.nl = *(int64_t *) data; message.c: printf("%#02x", (unsigned int)*((unsigned char *) (data) + 4 + i)); message.c: printf("0x%02x", *((uint8_t *) (data) + i)); server.c: s->sockets = calloc(2, sizeof(*(s->sockets))); server.c: s->contexts = calloc(2, sizeof(*(s->contexts))); server.c: *(*buffer)++ = *from++; server.c: *(*buffer)++ = SLIP_END; server.c: *(*buffer)++ = SLIP_ESC; server.c: uint32_t msg_len = ntohl(*(uint32_t*)sc->buffer); server.c: *(uint32_t*)(sc->buffer + sc->buffer_read_offset) = 0; server.c: *(uint32_t*)(sc->buffer + sc->buffer_msg_offset) = htonl(msg_len); server.c: *(uint32_t*)(sc->buffer + sc->buffer_msg_offset) = 0; server.c: sizeof(*(s->sockets)) * (s->sockets_alloc * 2)); server.c: sizeof(*(s->contexts)) server.c: ts.sec = lo_otoh32(*((uint32_t *) pos)); server.c: ts.frac = lo_otoh32(*((uint32_t *) pos)); server.c: elem_len = lo_otoh32(*((uint32_t *) pos)); server.c: if (pos && *(pos + 1) == '\0') { server_thread.c: pthread_create(&(st->thread), NULL, (void *(*)(void *)) &thread_func, st); testlo.c: *(uint32_t *) (data + 8) = lo_htoo32((uint32_t) 99999); testlo.c: *(uint32_t*)msg = htonl(24); testlo.c: *(uint32_t*)(msg+28) = htonl(8); glaubitz@ikarus:/tmp/liblo-0.28/src$ Since the unaligned.h header already caters of BE/LE systems, we can use these macros instead lo_otoh32, for example. Thanks, Adrian > [1] > https://raw.githubusercontent.com/systemd/systemd/master/src/basic/unaligned.h -- .''`. John Paul Adrian Glaubitz : :' : Debian Developer - glaub...@debian.org `. `' Freie Universitaet Berlin - glaub...@physik.fu-berlin.de `- GPG: 62FF 8A75 84E0 2956 9546 0006 7426 3B37 F5B5 F913 _______________________________________________ pkg-multimedia-maintainers mailing list pkg-multimedia-maintainers@lists.alioth.debian.org http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-multimedia-maintainers