File apcupsd.patch of Package conky
--- src/apcupsd.c.orig 2012-06-21 18:17:29.197659583 -0700
+++ src/apcupsd.c 2012-06-21 18:15:29.000000000 -0700
@@ -154,7 +154,7 @@
//
// Conky update function for apcupsd data
//
-int update_apcupsd(void) {
+void update_apcupsd(void) {
int i;
APCUPSD_S apc;
@@ -164,37 +164,40 @@
memcpy(apc.items[i], "N/A", 4); // including \0
do {
- struct addrinfo hints;
- struct addrinfo *ai, *rp;
- int res;
+ struct hostent* he = 0;
+ struct sockaddr_in addr;
short sz = 0;
- char portbuf[8];
+#ifdef HAVE_GETHOSTBYNAME_R
+ struct hostent he_mem;
+ int he_errno;
+ char hostbuff[2048];
+#endif
//
// connect to apcupsd daemon
//
- memset(&hints, 0, sizeof(struct addrinfo));
- hints.ai_family = AF_UNSPEC;
- hints.ai_socktype = SOCK_STREAM;
- hints.ai_flags = 0;
- hints.ai_protocol = 0;
- snprintf(portbuf, 8, "%d", info.apcupsd.port);
- res = getaddrinfo(info.apcupsd.host, portbuf, &hints, &ai);
- if (res != 0) {
- NORM_ERR("APCUPSD getaddrinfo: %s", gai_strerror(res));
+ sock = socket(AF_INET, SOCK_STREAM, 0);
+ if (sock < 0) {
+ perror("socket");
break;
}
- for (rp = ai; rp != NULL; rp = rp->ai_next) {
- sock = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol);
- if (sock == -1) {
- continue;
- }
- if (connect(sock, rp->ai_addr, rp->ai_addrlen) != -1) {
- break;
- }
- close(sock);
+#ifdef HAVE_GETHOSTBYNAME_R
+ if (gethostbyname_r(info.apcupsd.host, &he_mem, hostbuff, sizeof(hostbuff), &he, &he_errno) || !he ) {
+ NORM_ERR("APCUPSD gethostbyname_r: %s", hstrerror(h_errno));
+ break;
+ }
+#else /* HAVE_GETHOSTBYNAME_R */
+ he = gethostbyname(info.apcupsd.host);
+ if (!he) {
+ herror("gethostbyname");
+ break;
}
- freeaddrinfo(ai);
- if (rp == NULL) {
+#endif /* HAVE_GETHOSTBYNAME_R */
+
+ memset(&addr, 0, sizeof(addr));
+ addr.sin_family = AF_INET;
+ addr.sin_port = info.apcupsd.port;
+ memcpy(&addr.sin_addr, he->h_addr, he->h_length);
+ if (connect(sock, (struct sockaddr*)&addr, sizeof(struct sockaddr)) < 0) {
// no error reporting, the daemon is probably not running
break;
}
@@ -222,5 +225,5 @@
// "atomically" copy the data into working set
//
memcpy(info.apcupsd.items, apc.items, sizeof(info.apcupsd.items));
- return 0;
+ return;
}
--- src/apcupsd.h.orig 2012-06-21 18:17:35.885795442 -0700
+++ src/apcupsd.h 2012-06-21 18:13:55.000000000 -0700
@@ -49,6 +49,6 @@
} APCUPSD_S, *PAPCUPSD_S;
/* Service routine for the conky main thread */
-int update_apcupsd(void);
+void update_apcupsd(void);
#endif /*APCUPSD_H_*/