/* GKrellM | Copyright (C) 1999-2007 Bill Wilson | | Author: Bill Wilson billw@gkrellm.net | Latest versions might be found at: http://gkrellm.net | | | GKrellM is free software: you can redistribute it and/or modify it | under the terms of the GNU General Public License as published by | the Free Software Foundation, either version 3 of the License, or | (at your option) any later version. | | GKrellM is distributed in the hope that it will be useful, but WITHOUT | ANY WARRANTY; without even the implied warranty of MERCHANTABILITY | or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public | License for more details. | | You should have received a copy of the GNU General Public License | along with this program. If not, see http://www.gnu.org/licenses/ */ #include "gkrellmd.h" #include "gkrellmd-private.h" #include "../src/gkrellm-sysdeps.h" #if defined(__linux__) #include "../src/sysdeps/linux.c" #include "../src/sysdeps/sensors-common.c" #endif #if defined(__APPLE__) #include "../src/sysdeps/darwin.c" #include "../src/sysdeps/bsd-common.c" #endif #if defined(__FreeBSD__) #include "../src/sysdeps/freebsd.c" #include "../src/sysdeps/bsd-common.c" #include "../src/sysdeps/sensors-common.c" #endif #if defined(__DragonFly__) #include "../src/sysdeps/dragonfly.c" #include "../src/sysdeps/bsd-common.c" #include "../src/sysdeps/sensors-common.c" #endif #if defined(__NetBSD__) #include "../src/sysdeps/netbsd.c" #include "../src/sysdeps/bsd-net-open.c" #include "../src/sysdeps/bsd-common.c" #include "../src/sysdeps/sensors-common.c" #endif #if defined(__OpenBSD__) #include "../src/sysdeps/openbsd.c" #include "../src/sysdeps/bsd-net-open.c" #include "../src/sysdeps/bsd-common.c" #endif #if defined(__solaris__) #include "../src/sysdeps/solaris.c" #endif #if defined(USE_LIBGTOP) #include "../src/sysdeps/gtop.c" #endif #if defined(WIN32) #include "../src/sysdeps/win32.c" #endif #if !defined(WIN32) #include #endif gchar * gkrellm_sys_get_host_name(void) { static gboolean have_it; static gchar buf[128]; if (!have_it && gethostname(buf, sizeof(buf))) strcpy(buf, "unknown"); have_it = TRUE; return buf; } #if !defined(WIN32) gchar * gkrellm_sys_get_system_name(void) { static gchar *sname; struct utsname utsn; if (!sname && uname(&utsn) > -1) sname = g_strdup_printf("%s %s", utsn.sysname, utsn.release); if (!sname) sname = g_strdup("unknown name"); return sname; } #endif /* Remove embedded "-i2c-" or "-isa-" from lm_sensors chip names so | there can be a chance for config name sysfs compatibility. This function | here in sensors.c is a kludge. Give user configs a chance to get | converted and then move this function to sysdeps/linux.c where it | belongs. | Munge names like w83627hf-isa-0290 to w83627hf-0290 | or w83627hf-i2c-0-0290 to w83627hf-0-0290 */ void gkrellm_sensors_linux_name_fix(gchar *id_name) { #if defined(__linux__) gchar *s; gint len, bus = 0; guint addr = 0; len = strlen(id_name) + 1; if ((s = strstr(id_name, "-i2c-")) != NULL) { sscanf(s + 5, "%d-%x", &bus, &addr); snprintf(s, len - (s - id_name), "-%d-%04x", bus, addr); } else if ((s = strstr(id_name, "-isa-")) != NULL) { *(s + 1) = '0'; memmove(s + 2, s + 4, strlen(s + 4) + 1); } #endif } #ifdef SENSORS_COMMON gint gkrellm_connect_to(gchar *server, gint server_port) { gint fd = -1; #ifdef HAVE_GETADDRINFO gint rv = 0; struct addrinfo hints, *res, *res0; gchar portnumber[6]; #else struct hostent *addr; struct sockaddr_in s; #endif // HAVE_GETADDRINFO #ifdef HAVE_GETADDRINFO snprintf (portnumber, sizeof(portnumber), "%d", server_port); memset(&hints, 0, sizeof(hints)); hints.ai_family = PF_UNSPEC; hints.ai_socktype = SOCK_STREAM; hints.ai_protocol = 0; if ((rv = getaddrinfo(server, portnumber, &hints, &res0)) != 0) return -1; for (res = res0; res; res = res->ai_next) { if ((fd = socket(res->ai_family, res->ai_socktype, res->ai_protocol)) < 0) continue; if (_GK.debug_level & DEBUG_SENSORS) printf("\t[gkrellm_connect_to: (%d,%d,%d) %s:%d]\n", res->ai_family, res->ai_socktype, res->ai_protocol, server, server_port); if (connect(fd, res->ai_addr, res->ai_addrlen) >= 0) break; #ifdef WIN32 closesocket(fd); #else close(fd); #endif // WIN32 fd = -1; } freeaddrinfo(res0); #else if (_GK.debug_level & DEBUG_SENSORS) printf("\t[gkrellm_connect_to: %s:%d]\n", server, server_port); addr = gethostbyname(server); if (addr) { fd = socket(AF_INET, SOCK_STREAM, 0); if (fd >= 0) { memset(&s, 0, sizeof(s)); memcpy(&s.sin_addr.s_addr, he->h_addr, he->h_length); s.sin_family = AF_INET; s.sin_port = htons(server_port); if (connect(fd, (struct sockaddr *)&s, sizeof (s)) < 0) { #ifdef WIN32 closesocket(fd); #else close(fd); #endif // WIN32 fd = -1; } } } #endif // HAVE_GETADDRINFO if (fd < 0) return -1; return fd; } #endif // SENSORS_COMMON