From 2119433bb0a1cbcd52675b741059f34798a37333 Mon Sep 17 00:00:00 2001 From: Andrew Bettison Date: Tue, 8 Oct 2013 15:39:29 +1030 Subject: [PATCH] Issue #11: fix printf "%zd" ssize_t warnings on Android Also use ssize_t instead of 'int' in a few suitable places --- mdp_client.c | 14 ++++++++------ mdp_client.h | 2 +- overlay_mdp.c | 15 +++++++-------- 3 files changed, 16 insertions(+), 15 deletions(-) diff --git a/mdp_client.c b/mdp_client.c index 3767680a..18c52ea9 100644 --- a/mdp_client.c +++ b/mdp_client.c @@ -33,7 +33,7 @@ int overlay_mdp_send(int mdp_sockfd, overlay_mdp_frame *mdp, int flags, int time if (mdp_sockfd == -1) return -1; // Minimise frame length to save work and prevent accidental disclosure of memory contents. - int len = overlay_mdp_relevant_bytes(mdp); + ssize_t len = overlay_mdp_relevant_bytes(mdp); if (len < 0) return WHY("MDP frame invalid (could not compute length)"); /* Construct name of socket to send to. */ @@ -185,9 +185,11 @@ int overlay_mdp_recv(int mdp_sockfd, overlay_mdp_frame *mdp, int port, int *ttl) return -1; } - int expected_len = overlay_mdp_relevant_bytes(mdp); - if (len < expected_len) - return WHYF("Expected packet length of %d, received only %zd bytes", expected_len, len); + ssize_t expected_len = overlay_mdp_relevant_bytes(mdp); + if (expected_len < 0) + return WHY("unsupported MDP packet type"); + if ((size_t)len < (size_t)expected_len) + return WHYF("Expected packet length of %zu, received only %zd bytes", (size_t) expected_len, (size_t) len); /* Valid packet received */ return 0; @@ -235,9 +237,9 @@ int overlay_mdp_getmyaddr(int mdp_sockfd, unsigned index, sid_t *sid) return 0; } -int overlay_mdp_relevant_bytes(overlay_mdp_frame *mdp) +ssize_t overlay_mdp_relevant_bytes(overlay_mdp_frame *mdp) { - int len; + size_t len; switch(mdp->packetTypeAndFlags&MDP_TYPE_MASK) { case MDP_ROUTING_TABLE: diff --git a/mdp_client.h b/mdp_client.h index 5126e7c0..66370e9b 100644 --- a/mdp_client.h +++ b/mdp_client.h @@ -40,6 +40,6 @@ int overlay_mdp_getmyaddr(int mpd_sockfd, unsigned index, sid_t *sid); int overlay_mdp_bind(int mdp_sockfd, const sid_t *localaddr, int port) ; int overlay_mdp_recv(int mdp_sockfd, overlay_mdp_frame *mdp, int port, int *ttl); int overlay_mdp_send(int mdp_sockfd, overlay_mdp_frame *mdp,int flags,int timeout_ms); -int overlay_mdp_relevant_bytes(overlay_mdp_frame *mdp); +ssize_t overlay_mdp_relevant_bytes(overlay_mdp_frame *mdp); #endif diff --git a/overlay_mdp.c b/overlay_mdp.c index 32a339ca..9997a2ef 100644 --- a/overlay_mdp.c +++ b/overlay_mdp.c @@ -133,11 +133,9 @@ int overlay_mdp_reply_error(int sock, int overlay_mdp_reply(int sock,struct sockaddr_un *recvaddr, socklen_t recvaddrlen, overlay_mdp_frame *mdpreply) { - int replylen; - if (!recvaddr) return WHY("No reply address"); - replylen=overlay_mdp_relevant_bytes(mdpreply); + ssize_t replylen = overlay_mdp_relevant_bytes(mdpreply); if (replylen<0) return WHY("Invalid MDP frame (could not compute length)"); errno=0; @@ -436,18 +434,19 @@ static int overlay_saw_mdp_frame(struct overlay_frame *frame, overlay_mdp_frame struct sockaddr_un addr; addr.sun_family = AF_UNIX; bcopy(mdp_bindings[match].socket_name, addr.sun_path, mdp_bindings[match].name_len); - int len=overlay_mdp_relevant_bytes(mdp); + ssize_t len = overlay_mdp_relevant_bytes(mdp); + if (len < 0) + RETURN(WHY("unsupported MDP packet type")); socklen_t addrlen = sizeof addr.sun_family + mdp_bindings[match].name_len; int r = sendto(mdp_sock.poll.fd,mdp,len,0,(struct sockaddr*)&addr, addrlen); - if (r == overlay_mdp_relevant_bytes(mdp)) + if (r == len) RETURN(0); - WHYF("didn't send mdp packet to %s", alloca_sockaddr(&addr, addrlen)); if (r == -1 && errno == ENOENT) { /* far-end of socket has died, so drop binding */ INFOF("Closing dead MDP client '%s'",mdp_bindings[match].socket_name); overlay_mdp_releasebindings(&addr,mdp_bindings[match].name_len); } - WHY_perror("sendto(e)"); + WHYF_perror("sendto(fd=%d,len=%zu,addr=%s)", mdp_sock.poll.fd, (size_t)len, alloca_sockaddr(&addr, addrlen)); RETURN(WHY("Failed to pass received MDP frame to client")); } else { /* No socket is bound, ignore the packet ... except for magic sockets */ @@ -933,7 +932,7 @@ void overlay_mdp_poll(struct sched_ent *alarm) if (len > 0) { if (recvaddrlen <= sizeof(sa_family_t)) - WHYF("got recvaddrlen=%d too short -- ignoring frame len=%zd", (int)recvaddrlen, len); + WHYF("got recvaddrlen=%d too short -- ignoring frame len=%zu", (int)recvaddrlen, (size_t)len); else { /* Look at overlay_mdp_frame we have received */ overlay_mdp_frame *mdp=(overlay_mdp_frame *)&buffer[0];