Skip to content

Commit 7aed96d

Browse files
committed
fix: fix memory alignment warnings
1 parent 621d5b2 commit 7aed96d

File tree

8 files changed

+29
-164
lines changed

8 files changed

+29
-164
lines changed

src/fcc.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#include "utils.h"
1010
#include "worker.h"
1111
#include <errno.h>
12+
#include <inttypes.h>
1213
#include <netinet/in.h>
1314
#include <stdio.h>
1415
#include <string.h>
@@ -236,7 +237,8 @@ int fcc_initialize_and_request(stream_context_t *ctx) {
236237
slen = sizeof(fcc->fcc_client);
237238
getsockname(fcc->fcc_sock, (struct sockaddr *)&fcc->fcc_client, &slen);
238239

239-
fcc->fcc_server = (struct sockaddr_in *)service->fcc_addr->ai_addr;
240+
fcc->fcc_server =
241+
(struct sockaddr_in *)(uintptr_t)service->fcc_addr->ai_addr;
240242

241243
/* Register socket with epoll immediately after creation */
242244
struct epoll_event ev;
@@ -462,7 +464,7 @@ int fcc_handle_mcast_active(stream_context_t *ctx, buffer_ref_t *buf_ref) {
462464
fcc->pending_list_tail = NULL;
463465

464466
logger(LOG_DEBUG,
465-
"FCC: Flushed pending buffer chain, total_flushed_bytes=%lu",
467+
"FCC: Flushed pending buffer chain, total_flushed_bytes=%" PRIu64,
466468
flushed_bytes);
467469
}
468470

src/fcc_huawei.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@
1717
*/
1818
uint8_t *build_fcc_request_pk_huawei(struct addrinfo *maddr, uint32_t local_ip,
1919
uint16_t fcc_client_nport) {
20-
struct sockaddr_in *maddr_sin = (struct sockaddr_in *)maddr->ai_addr;
20+
struct sockaddr_in *maddr_sin =
21+
(struct sockaddr_in *)(uintptr_t)maddr->ai_addr;
2122

2223
static uint8_t pk[FCC_PK_LEN_REQ_HUAWEI];
2324
memset(&pk, 0, sizeof(pk));
@@ -76,7 +77,8 @@ uint8_t *build_fcc_nat_pk_huawei(uint32_t session_id) {
7677
* Build Huawei FCC termination packet - FMT 9
7778
*/
7879
uint8_t *build_fcc_term_pk_huawei(struct addrinfo *maddr, uint16_t seqn) {
79-
struct sockaddr_in *maddr_sin = (struct sockaddr_in *)maddr->ai_addr;
80+
struct sockaddr_in *maddr_sin =
81+
(struct sockaddr_in *)(uintptr_t)maddr->ai_addr;
8082

8183
static uint8_t pk[FCC_PK_LEN_TERM_HUAWEI];
8284
memset(&pk, 0, sizeof(pk));

src/fcc_telecom.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@
1111

1212
uint8_t *build_fcc_request_pk_telecom(struct addrinfo *maddr,
1313
uint16_t fcc_client_nport) {
14-
struct sockaddr_in *maddr_sin = (struct sockaddr_in *)maddr->ai_addr;
14+
struct sockaddr_in *maddr_sin =
15+
(struct sockaddr_in *)(uintptr_t)maddr->ai_addr;
1516

1617
static uint8_t pk[FCC_PK_LEN_REQ_TELECOM];
1718
memset(&pk, 0, sizeof(pk));
@@ -40,7 +41,8 @@ uint8_t *build_fcc_request_pk_telecom(struct addrinfo *maddr,
4041
}
4142

4243
uint8_t *build_fcc_term_pk_telecom(struct addrinfo *maddr, uint16_t seqn) {
43-
struct sockaddr_in *maddr_sin = (struct sockaddr_in *)maddr->ai_addr;
44+
struct sockaddr_in *maddr_sin =
45+
(struct sockaddr_in *)(uintptr_t)maddr->ai_addr;
4446

4547
static uint8_t pk[FCC_PK_LEN_TERM_TELECOM];
4648
memset(&pk, 0, sizeof(pk));

src/hashmap.c

Lines changed: 1 addition & 147 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ void hashmap_set_load_factor(struct hashmap *map, double factor) {
8080
}
8181

8282
static struct bucket *bucket_at0(void *buckets, size_t bucketsz, size_t i) {
83-
return (struct bucket *)(((char *)buckets) + (bucketsz * i));
83+
return (struct bucket *)((uintptr_t)buckets + (bucketsz * i));
8484
}
8585

8686
static struct bucket *bucket_at(const struct hashmap *map, size_t index) {
@@ -571,145 +571,6 @@ static uint64_t SIP64(const uint8_t *in, const size_t inlen, uint64_t seed0,
571571
return out;
572572
}
573573

574-
//-----------------------------------------------------------------------------
575-
// MurmurHash3 was written by Austin Appleby, and is placed in the public
576-
// domain. The author hereby disclaims copyright to this source code.
577-
//
578-
// Murmur3_86_128
579-
//-----------------------------------------------------------------------------
580-
static uint64_t MM86128(const void *key, const int len, uint32_t seed) {
581-
#define ROTL32(x, r) ((x << r) | (x >> (32 - r)))
582-
#define FMIX32(h) \
583-
h ^= h >> 16; \
584-
h *= 0x85ebca6b; \
585-
h ^= h >> 13; \
586-
h *= 0xc2b2ae35; \
587-
h ^= h >> 16;
588-
const uint8_t *data = (const uint8_t *)key;
589-
const int nblocks = len / 16;
590-
uint32_t h1 = seed;
591-
uint32_t h2 = seed;
592-
uint32_t h3 = seed;
593-
uint32_t h4 = seed;
594-
uint32_t c1 = 0x239b961b;
595-
uint32_t c2 = 0xab0e9789;
596-
uint32_t c3 = 0x38b34ae5;
597-
uint32_t c4 = 0xa1e38b93;
598-
const uint32_t *blocks = (const uint32_t *)(data + nblocks * 16);
599-
for (int i = -nblocks; i; i++) {
600-
uint32_t k1 = blocks[i * 4 + 0];
601-
uint32_t k2 = blocks[i * 4 + 1];
602-
uint32_t k3 = blocks[i * 4 + 2];
603-
uint32_t k4 = blocks[i * 4 + 3];
604-
k1 *= c1;
605-
k1 = ROTL32(k1, 15);
606-
k1 *= c2;
607-
h1 ^= k1;
608-
h1 = ROTL32(h1, 19);
609-
h1 += h2;
610-
h1 = h1 * 5 + 0x561ccd1b;
611-
k2 *= c2;
612-
k2 = ROTL32(k2, 16);
613-
k2 *= c3;
614-
h2 ^= k2;
615-
h2 = ROTL32(h2, 17);
616-
h2 += h3;
617-
h2 = h2 * 5 + 0x0bcaa747;
618-
k3 *= c3;
619-
k3 = ROTL32(k3, 17);
620-
k3 *= c4;
621-
h3 ^= k3;
622-
h3 = ROTL32(h3, 15);
623-
h3 += h4;
624-
h3 = h3 * 5 + 0x96cd1c35;
625-
k4 *= c4;
626-
k4 = ROTL32(k4, 18);
627-
k4 *= c1;
628-
h4 ^= k4;
629-
h4 = ROTL32(h4, 13);
630-
h4 += h1;
631-
h4 = h4 * 5 + 0x32ac3b17;
632-
}
633-
const uint8_t *tail = (const uint8_t *)(data + nblocks * 16);
634-
uint32_t k1 = 0;
635-
uint32_t k2 = 0;
636-
uint32_t k3 = 0;
637-
uint32_t k4 = 0;
638-
switch (len & 15) {
639-
case 15:
640-
k4 ^= tail[14] << 16; /* fall through */
641-
case 14:
642-
k4 ^= tail[13] << 8; /* fall through */
643-
case 13:
644-
k4 ^= tail[12] << 0;
645-
k4 *= c4;
646-
k4 = ROTL32(k4, 18);
647-
k4 *= c1;
648-
h4 ^= k4;
649-
/* fall through */
650-
case 12:
651-
k3 ^= tail[11] << 24; /* fall through */
652-
case 11:
653-
k3 ^= tail[10] << 16; /* fall through */
654-
case 10:
655-
k3 ^= tail[9] << 8; /* fall through */
656-
case 9:
657-
k3 ^= tail[8] << 0;
658-
k3 *= c3;
659-
k3 = ROTL32(k3, 17);
660-
k3 *= c4;
661-
h3 ^= k3;
662-
/* fall through */
663-
case 8:
664-
k2 ^= tail[7] << 24; /* fall through */
665-
case 7:
666-
k2 ^= tail[6] << 16; /* fall through */
667-
case 6:
668-
k2 ^= tail[5] << 8; /* fall through */
669-
case 5:
670-
k2 ^= tail[4] << 0;
671-
k2 *= c2;
672-
k2 = ROTL32(k2, 16);
673-
k2 *= c3;
674-
h2 ^= k2;
675-
/* fall through */
676-
case 4:
677-
k1 ^= tail[3] << 24; /* fall through */
678-
case 3:
679-
k1 ^= tail[2] << 16; /* fall through */
680-
case 2:
681-
k1 ^= tail[1] << 8; /* fall through */
682-
case 1:
683-
k1 ^= tail[0] << 0;
684-
k1 *= c1;
685-
k1 = ROTL32(k1, 15);
686-
k1 *= c2;
687-
h1 ^= k1;
688-
/* fall through */
689-
};
690-
h1 ^= len;
691-
h2 ^= len;
692-
h3 ^= len;
693-
h4 ^= len;
694-
h1 += h2;
695-
h1 += h3;
696-
h1 += h4;
697-
h2 += h1;
698-
h3 += h1;
699-
h4 += h1;
700-
FMIX32(h1);
701-
FMIX32(h2);
702-
FMIX32(h3);
703-
FMIX32(h4);
704-
h1 += h2;
705-
h1 += h3;
706-
h1 += h4;
707-
h2 += h1;
708-
h3 += h1;
709-
h4 += h1;
710-
return (((uint64_t)h2) << 32) | h1;
711-
}
712-
713574
//-----------------------------------------------------------------------------
714575
// xxHash Library
715576
// Copyright (c) 2012-2021 Yann Collet
@@ -842,13 +703,6 @@ uint64_t hashmap_sip(const void *data, size_t len, uint64_t seed0,
842703
return SIP64((const uint8_t *)data, len, seed0, seed1);
843704
}
844705

845-
// hashmap_murmur returns a hash value for `data` using Murmur3_86_128.
846-
uint64_t hashmap_murmur(const void *data, size_t len, uint64_t seed0,
847-
uint64_t seed1) {
848-
(void)seed1;
849-
return MM86128(data, len, seed0);
850-
}
851-
852706
uint64_t hashmap_xxhash3(const void *data, size_t len, uint64_t seed0,
853707
uint64_t seed1) {
854708
(void)seed1;

src/m3u.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -259,9 +259,10 @@ char *get_server_address(void) {
259259

260260
/* Only process IPv4 for now */
261261
if (ifa->ifa_addr->sa_family == AF_INET) {
262-
struct sockaddr_in *addr = (struct sockaddr_in *)ifa->ifa_addr;
262+
struct sockaddr_in addr;
263+
memcpy(&addr, ifa->ifa_addr, sizeof(addr));
263264

264-
if (inet_ntop(AF_INET, &addr->sin_addr, addr_str, sizeof(addr_str)) ==
265+
if (inet_ntop(AF_INET, &addr.sin_addr, addr_str, sizeof(addr_str)) ==
265266
NULL)
266267
continue;
267268

src/multicast.c

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,8 @@ uint32_t get_local_ip_for_fcc(void) {
196196

197197
if (ifa->ifa_addr->sa_family == AF_INET &&
198198
strcmp(ifa->ifa_name, ifname) == 0) {
199-
struct sockaddr_in *addr = (struct sockaddr_in *)ifa->ifa_addr;
199+
struct sockaddr_in *addr =
200+
(struct sockaddr_in *)(uintptr_t)ifa->ifa_addr;
200201
local_ip = ntohl(addr->sin_addr.s_addr);
201202
logger(LOG_DEBUG, "FCC: Using local IP from interface %s: %u.%u.%u.%u",
202203
ifname, (local_ip >> 24) & 0xFF, (local_ip >> 16) & 0xFF,
@@ -213,7 +214,8 @@ uint32_t get_local_ip_for_fcc(void) {
213214
continue;
214215

215216
if (ifa->ifa_addr->sa_family == AF_INET) {
216-
struct sockaddr_in *addr = (struct sockaddr_in *)ifa->ifa_addr;
217+
struct sockaddr_in *addr =
218+
(struct sockaddr_in *)(uintptr_t)ifa->ifa_addr;
217219
uint32_t ip = ntohl(addr->sin_addr.s_addr);
218220

219221
/* Skip loopback (127.0.0.0/8) */
@@ -259,7 +261,8 @@ static int prepare_mcast_group_req(service_t *service, struct group_req *gr,
259261
case AF_INET6:
260262
level = SOL_IPV6;
261263
gr->gr_interface =
262-
((const struct sockaddr_in6 *)(service->addr->ai_addr))->sin6_scope_id;
264+
((struct sockaddr_in6 *)(uintptr_t)service->addr->ai_addr)
265+
->sin6_scope_id;
263266
break;
264267
default:
265268
logger(LOG_ERROR, "Address family don't support mcast.");
@@ -393,7 +396,7 @@ int rejoin_mcast_group(service_t *service) {
393396
return -1;
394397
}
395398

396-
mcast_addr = (struct sockaddr_in *)service->addr->ai_addr;
399+
mcast_addr = (struct sockaddr_in *)(uintptr_t)service->addr->ai_addr;
397400
group_addr = mcast_addr->sin_addr.s_addr;
398401

399402
if (service->msrc != NULL && strcmp(service->msrc, "") != 0 &&
@@ -402,7 +405,7 @@ int rejoin_mcast_group(service_t *service) {
402405
logger(LOG_ERROR, "IGMP raw socket rejoin: source address must be IPv4");
403406
return -1;
404407
}
405-
source_addr = (struct sockaddr_in *)service->msrc_addr->ai_addr;
408+
source_addr = (struct sockaddr_in *)(uintptr_t)service->msrc_addr->ai_addr;
406409
is_ssm = 1;
407410
nsrcs = 1;
408411
}
@@ -449,7 +452,7 @@ int rejoin_mcast_group(service_t *service) {
449452
grec->grec_nsrcs = htons(nsrcs);
450453
grec->grec_mca = group_addr;
451454
uint32_t *src_list =
452-
(uint32_t *)((uint8_t *)grec + sizeof(struct igmpv3_grec));
455+
(uint32_t *)((uintptr_t)grec + sizeof(struct igmpv3_grec));
453456
src_list[0] = source_addr->sin_addr.s_addr;
454457
packet_len_v3 = sizeof(struct igmpv3_report) + sizeof(struct igmpv3_grec) +
455458
sizeof(uint32_t);

src/rtsp.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2399,8 +2399,9 @@ static void rtsp_send_udp_nat_probe(rtsp_session_t *session) {
23992399
/* Send RTCP probe - update port in sockaddr */
24002400
if (session->server_rtcp_port > 0 && session->rtcp_socket >= 0) {
24012401
if (rp->ai_family == AF_INET) {
2402-
((struct sockaddr_in *)rp->ai_addr)->sin_port =
2403-
htons(session->server_rtcp_port);
2402+
struct sockaddr_in *addr =
2403+
(struct sockaddr_in *)(uintptr_t)rp->ai_addr;
2404+
addr->sin_port = htons(session->server_rtcp_port);
24042405
}
24052406
sendto(session->rtcp_socket, rtcp_packet, sizeof(rtcp_packet), 0,
24062407
rp->ai_addr, rp->ai_addrlen);

src/zerocopy.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -503,7 +503,7 @@ int zerocopy_handle_completions(int fd, zerocopy_queue_t *queue) {
503503
if ((cmsg->cmsg_level == SOL_IP && cmsg->cmsg_type == IP_RECVERR) ||
504504
(cmsg->cmsg_level == SOL_IPV6 && cmsg->cmsg_type == IPV6_RECVERR)) {
505505
struct sock_extended_err *serr =
506-
(struct sock_extended_err *)CMSG_DATA(cmsg);
506+
(struct sock_extended_err *)(uintptr_t)CMSG_DATA(cmsg);
507507

508508
if (serr->ee_origin == SO_EE_ORIGIN_ZEROCOPY) {
509509
uint32_t lo = serr->ee_info;

0 commit comments

Comments
 (0)