LogoopenSUSE Build Service > Projects
Sign Up | Log In

View File apcupsd.patch of Package conky (Project home:please_try_again:Fedora)

--- ./src/apcupsd.c.orig	2011-09-02 01:31:41.000000000 -0700
+++ ./src/apcupsd.c	2010-03-25 13:27:32.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,41 +164,44 @@
 		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;
 		}
-
+	
 		//
 		// send status request - "status" - 6B
 		//
@@ -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	2011-09-02 01:31:33.000000000 -0700
+++ ./src/apcupsd.h	2010-03-25 13:27:32.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_*/