From 6e318b5f03c2cc8ec0c6262498f4b62e59c8b505 Mon Sep 17 00:00:00 2001 From: octo Date: Sat, 10 Jun 2006 13:20:35 +0000 Subject: [PATCH] apcups branch: Remove `write_nbytes' and replace it with `swrite'. `swrite' is defined in `common.c' and (re)used by other plugins. Also, use `[u]int16_t' rather than `short', since the C standard doesn't garuantee a specific size for this storage type. Finally, the naming of the `packet_size' variable has been unified. --- src/apcups.c | 83 +++++++++++++--------------------------------------- 1 file changed, 20 insertions(+), 63 deletions(-) diff --git a/src/apcups.c b/src/apcups.c index e6f6cae9..9117bdae 100644 --- a/src/apcups.c +++ b/src/apcups.c @@ -134,57 +134,18 @@ struct apc_detail_s #define BIG_BUF 4096 -/* - * Write nbytes to the network. - * It may require several writes. - */ -static int write_nbytes (int *fd, void *buf, int buflen) -{ - int nleft; - int nwritten; - char *ptr; - - assert (buflen > 0); - assert (*fd >= 0); - - ptr = (char *) buf; - - nleft = buflen; - while (nleft > 0) - { - nwritten = write (*fd, ptr, nleft); - - if ((nwritten < 0) && ((errno == EAGAIN) || (errno == EINTR))) - continue; - - if (nwritten < 0) - { - *fd = -1; - DBG ("Writing to socket failed: %s; *fd = -1;", strerror (errno)); - syslog (LOG_ERR, "apcups plugin: Writing to socket failed: %s", strerror (errno)); - return (-1); - } - - nleft -= nwritten; - ptr += nwritten; - } - - /* If we get here, (nleft <= 0) is true */ - return (buflen); -} - #if APCMAIN /* Close the network connection */ static void net_close (int *fd) { - short pktsiz = 0; + uint16_t packet_size = 0; assert (*fd >= 0); DBG ("Gracefully shutting down socket %i.", *fd); /* send EOF sentinel */ - write_nbytes (fd, &pktsiz, sizeof (short)); + swrite (*fd, (void *) &packet_size, sizeof (packet_size)); close (*fd); *fd = -1; @@ -266,40 +227,33 @@ static int net_open (char *host, char *service, int port) */ static int net_recv (int *sockfd, char *buf, int buflen) { - int nbytes; - short pktsiz; + uint16_t packet_size; /* get data size -- in short */ - if ((nbytes = sread (*sockfd, (void *) &pktsiz, sizeof (short))) <= 0) + if (sread (*sockfd, (void *) &packet_size, sizeof (packet_size)) != 0) { *sockfd = -1; return (-1); } - if (nbytes != sizeof (short)) - return (-2); - - pktsiz = ntohs (pktsiz); - if (pktsiz > buflen) + packet_size = ntohs (packet_size); + if (packet_size > buflen) { DBG ("record length too large"); return (-2); } - if (pktsiz == 0) + if (packet_size == 0) return (0); /* now read the actual data */ - if ((nbytes = sread (*sockfd, (void *) buf, pktsiz)) <= 0) + if (sread (*sockfd, (void *) buf, packet_size) != 0) { *sockfd = -1; return (-1); } - if (nbytes != pktsiz) - return (-2); - - return (nbytes); + return ((int) packet_size); } /* static int net_recv (int *sockfd, char *buf, int buflen) */ /* @@ -311,23 +265,26 @@ static int net_recv (int *sockfd, char *buf, int buflen) */ static int net_send (int *sockfd, char *buff, int len) { - int rc; - short packet_size; + uint16_t packet_size; assert (len > 0); assert (*sockfd >= 0); /* send short containing size of data packet */ - packet_size = htons ((short) len); + packet_size = htons ((uint16_t) len); - rc = write_nbytes (sockfd, &packet_size, sizeof (packet_size)); - if (rc != sizeof (packet_size)) + if (swrite (*sockfd, (void *) &packet_size, sizeof (packet_size)) != 0) + { + *sockfd = -1; return (-1); + } /* send data packet */ - rc = write_nbytes (sockfd, buff, len); - if (rc != len) - return (-1); + if (swrite (*sockfd, (void *) buff, len) != 0) + { + *sockfd = -1; + return (-2); + } return (0); } -- 2.30.2