| File: | rc/client.c |
| Location: | line 652, column 24 |
| Description: | The left operand of '==' is a garbage value |
| 1 | /* GKrellM | |||
| 2 | | Copyright (C) 1999-2010 Bill Wilson | |||
| 3 | | | |||
| 4 | | Author: Bill Wilson billw@gkrellm.net | |||
| 5 | | Latest versions might be found at: http://gkrellm.net | |||
| 6 | | | |||
| 7 | | | |||
| 8 | | GKrellM is free software: you can redistribute it and/or modify it | |||
| 9 | | under the terms of the GNU General Public License as published by | |||
| 10 | | the Free Software Foundation, either version 3 of the License, or | |||
| 11 | | (at your option) any later version. | |||
| 12 | | | |||
| 13 | | GKrellM is distributed in the hope that it will be useful, but WITHOUT | |||
| 14 | | ANY WARRANTY; without even the implied warranty of MERCHANTABILITY | |||
| 15 | | or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public | |||
| 16 | | License for more details. | |||
| 17 | | | |||
| 18 | | You should have received a copy of the GNU General Public License | |||
| 19 | | along with this program. If not, see http://www.gnu.org/licenses/ | |||
| 20 | | | |||
| 21 | | | |||
| 22 | | Additional permission under GNU GPL version 3 section 7 | |||
| 23 | | | |||
| 24 | | If you modify this program, or any covered work, by linking or | |||
| 25 | | combining it with the OpenSSL project's OpenSSL library (or a | |||
| 26 | | modified version of that library), containing parts covered by | |||
| 27 | | the terms of the OpenSSL or SSLeay licenses, you are granted | |||
| 28 | | additional permission to convey the resulting work. | |||
| 29 | | Corresponding Source for a non-source form of such a combination | |||
| 30 | | shall include the source code for the parts of OpenSSL used as well | |||
| 31 | | as that of the covered work. | |||
| 32 | */ | |||
| 33 | ||||
| 34 | ||||
| 35 | #include "gkrellm.h" | |||
| 36 | #include "gkrellm-private.h" | |||
| 37 | #include "gkrellm-sysdeps.h" | |||
| 38 | ||||
| 39 | #include <inttypes.h> | |||
| 40 | ||||
| 41 | #if !defined(WIN32) | |||
| 42 | #include <sys/socket.h> | |||
| 43 | #include <utime.h> | |||
| 44 | #include <sys/time.h> | |||
| 45 | #include <netinet/in.h> | |||
| 46 | #include <arpa/inet.h> | |||
| 47 | #include <netdb.h> | |||
| 48 | #else | |||
| 49 | #include <winsock2.h> | |||
| 50 | #include <ws2tcpip.h> | |||
| 51 | #endif | |||
| 52 | ||||
| 53 | #include <errno(*__errno_location ()).h> | |||
| 54 | ||||
| 55 | ||||
| 56 | ||||
| 57 | #if defined(__linux__1) | |||
| 58 | #if defined(__GLIBC__2) && ((__GLIBC__2>2)||(__GLIBC__2==2 && __GLIBC_MINOR__19>=1)) | |||
| 59 | #define HAVE_GETADDRINFO1 1 | |||
| 60 | #endif | |||
| 61 | #endif | |||
| 62 | ||||
| 63 | #if defined(__DragonFly__) | |||
| 64 | #define HAVE_GETADDRINFO1 1 | |||
| 65 | #endif | |||
| 66 | ||||
| 67 | #if defined(__FreeBSD__) | |||
| 68 | #if __FreeBSD_version >= 400000 | |||
| 69 | #define HAVE_GETADDRINFO1 1 | |||
| 70 | #endif | |||
| 71 | #endif | |||
| 72 | ||||
| 73 | #if defined(__OpenBSD__) | |||
| 74 | #define HAVE_GETADDRINFO1 1 | |||
| 75 | #endif | |||
| 76 | ||||
| 77 | #if defined(__NetBSD__) | |||
| 78 | #define HAVE_GETADDRINFO1 1 | |||
| 79 | #endif | |||
| 80 | ||||
| 81 | #if defined(__solaris__) | |||
| 82 | /* getaddrinfo is related to IPv6 stuff */ | |||
| 83 | # include <netconfig.h> | |||
| 84 | # if defined(NC_INET6) | |||
| 85 | # define HAVE_GETADDRINFO1 1 | |||
| 86 | # endif | |||
| 87 | #endif | |||
| 88 | ||||
| 89 | ||||
| 90 | typedef struct | |||
| 91 | { | |||
| 92 | gchar *key; | |||
| 93 | void (*func)(); | |||
| 94 | } | |||
| 95 | KeyTable; | |||
| 96 | ||||
| 97 | static gint server_major_version, | |||
| 98 | server_minor_version, | |||
| 99 | server_rev_version; | |||
| 100 | ||||
| 101 | static gint client_input_id, | |||
| 102 | client_fd; | |||
| 103 | static gboolean server_alive; | |||
| 104 | ||||
| 105 | static gchar server_buf[4097]; /* TODO: Use dynamic receive buffer */ | |||
| 106 | static gint buf_index; | |||
| 107 | ||||
| 108 | static gchar locale_decimal_point; | |||
| 109 | static gchar server_decimal_point = '.'; | |||
| 110 | static gboolean need_locale_fix = FALSE(0); | |||
| 111 | ||||
| 112 | ||||
| 113 | gboolean | |||
| 114 | gkrellm_client_check_server_version(gint major, gint minor, gint rev) | |||
| 115 | { | |||
| 116 | if ( server_major_version > major | |||
| 117 | || (server_major_version == major && server_minor_version > minor) | |||
| 118 | || ( server_major_version == major && server_minor_version == minor | |||
| 119 | && server_rev_version >= rev | |||
| 120 | ) | |||
| 121 | ) | |||
| 122 | return TRUE(!(0)); | |||
| 123 | return FALSE(0); | |||
| 124 | } | |||
| 125 | ||||
| 126 | ||||
| 127 | /* There can be a locale decimal point mismatch with the server. | |||
| 128 | */ | |||
| 129 | static void | |||
| 130 | locale_fix(gchar *buf) | |||
| 131 | { | |||
| 132 | gchar *s; | |||
| 133 | ||||
| 134 | for (s = buf; *s; ++s) | |||
| 135 | if (*s == server_decimal_point) | |||
| 136 | *s = locale_decimal_point; | |||
| 137 | } | |||
| 138 | ||||
| 139 | ||||
| 140 | /* ================================================================= */ | |||
| 141 | /* CPU */ | |||
| 142 | ||||
| 143 | typedef struct | |||
| 144 | { | |||
| 145 | gint instance; | |||
| 146 | gulong user, | |||
| 147 | nice, | |||
| 148 | sys, | |||
| 149 | idle; | |||
| 150 | } | |||
| 151 | Cpu; | |||
| 152 | ||||
| 153 | static GList *cpu_list, | |||
| 154 | *instance_list; | |||
| 155 | static gint n_cpus = 1; | |||
| 156 | static gboolean nice_time_supported = TRUE(!(0)); | |||
| 157 | ||||
| 158 | static void | |||
| 159 | client_cpu_line_from_server(gchar *line) | |||
| 160 | { | |||
| 161 | GList *list; | |||
| 162 | Cpu *cpu = NULL((void*)0); | |||
| 163 | gint n; | |||
| 164 | guint64 user, nice, sys, idle; | |||
| 165 | ||||
| 166 | sscanf(line, "%d %" PRIu64"l" "u" " %" PRIu64"l" "u" " %" PRIu64"l" "u" " %" PRIu64"l" "u", &n, &user, &nice, &sys, &idle); | |||
| 167 | for (list = cpu_list; list; list = list->next) | |||
| 168 | { | |||
| 169 | cpu = (Cpu *) list->data; | |||
| 170 | if (cpu->instance == n) | |||
| 171 | break; | |||
| 172 | } | |||
| 173 | if (list) | |||
| 174 | { | |||
| 175 | cpu->user = user; | |||
| 176 | cpu->nice = nice; | |||
| 177 | cpu->sys = sys; | |||
| 178 | cpu->idle = idle; | |||
| 179 | } | |||
| 180 | } | |||
| 181 | ||||
| 182 | static void | |||
| 183 | cpu_read_data(void) | |||
| 184 | { | |||
| 185 | Cpu *cpu; | |||
| 186 | GList *list; | |||
| 187 | ||||
| 188 | for (list = cpu_list; list; list = list->next) | |||
| 189 | { | |||
| 190 | cpu = (Cpu *) list->data; | |||
| 191 | gkrellm_cpu_assign_data(cpu->instance, cpu->user, cpu->nice, | |||
| 192 | cpu->sys, cpu->idle); | |||
| 193 | } | |||
| 194 | } | |||
| 195 | ||||
| 196 | static void | |||
| 197 | client_sys_cpu_init(void) | |||
| 198 | { | |||
| 199 | GList *list; | |||
| 200 | Cpu *cpu; | |||
| 201 | gint n; | |||
| 202 | ||||
| 203 | /* Do initialization based on info received in client_cpu_setup(). Here | |||
| 204 | | we need to get the same effective work done as would be done in the | |||
| 205 | | sysdep gkrellm_sys_cpu_init() when not running in client mode. | |||
| 206 | */ | |||
| 207 | for (n = 0; n < n_cpus; ++ n) | |||
| 208 | { | |||
| 209 | cpu = g_new0(Cpu, 1)(Cpu *) (__extension__ ({ gsize __n = (gsize) (1); gsize __s = sizeof (Cpu); gpointer __p; if (__s == 1) __p = g_malloc0 (__n ); else if (__builtin_constant_p (__n) && (__s == 0 || __n <= (9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc0 (__n * __s); else __p = g_malloc0_n (__n, __s); __p; })); | |||
| 210 | if (instance_list && (list = g_list_nth(instance_list, n)) != NULL((void*)0)) | |||
| 211 | { | |||
| 212 | cpu->instance = GPOINTER_TO_INT(list->data)((gint) (glong) (list->data)); | |||
| 213 | gkrellm_cpu_add_instance(cpu->instance); | |||
| 214 | } | |||
| 215 | else | |||
| 216 | cpu->instance = n; | |||
| 217 | cpu_list = g_list_append(cpu_list, cpu); | |||
| 218 | } | |||
| 219 | gkrellm_cpu_set_number_of_cpus(n_cpus); | |||
| 220 | if (!nice_time_supported) | |||
| 221 | gkrellm_cpu_nice_time_unsupported(); | |||
| 222 | ||||
| 223 | /* Diverting the cpu_read_data function in cpu.c causes the cpu monitor | |||
| 224 | | to not call the gkrellm_sys_cpu_init() sysdep function and also to call | |||
| 225 | | our client cpu_read_data function instead of gkrellm_sys_cpu_read_data() | |||
| 226 | */ | |||
| 227 | gkrellm_cpu_client_divert(cpu_read_data); | |||
| 228 | } | |||
| 229 | ||||
| 230 | static void | |||
| 231 | client_cpu_setup(gchar *line) | |||
| 232 | { | |||
| 233 | gint instance; | |||
| 234 | ||||
| 235 | if (!strncmp(line, "n_cpus", 6)(__extension__ (__builtin_constant_p (6) && ((__builtin_constant_p (line) && strlen (line) < ((size_t) (6))) || (__builtin_constant_p ("n_cpus") && strlen ("n_cpus") < ((size_t) (6))) ) ? __extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (line) && __builtin_constant_p ("n_cpus") && (__s1_len = strlen (line), __s2_len = strlen ("n_cpus"), (!( (size_t)(const void *)((line) + 1) - (size_t)(const void *)(line ) == 1) || __s1_len >= 4) && (!((size_t)(const void *)(("n_cpus") + 1) - (size_t)(const void *)("n_cpus") == 1) || __s2_len >= 4)) ? __builtin_strcmp (line, "n_cpus") : (__builtin_constant_p (line) && ((size_t)(const void *)((line) + 1) - (size_t )(const void *)(line) == 1) && (__s1_len = strlen (line ), __s1_len < 4) ? (__builtin_constant_p ("n_cpus") && ((size_t)(const void *)(("n_cpus") + 1) - (size_t)(const void *)("n_cpus") == 1) ? __builtin_strcmp (line, "n_cpus") : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) ("n_cpus"); int __result = (((const unsigned char *) (const char *) (line))[0] - __s2[0]); if (__s1_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) (line))[1] - __s2[1]); if (__s1_len > 1 && __result == 0) { __result = (((const unsigned char *) (const char *) (line))[2] - __s2[2]); if (__s1_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) (line))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p ("n_cpus") && ((size_t)(const void *)(("n_cpus") + 1 ) - (size_t)(const void *)("n_cpus") == 1) && (__s2_len = strlen ("n_cpus"), __s2_len < 4) ? (__builtin_constant_p (line) && ((size_t)(const void *)((line) + 1) - (size_t )(const void *)(line) == 1) ? __builtin_strcmp (line, "n_cpus" ) : (- (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (line); int __result = (((const unsigned char *) (const char *) ("n_cpus"))[0] - __s2[0]); if (__s2_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) ("n_cpus"))[1] - __s2[1]); if (__s2_len > 1 && __result == 0) { __result = (((const unsigned char *) (const char *) ("n_cpus"))[2] - __s2[2]); if (__s2_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) ("n_cpus"))[3] - __s2[3]); } } __result ; })))) : __builtin_strcmp (line, "n_cpus")))); }) : strncmp ( line, "n_cpus", 6)))) | |||
| 236 | sscanf(line, "%*s %d", &n_cpus); | |||
| 237 | else if (!strncmp(line, "cpu_instance", 12)(__extension__ (__builtin_constant_p (12) && ((__builtin_constant_p (line) && strlen (line) < ((size_t) (12))) || (__builtin_constant_p ("cpu_instance") && strlen ("cpu_instance") < ((size_t ) (12)))) ? __extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (line) && __builtin_constant_p ("cpu_instance") && (__s1_len = strlen (line), __s2_len = strlen ("cpu_instance" ), (!((size_t)(const void *)((line) + 1) - (size_t)(const void *)(line) == 1) || __s1_len >= 4) && (!((size_t)(const void *)(("cpu_instance") + 1) - (size_t)(const void *)("cpu_instance" ) == 1) || __s2_len >= 4)) ? __builtin_strcmp (line, "cpu_instance" ) : (__builtin_constant_p (line) && ((size_t)(const void *)((line) + 1) - (size_t)(const void *)(line) == 1) && (__s1_len = strlen (line), __s1_len < 4) ? (__builtin_constant_p ("cpu_instance") && ((size_t)(const void *)(("cpu_instance" ) + 1) - (size_t)(const void *)("cpu_instance") == 1) ? __builtin_strcmp (line, "cpu_instance") : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) ("cpu_instance" ); int __result = (((const unsigned char *) (const char *) (line ))[0] - __s2[0]); if (__s1_len > 0 && __result == 0 ) { __result = (((const unsigned char *) (const char *) (line ))[1] - __s2[1]); if (__s1_len > 1 && __result == 0 ) { __result = (((const unsigned char *) (const char *) (line ))[2] - __s2[2]); if (__s1_len > 2 && __result == 0 ) __result = (((const unsigned char *) (const char *) (line)) [3] - __s2[3]); } } __result; }))) : (__builtin_constant_p ("cpu_instance" ) && ((size_t)(const void *)(("cpu_instance") + 1) - ( size_t)(const void *)("cpu_instance") == 1) && (__s2_len = strlen ("cpu_instance"), __s2_len < 4) ? (__builtin_constant_p (line) && ((size_t)(const void *)((line) + 1) - (size_t )(const void *)(line) == 1) ? __builtin_strcmp (line, "cpu_instance" ) : (- (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (line); int __result = (((const unsigned char *) (const char *) ("cpu_instance"))[0] - __s2[0]); if ( __s2_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) ("cpu_instance"))[1] - __s2[ 1]); if (__s2_len > 1 && __result == 0) { __result = (((const unsigned char *) (const char *) ("cpu_instance")) [2] - __s2[2]); if (__s2_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) ("cpu_instance" ))[3] - __s2[3]); } } __result; })))) : __builtin_strcmp (line , "cpu_instance")))); }) : strncmp (line, "cpu_instance", 12) ))) | |||
| 238 | { | |||
| 239 | sscanf(line, "%*s %d", &instance); | |||
| 240 | instance_list = g_list_append(instance_list, | |||
| 241 | GINT_TO_POINTER(instance)((gpointer) (glong) (instance))); | |||
| 242 | } | |||
| 243 | else if (!strcmp(line, "nice_time_unsupported")__extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (line) && __builtin_constant_p ("nice_time_unsupported" ) && (__s1_len = strlen (line), __s2_len = strlen ("nice_time_unsupported" ), (!((size_t)(const void *)((line) + 1) - (size_t)(const void *)(line) == 1) || __s1_len >= 4) && (!((size_t)(const void *)(("nice_time_unsupported") + 1) - (size_t)(const void *)("nice_time_unsupported") == 1) || __s2_len >= 4)) ? __builtin_strcmp (line, "nice_time_unsupported") : (__builtin_constant_p (line ) && ((size_t)(const void *)((line) + 1) - (size_t)(const void *)(line) == 1) && (__s1_len = strlen (line), __s1_len < 4) ? (__builtin_constant_p ("nice_time_unsupported") && ((size_t)(const void *)(("nice_time_unsupported") + 1) - (size_t )(const void *)("nice_time_unsupported") == 1) ? __builtin_strcmp (line, "nice_time_unsupported") : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) ("nice_time_unsupported" ); int __result = (((const unsigned char *) (const char *) (line ))[0] - __s2[0]); if (__s1_len > 0 && __result == 0 ) { __result = (((const unsigned char *) (const char *) (line ))[1] - __s2[1]); if (__s1_len > 1 && __result == 0 ) { __result = (((const unsigned char *) (const char *) (line ))[2] - __s2[2]); if (__s1_len > 2 && __result == 0 ) __result = (((const unsigned char *) (const char *) (line)) [3] - __s2[3]); } } __result; }))) : (__builtin_constant_p ("nice_time_unsupported" ) && ((size_t)(const void *)(("nice_time_unsupported" ) + 1) - (size_t)(const void *)("nice_time_unsupported") == 1 ) && (__s2_len = strlen ("nice_time_unsupported"), __s2_len < 4) ? (__builtin_constant_p (line) && ((size_t)( const void *)((line) + 1) - (size_t)(const void *)(line) == 1 ) ? __builtin_strcmp (line, "nice_time_unsupported") : (- (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (line); int __result = (((const unsigned char *) (const char *) ("nice_time_unsupported"))[0] - __s2[0]); if (__s2_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) ("nice_time_unsupported"))[1] - __s2[ 1]); if (__s2_len > 1 && __result == 0) { __result = (((const unsigned char *) (const char *) ("nice_time_unsupported" ))[2] - __s2[2]); if (__s2_len > 2 && __result == 0 ) __result = (((const unsigned char *) (const char *) ("nice_time_unsupported" ))[3] - __s2[3]); } } __result; })))) : __builtin_strcmp (line , "nice_time_unsupported")))); })) | |||
| 244 | nice_time_supported = FALSE(0); | |||
| 245 | } | |||
| 246 | ||||
| 247 | /* ================================================================= */ | |||
| 248 | static struct | |||
| 249 | { | |||
| 250 | gint n_processes, | |||
| 251 | n_running, | |||
| 252 | n_users; | |||
| 253 | gulong n_forks; | |||
| 254 | gfloat load; | |||
| 255 | } | |||
| 256 | proc; | |||
| 257 | ||||
| 258 | static void | |||
| 259 | client_proc_line_from_server(gchar *line) | |||
| 260 | { | |||
| 261 | if (need_locale_fix) | |||
| 262 | locale_fix(line); | |||
| 263 | sscanf(line, "%d %d %lu %f %d", &proc.n_processes, &proc.n_running, | |||
| 264 | &proc.n_forks, &proc.load, &proc.n_users); | |||
| 265 | } | |||
| 266 | ||||
| 267 | static void | |||
| 268 | read_proc_data(void) | |||
| 269 | { | |||
| 270 | gkrellm_proc_assign_data(proc.n_processes, proc.n_running, | |||
| 271 | proc.n_forks, proc.load); | |||
| 272 | } | |||
| 273 | ||||
| 274 | static void | |||
| 275 | read_user_data(void) | |||
| 276 | { | |||
| 277 | gkrellm_proc_assign_users(proc.n_users); | |||
| 278 | } | |||
| 279 | ||||
| 280 | static void | |||
| 281 | client_sys_proc_init(void) | |||
| 282 | { | |||
| 283 | gkrellm_proc_client_divert(read_proc_data, read_user_data); | |||
| 284 | } | |||
| 285 | ||||
| 286 | /* ================================================================= */ | |||
| 287 | typedef struct | |||
| 288 | { | |||
| 289 | gchar *name; | |||
| 290 | gchar *subdisk_parent; | |||
| 291 | guint64 rblk, | |||
| 292 | wblk; | |||
| 293 | gboolean virtual; | |||
| 294 | } | |||
| 295 | DiskData; | |||
| 296 | ||||
| 297 | static GList *disk_list; | |||
| 298 | ||||
| 299 | static gboolean units_are_blocks; | |||
| 300 | ||||
| 301 | static void | |||
| 302 | client_disk_line_from_server(gchar *line) | |||
| 303 | { | |||
| 304 | DiskData *disk = NULL((void*)0); | |||
| 305 | GList *list; | |||
| 306 | gchar *name; | |||
| 307 | gchar s1[32], s2[32], s3[32]; | |||
| 308 | guint64 rblk, wblk; | |||
| 309 | gint n; | |||
| 310 | gboolean virtual = FALSE(0); | |||
| 311 | ||||
| 312 | g_assert(line != NULL)do { if (__builtin_expect (__extension__ ({ int _g_boolean_var_ ; if (line != ((void*)0)) _g_boolean_var_ = 1; else _g_boolean_var_ = 0; _g_boolean_var_; }), 1)) ; else g_assertion_message_expr (((gchar*) 0), "client.c", 312, ((const char*) (__func__)), "line != NULL" ); } while (0); | |||
| 313 | name = g_malloc(strlen(line) * sizeof(gchar)); | |||
| 314 | ||||
| 315 | /* FIXME: Extend client and server to support disks with both name and label */ | |||
| 316 | n = sscanf(line, "%s %31s %31s %31s", name, s1, s2, s3); | |||
| 317 | if (n == 4) | |||
| 318 | { | |||
| 319 | if ( gkrellm_client_check_server_version(2, 2, 7) | |||
| 320 | && !strcmp(s1, "virtual")__extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (s1) && __builtin_constant_p ("virtual") && ( __s1_len = strlen (s1), __s2_len = strlen ("virtual"), (!((size_t )(const void *)((s1) + 1) - (size_t)(const void *)(s1) == 1) || __s1_len >= 4) && (!((size_t)(const void *)(("virtual" ) + 1) - (size_t)(const void *)("virtual") == 1) || __s2_len >= 4)) ? __builtin_strcmp (s1, "virtual") : (__builtin_constant_p (s1) && ((size_t)(const void *)((s1) + 1) - (size_t) (const void *)(s1) == 1) && (__s1_len = strlen (s1), __s1_len < 4) ? (__builtin_constant_p ("virtual") && ((size_t )(const void *)(("virtual") + 1) - (size_t)(const void *)("virtual" ) == 1) ? __builtin_strcmp (s1, "virtual") : (__extension__ ( { const unsigned char *__s2 = (const unsigned char *) (const char *) ("virtual"); int __result = (((const unsigned char *) (const char *) (s1))[0] - __s2[0]); if (__s1_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) ( s1))[1] - __s2[1]); if (__s1_len > 1 && __result == 0) { __result = (((const unsigned char *) (const char *) (s1 ))[2] - __s2[2]); if (__s1_len > 2 && __result == 0 ) __result = (((const unsigned char *) (const char *) (s1))[3 ] - __s2[3]); } } __result; }))) : (__builtin_constant_p ("virtual" ) && ((size_t)(const void *)(("virtual") + 1) - (size_t )(const void *)("virtual") == 1) && (__s2_len = strlen ("virtual"), __s2_len < 4) ? (__builtin_constant_p (s1) && ((size_t)(const void *)((s1) + 1) - (size_t)(const void *)(s1 ) == 1) ? __builtin_strcmp (s1, "virtual") : (- (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (s1); int __result = (((const unsigned char *) (const char *) ("virtual"))[0] - __s2[0]); if (__s2_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) ("virtual"))[1] - __s2[1]); if (__s2_len > 1 && __result == 0) { __result = (((const unsigned char *) (const char *) ("virtual"))[2] - __s2[2]); if (__s2_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) ("virtual"))[3] - __s2[3]); } } __result; })))) : __builtin_strcmp (s1, "virtual")))); }) | |||
| 321 | ) | |||
| 322 | { | |||
| 323 | virtual = TRUE(!(0)); | |||
| 324 | s1[0] = '\0'; | |||
| 325 | } | |||
| 326 | rblk = strtoull(s2, NULL((void*)0), 0); | |||
| 327 | wblk = strtoull(s3, NULL((void*)0), 0); | |||
| 328 | } | |||
| 329 | else if (n == 3) | |||
| 330 | { | |||
| 331 | rblk = strtoull(s1, NULL((void*)0), 0); | |||
| 332 | wblk = strtoull(s2, NULL((void*)0), 0); | |||
| 333 | s1[0] = '\0'; | |||
| 334 | } | |||
| 335 | else | |||
| 336 | { | |||
| 337 | g_warning("Invalid disk line received from server: \"%s\"", line); | |||
| 338 | g_free(name); | |||
| 339 | return; | |||
| 340 | } | |||
| 341 | ||||
| 342 | for (list = disk_list; list; list = list->next) | |||
| 343 | { | |||
| 344 | /* Search disk in list */ | |||
| 345 | disk = (DiskData *) list->data; | |||
| 346 | if (!strcmp(disk->name, name)__extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (disk->name) && __builtin_constant_p (name) && (__s1_len = strlen (disk->name), __s2_len = strlen (name) , (!((size_t)(const void *)((disk->name) + 1) - (size_t)(const void *)(disk->name) == 1) || __s1_len >= 4) && (!((size_t)(const void *)((name) + 1) - (size_t)(const void * )(name) == 1) || __s2_len >= 4)) ? __builtin_strcmp (disk-> name, name) : (__builtin_constant_p (disk->name) && ((size_t)(const void *)((disk->name) + 1) - (size_t)(const void *)(disk->name) == 1) && (__s1_len = strlen ( disk->name), __s1_len < 4) ? (__builtin_constant_p (name ) && ((size_t)(const void *)((name) + 1) - (size_t)(const void *)(name) == 1) ? __builtin_strcmp (disk->name, name) : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (name); int __result = (((const unsigned char *) (const char *) (disk->name))[0] - __s2[0]); if (__s1_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) (disk->name))[1] - __s2[1]); if (__s1_len > 1 && __result == 0) { __result = (((const unsigned char *) (const char *) (disk->name))[2] - __s2[2]); if (__s1_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) (disk->name))[3] - __s2[3]); } } __result ; }))) : (__builtin_constant_p (name) && ((size_t)(const void *)((name) + 1) - (size_t)(const void *)(name) == 1) && (__s2_len = strlen (name), __s2_len < 4) ? (__builtin_constant_p (disk->name) && ((size_t)(const void *)((disk-> name) + 1) - (size_t)(const void *)(disk->name) == 1) ? __builtin_strcmp (disk->name, name) : (- (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (disk->name ); int __result = (((const unsigned char *) (const char *) (name ))[0] - __s2[0]); if (__s2_len > 0 && __result == 0 ) { __result = (((const unsigned char *) (const char *) (name ))[1] - __s2[1]); if (__s2_len > 1 && __result == 0 ) { __result = (((const unsigned char *) (const char *) (name ))[2] - __s2[2]); if (__s2_len > 2 && __result == 0 ) __result = (((const unsigned char *) (const char *) (name)) [3] - __s2[3]); } } __result; })))) : __builtin_strcmp (disk-> name, name)))); })) | |||
| 347 | break; | |||
| 348 | } | |||
| 349 | if (!list) | |||
| 350 | { | |||
| 351 | /* Disk wasn't found, create new disk and add to list */ | |||
| 352 | disk = g_new0(DiskData, 1)(DiskData *) (__extension__ ({ gsize __n = (gsize) (1); gsize __s = sizeof (DiskData); gpointer __p; if (__s == 1) __p = g_malloc0 (__n); else if (__builtin_constant_p (__n) && (__s == 0 || __n <= (9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc0 (__n * __s); else __p = g_malloc0_n (__n, __s); __p ; })); | |||
| 353 | disk->name = g_strdup(name); | |||
| 354 | if (s1[0]) /* I expect server to send in order */ | |||
| 355 | disk->subdisk_parent = g_strdup(s1); | |||
| 356 | disk_list = g_list_append(disk_list, disk); | |||
| 357 | } | |||
| 358 | if (disk) | |||
| 359 | { | |||
| 360 | /* Assign parsed data to disk */ | |||
| 361 | disk->rblk = rblk; | |||
| 362 | disk->wblk = wblk; | |||
| 363 | disk->virtual = virtual; | |||
| 364 | } | |||
| 365 | g_free(name); | |||
| 366 | } | |||
| 367 | ||||
| 368 | static void | |||
| 369 | read_disk_data(void) | |||
| 370 | { | |||
| 371 | GList *list; | |||
| 372 | DiskData *disk; | |||
| 373 | ||||
| 374 | for (list = disk_list; list; list = list->next) | |||
| 375 | { | |||
| 376 | disk = (DiskData *) list->data; | |||
| 377 | if (disk->subdisk_parent) | |||
| 378 | gkrellm_disk_subdisk_assign_data_by_name(disk->name, | |||
| 379 | disk->subdisk_parent, disk->rblk, disk->wblk); | |||
| 380 | else | |||
| 381 | gkrellm_disk_assign_data_by_name(disk->name, | |||
| 382 | disk->rblk, disk->wblk, disk->virtual); | |||
| 383 | } | |||
| 384 | } | |||
| 385 | ||||
| 386 | static gint | |||
| 387 | order_from_name(gchar *name) | |||
| 388 | { | |||
| 389 | return -1; | |||
| 390 | } | |||
| 391 | ||||
| 392 | static void | |||
| 393 | client_sys_disk_init(void) | |||
| 394 | { | |||
| 395 | gkrellm_disk_client_divert(read_disk_data, NULL((void*)0), order_from_name); | |||
| 396 | if (units_are_blocks) | |||
| 397 | gkrellm_disk_units_are_blocks(); | |||
| 398 | ||||
| 399 | /* Disk monitor config needs to know will be using assign by name | |||
| 400 | */ | |||
| 401 | gkrellm_disk_assign_data_by_name(NULL((void*)0), 0, 0, FALSE(0)); | |||
| 402 | } | |||
| 403 | ||||
| 404 | static void | |||
| 405 | client_disk_setup(gchar *line) | |||
| 406 | { | |||
| 407 | if (!strcmp(line, "units_are_blocks")__extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (line) && __builtin_constant_p ("units_are_blocks") && (__s1_len = strlen (line), __s2_len = strlen ("units_are_blocks" ), (!((size_t)(const void *)((line) + 1) - (size_t)(const void *)(line) == 1) || __s1_len >= 4) && (!((size_t)(const void *)(("units_are_blocks") + 1) - (size_t)(const void *)("units_are_blocks" ) == 1) || __s2_len >= 4)) ? __builtin_strcmp (line, "units_are_blocks" ) : (__builtin_constant_p (line) && ((size_t)(const void *)((line) + 1) - (size_t)(const void *)(line) == 1) && (__s1_len = strlen (line), __s1_len < 4) ? (__builtin_constant_p ("units_are_blocks") && ((size_t)(const void *)(("units_are_blocks" ) + 1) - (size_t)(const void *)("units_are_blocks") == 1) ? __builtin_strcmp (line, "units_are_blocks") : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) ("units_are_blocks" ); int __result = (((const unsigned char *) (const char *) (line ))[0] - __s2[0]); if (__s1_len > 0 && __result == 0 ) { __result = (((const unsigned char *) (const char *) (line ))[1] - __s2[1]); if (__s1_len > 1 && __result == 0 ) { __result = (((const unsigned char *) (const char *) (line ))[2] - __s2[2]); if (__s1_len > 2 && __result == 0 ) __result = (((const unsigned char *) (const char *) (line)) [3] - __s2[3]); } } __result; }))) : (__builtin_constant_p ("units_are_blocks" ) && ((size_t)(const void *)(("units_are_blocks") + 1 ) - (size_t)(const void *)("units_are_blocks") == 1) && (__s2_len = strlen ("units_are_blocks"), __s2_len < 4) ? ( __builtin_constant_p (line) && ((size_t)(const void * )((line) + 1) - (size_t)(const void *)(line) == 1) ? __builtin_strcmp (line, "units_are_blocks") : (- (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (line); int __result = (((const unsigned char *) (const char *) ("units_are_blocks" ))[0] - __s2[0]); if (__s2_len > 0 && __result == 0 ) { __result = (((const unsigned char *) (const char *) ("units_are_blocks" ))[1] - __s2[1]); if (__s2_len > 1 && __result == 0 ) { __result = (((const unsigned char *) (const char *) ("units_are_blocks" ))[2] - __s2[2]); if (__s2_len > 2 && __result == 0 ) __result = (((const unsigned char *) (const char *) ("units_are_blocks" ))[3] - __s2[3]); } } __result; })))) : __builtin_strcmp (line , "units_are_blocks")))); })) | |||
| 408 | units_are_blocks = TRUE(!(0)); | |||
| 409 | } | |||
| 410 | ||||
| 411 | /* ================================================================= */ | |||
| 412 | typedef struct | |||
| 413 | { | |||
| 414 | gchar *name; | |||
| 415 | gboolean up_event, | |||
| 416 | down_event; | |||
| 417 | ||||
| 418 | gint up_time; | |||
| 419 | ||||
| 420 | gulong rx, | |||
| 421 | tx; | |||
| 422 | } | |||
| 423 | NetData; | |||
| 424 | ||||
| 425 | static NetData *net_timer; | |||
| 426 | ||||
| 427 | static GList *net_list; | |||
| 428 | ||||
| 429 | static gchar *net_timer_name; | |||
| 430 | ||||
| 431 | static gboolean net_server_use_routed; | |||
| 432 | ||||
| 433 | static void | |||
| 434 | client_net_line_from_server(gchar *line) | |||
| 435 | { | |||
| 436 | GList *list; | |||
| 437 | NetData *net; | |||
| 438 | gchar name[32]; | |||
| 439 | guint64 rx, tx; | |||
| 440 | ||||
| 441 | sscanf(line, "%31s %" PRIu64"l" "u" " %" PRIu64"l" "u", name, &rx, &tx); | |||
| 442 | for (list = net_list; list; list = list->next) | |||
| 443 | { | |||
| 444 | net = (NetData *) list->data; | |||
| 445 | if (!strcmp(name, net->name)__extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (name) && __builtin_constant_p (net->name) && (__s1_len = strlen (name), __s2_len = strlen (net->name), (!((size_t)(const void *)((name) + 1) - (size_t)(const void * )(name) == 1) || __s1_len >= 4) && (!((size_t)(const void *)((net->name) + 1) - (size_t)(const void *)(net-> name) == 1) || __s2_len >= 4)) ? __builtin_strcmp (name, net ->name) : (__builtin_constant_p (name) && ((size_t )(const void *)((name) + 1) - (size_t)(const void *)(name) == 1) && (__s1_len = strlen (name), __s1_len < 4) ? ( __builtin_constant_p (net->name) && ((size_t)(const void *)((net->name) + 1) - (size_t)(const void *)(net-> name) == 1) ? __builtin_strcmp (name, net->name) : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (net->name); int __result = (((const unsigned char *) (const char *) (name))[0] - __s2[0]); if (__s1_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) (name))[1] - __s2[1]); if (__s1_len > 1 && __result == 0) { __result = (((const unsigned char *) (const char *) (name))[2] - __s2[2]); if (__s1_len > 2 && __result == 0) __result = (((const unsigned char * ) (const char *) (name))[3] - __s2[3]); } } __result; }))) : ( __builtin_constant_p (net->name) && ((size_t)(const void *)((net->name) + 1) - (size_t)(const void *)(net-> name) == 1) && (__s2_len = strlen (net->name), __s2_len < 4) ? (__builtin_constant_p (name) && ((size_t)( const void *)((name) + 1) - (size_t)(const void *)(name) == 1 ) ? __builtin_strcmp (name, net->name) : (- (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (name); int __result = (((const unsigned char *) (const char *) (net->name))[0] - __s2[0]); if (__s2_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) (net->name))[1] - __s2[1]); if (__s2_len > 1 && __result == 0) { __result = (((const unsigned char *) (const char *) (net->name))[2] - __s2[2]); if (__s2_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) (net->name))[3] - __s2[3]); } } __result; })))) : __builtin_strcmp (name, net->name)))); })) | |||
| 446 | { | |||
| 447 | net->rx = rx; | |||
| 448 | net->tx = tx; | |||
| 449 | break; | |||
| 450 | } | |||
| 451 | } | |||
| 452 | if (!list) | |||
| 453 | { | |||
| 454 | net = g_new0(NetData, 1)(NetData *) (__extension__ ({ gsize __n = (gsize) (1); gsize __s = sizeof (NetData); gpointer __p; if (__s == 1) __p = g_malloc0 (__n); else if (__builtin_constant_p (__n) && (__s == 0 || __n <= (9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc0 (__n * __s); else __p = g_malloc0_n (__n, __s); __p ; })); | |||
| 455 | net->name = g_strdup(name); | |||
| 456 | net_list = g_list_append(net_list, net); | |||
| 457 | net->rx = rx; | |||
| 458 | net->tx = tx; | |||
| 459 | ||||
| 460 | if (net_timer_name && !strcmp(net_timer_name, net->name)__extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (net_timer_name) && __builtin_constant_p (net->name ) && (__s1_len = strlen (net_timer_name), __s2_len = strlen (net->name), (!((size_t)(const void *)((net_timer_name) + 1) - (size_t)(const void *)(net_timer_name) == 1) || __s1_len >= 4) && (!((size_t)(const void *)((net->name) + 1) - (size_t)(const void *)(net->name) == 1) || __s2_len >= 4)) ? __builtin_strcmp (net_timer_name, net->name) : (__builtin_constant_p (net_timer_name) && ((size_t)( const void *)((net_timer_name) + 1) - (size_t)(const void *)( net_timer_name) == 1) && (__s1_len = strlen (net_timer_name ), __s1_len < 4) ? (__builtin_constant_p (net->name) && ((size_t)(const void *)((net->name) + 1) - (size_t)(const void *)(net->name) == 1) ? __builtin_strcmp (net_timer_name , net->name) : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (net->name); int __result = (((const unsigned char *) (const char *) (net_timer_name ))[0] - __s2[0]); if (__s1_len > 0 && __result == 0 ) { __result = (((const unsigned char *) (const char *) (net_timer_name ))[1] - __s2[1]); if (__s1_len > 1 && __result == 0 ) { __result = (((const unsigned char *) (const char *) (net_timer_name ))[2] - __s2[2]); if (__s1_len > 2 && __result == 0 ) __result = (((const unsigned char *) (const char *) (net_timer_name ))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p ( net->name) && ((size_t)(const void *)((net->name ) + 1) - (size_t)(const void *)(net->name) == 1) && (__s2_len = strlen (net->name), __s2_len < 4) ? (__builtin_constant_p (net_timer_name) && ((size_t)(const void *)((net_timer_name ) + 1) - (size_t)(const void *)(net_timer_name) == 1) ? __builtin_strcmp (net_timer_name, net->name) : (- (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (net_timer_name ); int __result = (((const unsigned char *) (const char *) (net ->name))[0] - __s2[0]); if (__s2_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) ( net->name))[1] - __s2[1]); if (__s2_len > 1 && __result == 0) { __result = (((const unsigned char *) (const char *) ( net->name))[2] - __s2[2]); if (__s2_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) (net ->name))[3] - __s2[3]); } } __result; })))) : __builtin_strcmp (net_timer_name, net->name)))); })) | |||
| 461 | net_timer = net; | |||
| 462 | } | |||
| 463 | } | |||
| 464 | ||||
| 465 | static void | |||
| 466 | client_net_routed_line_from_server(gchar *line) | |||
| 467 | { | |||
| 468 | GList *list; | |||
| 469 | NetData *net = NULL((void*)0); | |||
| 470 | gchar name[32]; | |||
| 471 | gboolean routed; | |||
| 472 | ||||
| 473 | sscanf(line, "%31s %d", name, &routed); | |||
| 474 | for (list = net_list; list; list = list->next) | |||
| 475 | { | |||
| 476 | net = (NetData *) list->data; | |||
| 477 | if (!strcmp(name, net->name)__extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (name) && __builtin_constant_p (net->name) && (__s1_len = strlen (name), __s2_len = strlen (net->name), (!((size_t)(const void *)((name) + 1) - (size_t)(const void * )(name) == 1) || __s1_len >= 4) && (!((size_t)(const void *)((net->name) + 1) - (size_t)(const void *)(net-> name) == 1) || __s2_len >= 4)) ? __builtin_strcmp (name, net ->name) : (__builtin_constant_p (name) && ((size_t )(const void *)((name) + 1) - (size_t)(const void *)(name) == 1) && (__s1_len = strlen (name), __s1_len < 4) ? ( __builtin_constant_p (net->name) && ((size_t)(const void *)((net->name) + 1) - (size_t)(const void *)(net-> name) == 1) ? __builtin_strcmp (name, net->name) : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (net->name); int __result = (((const unsigned char *) (const char *) (name))[0] - __s2[0]); if (__s1_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) (name))[1] - __s2[1]); if (__s1_len > 1 && __result == 0) { __result = (((const unsigned char *) (const char *) (name))[2] - __s2[2]); if (__s1_len > 2 && __result == 0) __result = (((const unsigned char * ) (const char *) (name))[3] - __s2[3]); } } __result; }))) : ( __builtin_constant_p (net->name) && ((size_t)(const void *)((net->name) + 1) - (size_t)(const void *)(net-> name) == 1) && (__s2_len = strlen (net->name), __s2_len < 4) ? (__builtin_constant_p (name) && ((size_t)( const void *)((name) + 1) - (size_t)(const void *)(name) == 1 ) ? __builtin_strcmp (name, net->name) : (- (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (name); int __result = (((const unsigned char *) (const char *) (net->name))[0] - __s2[0]); if (__s2_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) (net->name))[1] - __s2[1]); if (__s2_len > 1 && __result == 0) { __result = (((const unsigned char *) (const char *) (net->name))[2] - __s2[2]); if (__s2_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) (net->name))[3] - __s2[3]); } } __result; })))) : __builtin_strcmp (name, net->name)))); })) | |||
| 478 | break; | |||
| 479 | } | |||
| 480 | if (!list) | |||
| 481 | { | |||
| 482 | net = g_new0(NetData, 1)(NetData *) (__extension__ ({ gsize __n = (gsize) (1); gsize __s = sizeof (NetData); gpointer __p; if (__s == 1) __p = g_malloc0 (__n); else if (__builtin_constant_p (__n) && (__s == 0 || __n <= (9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc0 (__n * __s); else __p = g_malloc0_n (__n, __s); __p ; })); | |||
| 483 | net->name = g_strdup(name); | |||
| 484 | net_list = g_list_append(net_list, net); | |||
| 485 | } | |||
| 486 | if (net) | |||
| 487 | { | |||
| 488 | if (routed) | |||
| 489 | net->up_event = TRUE(!(0)); | |||
| 490 | else | |||
| 491 | net->down_event = TRUE(!(0)); | |||
| 492 | } | |||
| 493 | } | |||
| 494 | ||||
| 495 | gint | |||
| 496 | gkrellm_client_server_get_net_timer(void) | |||
| 497 | { | |||
| 498 | return net_timer ? net_timer->up_time : 0; | |||
| 499 | } | |||
| 500 | ||||
| 501 | static void | |||
| 502 | client_net_timer_line_from_server(gchar *line) | |||
| 503 | { | |||
| 504 | gchar name[32]; | |||
| 505 | ||||
| 506 | if (!net_timer) | |||
| 507 | return; | |||
| 508 | sscanf(line, "%s %d", name, &net_timer->up_time); | |||
| 509 | } | |||
| 510 | ||||
| 511 | static void | |||
| 512 | check_net_routes(void) | |||
| 513 | { | |||
| 514 | GList *list; | |||
| 515 | NetData *net; | |||
| 516 | ||||
| 517 | for (list = net_list; list; list = list->next) | |||
| 518 | { | |||
| 519 | net = (NetData *) list->data; | |||
| 520 | if (net->up_event || net->down_event) | |||
| 521 | gkrellm_net_routed_event(net->name, net->up_event); | |||
| 522 | net->up_event = net->down_event = FALSE(0); | |||
| 523 | } | |||
| 524 | } | |||
| 525 | ||||
| 526 | static void | |||
| 527 | read_net_data(void) | |||
| 528 | { | |||
| 529 | GList *list; | |||
| 530 | NetData *net; | |||
| 531 | ||||
| 532 | for (list = net_list; list; list = list->next) | |||
| 533 | { | |||
| 534 | net = (NetData *) list->data; | |||
| 535 | gkrellm_net_assign_data(net->name, net->rx, net->tx); | |||
| 536 | } | |||
| 537 | } | |||
| 538 | ||||
| 539 | /* gkrellmd to gkrellm server/client interface always uses the net routed | |||
| 540 | | mode regardless if the server uses routed in its sysdep code. | |||
| 541 | */ | |||
| 542 | static void | |||
| 543 | client_sys_net_init(void) | |||
| 544 | { | |||
| 545 | gkrellm_net_client_divert(read_net_data, check_net_routes, NULL((void*)0)); | |||
| 546 | gkrellm_net_use_routed(net_server_use_routed); | |||
| 547 | ||||
| 548 | if (net_timer_name) | |||
| 549 | gkrellm_net_server_has_timer(); | |||
| 550 | } | |||
| 551 | ||||
| 552 | static void | |||
| 553 | client_net_setup(gchar *line) | |||
| 554 | { | |||
| 555 | gchar buf[32]; | |||
| 556 | ||||
| 557 | /* This is the server sysdep net_use_routed value. The client <-> server | |||
| 558 | | link always uses routed mode. | |||
| 559 | */ | |||
| 560 | if (!strcmp(line, "net_use_routed")__extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (line) && __builtin_constant_p ("net_use_routed") && (__s1_len = strlen (line), __s2_len = strlen ("net_use_routed" ), (!((size_t)(const void *)((line) + 1) - (size_t)(const void *)(line) == 1) || __s1_len >= 4) && (!((size_t)(const void *)(("net_use_routed") + 1) - (size_t)(const void *)("net_use_routed" ) == 1) || __s2_len >= 4)) ? __builtin_strcmp (line, "net_use_routed" ) : (__builtin_constant_p (line) && ((size_t)(const void *)((line) + 1) - (size_t)(const void *)(line) == 1) && (__s1_len = strlen (line), __s1_len < 4) ? (__builtin_constant_p ("net_use_routed") && ((size_t)(const void *)(("net_use_routed" ) + 1) - (size_t)(const void *)("net_use_routed") == 1) ? __builtin_strcmp (line, "net_use_routed") : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) ("net_use_routed" ); int __result = (((const unsigned char *) (const char *) (line ))[0] - __s2[0]); if (__s1_len > 0 && __result == 0 ) { __result = (((const unsigned char *) (const char *) (line ))[1] - __s2[1]); if (__s1_len > 1 && __result == 0 ) { __result = (((const unsigned char *) (const char *) (line ))[2] - __s2[2]); if (__s1_len > 2 && __result == 0 ) __result = (((const unsigned char *) (const char *) (line)) [3] - __s2[3]); } } __result; }))) : (__builtin_constant_p ("net_use_routed" ) && ((size_t)(const void *)(("net_use_routed") + 1) - (size_t)(const void *)("net_use_routed") == 1) && (__s2_len = strlen ("net_use_routed"), __s2_len < 4) ? (__builtin_constant_p (line) && ((size_t)(const void *)((line) + 1) - (size_t )(const void *)(line) == 1) ? __builtin_strcmp (line, "net_use_routed" ) : (- (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (line); int __result = (((const unsigned char *) (const char *) ("net_use_routed"))[0] - __s2[0]); if (__s2_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) ("net_use_routed"))[1] - __s2 [1]); if (__s2_len > 1 && __result == 0) { __result = (((const unsigned char *) (const char *) ("net_use_routed" ))[2] - __s2[2]); if (__s2_len > 2 && __result == 0 ) __result = (((const unsigned char *) (const char *) ("net_use_routed" ))[3] - __s2[3]); } } __result; })))) : __builtin_strcmp (line , "net_use_routed")))); })) | |||
| 561 | net_server_use_routed = TRUE(!(0)); | |||
| 562 | ||||
| 563 | if (!strncmp(line, "net_timer", 9)(__extension__ (__builtin_constant_p (9) && ((__builtin_constant_p (line) && strlen (line) < ((size_t) (9))) || (__builtin_constant_p ("net_timer") && strlen ("net_timer") < ((size_t) (9)))) ? __extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (line) && __builtin_constant_p ("net_timer") && (__s1_len = strlen (line), __s2_len = strlen ("net_timer"), ( !((size_t)(const void *)((line) + 1) - (size_t)(const void *) (line) == 1) || __s1_len >= 4) && (!((size_t)(const void *)(("net_timer") + 1) - (size_t)(const void *)("net_timer" ) == 1) || __s2_len >= 4)) ? __builtin_strcmp (line, "net_timer" ) : (__builtin_constant_p (line) && ((size_t)(const void *)((line) + 1) - (size_t)(const void *)(line) == 1) && (__s1_len = strlen (line), __s1_len < 4) ? (__builtin_constant_p ("net_timer") && ((size_t)(const void *)(("net_timer" ) + 1) - (size_t)(const void *)("net_timer") == 1) ? __builtin_strcmp (line, "net_timer") : (__extension__ ({ const unsigned char * __s2 = (const unsigned char *) (const char *) ("net_timer"); int __result = (((const unsigned char *) (const char *) (line))[ 0] - __s2[0]); if (__s1_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) (line))[ 1] - __s2[1]); if (__s1_len > 1 && __result == 0) { __result = (((const unsigned char *) (const char *) (line))[ 2] - __s2[2]); if (__s1_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) (line))[3] - __s2 [3]); } } __result; }))) : (__builtin_constant_p ("net_timer" ) && ((size_t)(const void *)(("net_timer") + 1) - (size_t )(const void *)("net_timer") == 1) && (__s2_len = strlen ("net_timer"), __s2_len < 4) ? (__builtin_constant_p (line ) && ((size_t)(const void *)((line) + 1) - (size_t)(const void *)(line) == 1) ? __builtin_strcmp (line, "net_timer") : (- (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (line); int __result = (((const unsigned char *) (const char *) ("net_timer"))[0] - __s2[0]); if (__s2_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) ("net_timer"))[1] - __s2[1]); if (__s2_len > 1 && __result == 0) { __result = (((const unsigned char *) (const char *) ("net_timer"))[2] - __s2[2]); if (__s2_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) ("net_timer"))[3] - __s2[3]); } } __result ; })))) : __builtin_strcmp (line, "net_timer")))); }) : strncmp (line, "net_timer", 9)))) | |||
| 564 | { | |||
| 565 | sscanf(line, "%*s %31s\n", buf); | |||
| 566 | net_timer_name = g_strdup(buf); | |||
| 567 | } | |||
| 568 | } | |||
| 569 | ||||
| 570 | ||||
| 571 | /* ================================================================= */ | |||
| 572 | #include "../src/inet.h" | |||
| 573 | ||||
| 574 | static GList *inet_list; | |||
| 575 | ||||
| 576 | static gboolean inet_unsupported; | |||
| 577 | ||||
| 578 | static void | |||
| 579 | client_inet_line_from_server(gchar *line) | |||
| 580 | { | |||
| 581 | GList *list; | |||
| 582 | ActiveTCP tcp, *t; | |||
| 583 | gchar *ap, *aap; | |||
| 584 | #if defined(INET6) && defined(HAVE_GETADDRINFO1) | |||
| 585 | struct addrinfo hints, *res; | |||
| 586 | gchar buf[NI_MAXHOST1025]; | |||
| 587 | #else | |||
| 588 | gchar buf[128]; | |||
| 589 | #endif | |||
| 590 | gint n, slen; | |||
| 591 | ||||
| 592 | if (_GK.debug_level & DEBUG_INET0x800) | |||
| ||||
| 593 | g_print("inet server: %s\n", line); | |||
| 594 | if (*(line + 1) == '0') | |||
| 595 | { | |||
| 596 | n = sscanf(line + 3, "%x %127[^:]:%x", &tcp.local_port, | |||
| 597 | buf, &tcp.remote_port); | |||
| 598 | if (n != 3 || inet_aton(buf, &tcp.remote_addr) == 0) | |||
| 599 | return; | |||
| 600 | tcp.family = AF_INET2; | |||
| 601 | } | |||
| 602 | #if defined(INET6) && defined(HAVE_GETADDRINFO1) | |||
| 603 | else if (*(line + 1) == '6') | |||
| 604 | { | |||
| 605 | #define STR(x)"x" #x | |||
| 606 | #define XSTR(x)"x" STR(x)"x" | |||
| 607 | n = sscanf(line + 3, "%x [%" XSTR(NI_MAXHOST)"1025" "[^]]]:%x", | |||
| 608 | &tcp.local_port, buf, &tcp.remote_port); | |||
| 609 | if (n != 3) | |||
| 610 | return; | |||
| 611 | memset(&hints, 0, sizeof(hints)); | |||
| 612 | hints.ai_family = AF_INET610; | |||
| 613 | hints.ai_socktype = SOCK_STREAMSOCK_STREAM; | |||
| 614 | hints.ai_flags = AI_PASSIVE0x0001 | AI_NUMERICHOST0x0004; | |||
| 615 | if (getaddrinfo(buf, NULL((void*)0), &hints, &res) != 0) | |||
| 616 | return; | |||
| 617 | memcpy(&tcp.remote_addr6, | |||
| 618 | &((struct sockaddr_in6 *)res->ai_addr)->sin6_addr, | |||
| 619 | sizeof(struct in6_addr)); | |||
| 620 | freeaddrinfo(res); | |||
| 621 | tcp.family = AF_INET610; | |||
| 622 | } | |||
| 623 | #endif | |||
| 624 | if (*line == '+') | |||
| 625 | { | |||
| 626 | t = g_new0(ActiveTCP, 1)(ActiveTCP *) (__extension__ ({ gsize __n = (gsize) (1); gsize __s = sizeof (ActiveTCP); gpointer __p; if (__s == 1) __p = g_malloc0 (__n); else if (__builtin_constant_p (__n) && (__s == 0 || __n <= (9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc0 (__n * __s); else __p = g_malloc0_n (__n, __s); __p ; })); | |||
| 627 | *t = tcp; | |||
| 628 | inet_list = g_list_append(inet_list, t); | |||
| 629 | } | |||
| 630 | else if (*line == '-') | |||
| 631 | { | |||
| 632 | for (list = inet_list; list; list = list->next) | |||
| 633 | { | |||
| 634 | t = (ActiveTCP *) list->data; | |||
| 635 | if (t->family == AF_INET2) | |||
| 636 | { | |||
| 637 | ap = (gchar *) &t->remote_addr; | |||
| 638 | aap = (gchar *) &tcp.remote_addr; | |||
| 639 | slen = sizeof(struct in_addr); | |||
| 640 | } | |||
| 641 | #if defined(INET6) | |||
| 642 | else if (t->family == AF_INET610) | |||
| 643 | { | |||
| 644 | ap = (gchar *) &t->remote_addr6; | |||
| 645 | aap = (gchar *) &tcp.remote_addr6; | |||
| 646 | slen = sizeof(struct in6_addr); | |||
| 647 | } | |||
| 648 | #endif | |||
| 649 | else | |||
| 650 | return; | |||
| 651 | if ( memcmp(aap, ap, slen) == 0 | |||
| 652 | && tcp.remote_port == t->remote_port | |||
| ||||
| 653 | && tcp.local_port == t->local_port | |||
| 654 | ) | |||
| 655 | { | |||
| 656 | g_free(t); | |||
| 657 | inet_list = g_list_remove_link(inet_list, list); | |||
| 658 | break; | |||
| 659 | } | |||
| 660 | } | |||
| 661 | } | |||
| 662 | } | |||
| 663 | ||||
| 664 | static void | |||
| 665 | read_tcp_data(void) | |||
| 666 | { | |||
| 667 | GList *list; | |||
| 668 | ActiveTCP *tcp; | |||
| 669 | ||||
| 670 | for (list = inet_list; list; list = list->next) | |||
| 671 | { | |||
| 672 | tcp = (ActiveTCP *) list->data; | |||
| 673 | gkrellm_inet_log_tcp_port_data(tcp); | |||
| 674 | } | |||
| 675 | } | |||
| 676 | ||||
| 677 | static void | |||
| 678 | client_inet_reset(void) | |||
| 679 | { | |||
| 680 | gkrellm_free_glist_and_data(&inet_list); | |||
| 681 | } | |||
| 682 | ||||
| 683 | static void | |||
| 684 | client_sys_inet_init(void) | |||
| 685 | { | |||
| 686 | if (inet_unsupported) | |||
| 687 | return; | |||
| 688 | gkrellm_inet_client_divert(read_tcp_data); | |||
| 689 | } | |||
| 690 | ||||
| 691 | static void | |||
| 692 | client_inet_setup(gchar *line) | |||
| 693 | { | |||
| 694 | if (!strcmp(line, "inet_unsupported")__extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (line) && __builtin_constant_p ("inet_unsupported") && (__s1_len = strlen (line), __s2_len = strlen ("inet_unsupported" ), (!((size_t)(const void *)((line) + 1) - (size_t)(const void *)(line) == 1) || __s1_len >= 4) && (!((size_t)(const void *)(("inet_unsupported") + 1) - (size_t)(const void *)("inet_unsupported" ) == 1) || __s2_len >= 4)) ? __builtin_strcmp (line, "inet_unsupported" ) : (__builtin_constant_p (line) && ((size_t)(const void *)((line) + 1) - (size_t)(const void *)(line) == 1) && (__s1_len = strlen (line), __s1_len < 4) ? (__builtin_constant_p ("inet_unsupported") && ((size_t)(const void *)(("inet_unsupported" ) + 1) - (size_t)(const void *)("inet_unsupported") == 1) ? __builtin_strcmp (line, "inet_unsupported") : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) ("inet_unsupported" ); int __result = (((const unsigned char *) (const char *) (line ))[0] - __s2[0]); if (__s1_len > 0 && __result == 0 ) { __result = (((const unsigned char *) (const char *) (line ))[1] - __s2[1]); if (__s1_len > 1 && __result == 0 ) { __result = (((const unsigned char *) (const char *) (line ))[2] - __s2[2]); if (__s1_len > 2 && __result == 0 ) __result = (((const unsigned char *) (const char *) (line)) [3] - __s2[3]); } } __result; }))) : (__builtin_constant_p ("inet_unsupported" ) && ((size_t)(const void *)(("inet_unsupported") + 1 ) - (size_t)(const void *)("inet_unsupported") == 1) && (__s2_len = strlen ("inet_unsupported"), __s2_len < 4) ? ( __builtin_constant_p (line) && ((size_t)(const void * )((line) + 1) - (size_t)(const void *)(line) == 1) ? __builtin_strcmp (line, "inet_unsupported") : (- (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (line); int __result = (((const unsigned char *) (const char *) ("inet_unsupported" ))[0] - __s2[0]); if (__s2_len > 0 && __result == 0 ) { __result = (((const unsigned char *) (const char *) ("inet_unsupported" ))[1] - __s2[1]); if (__s2_len > 1 && __result == 0 ) { __result = (((const unsigned char *) (const char *) ("inet_unsupported" ))[2] - __s2[2]); if (__s2_len > 2 && __result == 0 ) __result = (((const unsigned char *) (const char *) ("inet_unsupported" ))[3] - __s2[3]); } } __result; })))) : __builtin_strcmp (line , "inet_unsupported")))); })) | |||
| 695 | inet_unsupported = TRUE(!(0)); | |||
| 696 | } | |||
| 697 | ||||
| 698 | /* ================================================================= */ | |||
| 699 | struct | |||
| 700 | { | |||
| 701 | guint64 total, | |||
| 702 | used, | |||
| 703 | free, | |||
| 704 | shared, | |||
| 705 | buffers, | |||
| 706 | cached; | |||
| 707 | guint64 swap_total, | |||
| 708 | swap_used; | |||
| 709 | gulong swap_in, | |||
| 710 | swap_out; | |||
| 711 | } | |||
| 712 | mem; | |||
| 713 | ||||
| 714 | static void | |||
| 715 | client_mem_line_from_server(gchar *line) | |||
| 716 | { | |||
| 717 | sscanf(line, "%" PRIu64"l" "u" "%" PRIu64"l" "u" " %" PRIu64"l" "u" " %" PRIu64"l" "u" " %" PRIu64"l" "u" " %" PRIu64"l" "u", | |||
| 718 | &mem.total, &mem.used, &mem.free, | |||
| 719 | &mem.shared, &mem.buffers, &mem.cached); | |||
| 720 | } | |||
| 721 | ||||
| 722 | static void | |||
| 723 | client_swap_line_from_server(gchar *line) | |||
| 724 | { | |||
| 725 | sscanf(line, "%" PRIu64"l" "u" " %" PRIu64"l" "u" " %lu %lu", | |||
| 726 | &mem.swap_total, &mem.swap_used, | |||
| 727 | &mem.swap_in, &mem.swap_out); | |||
| 728 | } | |||
| 729 | ||||
| 730 | static void | |||
| 731 | read_mem_data(void) | |||
| 732 | { | |||
| 733 | gkrellm_mem_assign_data(mem.total, mem.used, mem.free, mem.shared, | |||
| 734 | mem.buffers, mem.cached); | |||
| 735 | } | |||
| 736 | ||||
| 737 | static void | |||
| 738 | read_swap_data(void) | |||
| 739 | { | |||
| 740 | gkrellm_swap_assign_data(mem.swap_total, mem.swap_used, | |||
| 741 | mem.swap_in, mem.swap_out); | |||
| 742 | } | |||
| 743 | ||||
| 744 | static void | |||
| 745 | client_sys_mem_init(void) | |||
| 746 | { | |||
| 747 | gkrellm_mem_client_divert(read_mem_data, read_swap_data); | |||
| 748 | } | |||
| 749 | ||||
| 750 | /* ================================================================= */ | |||
| 751 | typedef struct | |||
| 752 | { | |||
| 753 | gchar *directory, | |||
| 754 | *device, | |||
| 755 | *type; | |||
| 756 | gulong blocks, | |||
| 757 | bavail, | |||
| 758 | bfree, | |||
| 759 | bsize; | |||
| 760 | } | |||
| 761 | Mount; | |||
| 762 | ||||
| 763 | static GList *mounts_list, | |||
| 764 | *fstab_list; | |||
| 765 | ||||
| 766 | static gboolean fstab_modified, | |||
| 767 | mounting_unsupported; | |||
| 768 | ||||
| 769 | static void | |||
| 770 | client_fstab_line_from_server(gchar *line) | |||
| 771 | { | |||
| 772 | GList *list; | |||
| 773 | Mount *m; | |||
| 774 | gchar dir[128], dev[64], type[64]; | |||
| 775 | ||||
| 776 | if (!strcmp(line, ".clear")__extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (line) && __builtin_constant_p (".clear") && (__s1_len = strlen (line), __s2_len = strlen (".clear"), (!( (size_t)(const void *)((line) + 1) - (size_t)(const void *)(line ) == 1) || __s1_len >= 4) && (!((size_t)(const void *)((".clear") + 1) - (size_t)(const void *)(".clear") == 1) || __s2_len >= 4)) ? __builtin_strcmp (line, ".clear") : (__builtin_constant_p (line) && ((size_t)(const void *)((line) + 1) - (size_t )(const void *)(line) == 1) && (__s1_len = strlen (line ), __s1_len < 4) ? (__builtin_constant_p (".clear") && ((size_t)(const void *)((".clear") + 1) - (size_t)(const void *)(".clear") == 1) ? __builtin_strcmp (line, ".clear") : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (".clear"); int __result = (((const unsigned char *) (const char *) (line))[0] - __s2[0]); if (__s1_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) (line))[1] - __s2[1]); if (__s1_len > 1 && __result == 0) { __result = (((const unsigned char *) (const char *) (line))[2] - __s2[2]); if (__s1_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) (line))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p (".clear") && ((size_t)(const void *)((".clear") + 1 ) - (size_t)(const void *)(".clear") == 1) && (__s2_len = strlen (".clear"), __s2_len < 4) ? (__builtin_constant_p (line) && ((size_t)(const void *)((line) + 1) - (size_t )(const void *)(line) == 1) ? __builtin_strcmp (line, ".clear" ) : (- (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (line); int __result = (((const unsigned char *) (const char *) (".clear"))[0] - __s2[0]); if (__s2_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) (".clear"))[1] - __s2[1]); if (__s2_len > 1 && __result == 0) { __result = (((const unsigned char *) (const char *) (".clear"))[2] - __s2[2]); if (__s2_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) (".clear"))[3] - __s2[3]); } } __result ; })))) : __builtin_strcmp (line, ".clear")))); })) | |||
| 777 | { | |||
| 778 | for (list = fstab_list; list; list = list->next) | |||
| 779 | { | |||
| 780 | m = (Mount *) list->data; | |||
| 781 | g_free(m->directory); | |||
| 782 | g_free(m->device); | |||
| 783 | g_free(m->type); | |||
| 784 | g_free(m); | |||
| 785 | } | |||
| 786 | g_list_free(fstab_list); | |||
| 787 | fstab_list = NULL((void*)0); | |||
| 788 | fstab_modified = TRUE(!(0)); | |||
| 789 | } | |||
| 790 | else | |||
| 791 | { | |||
| 792 | m = g_new0(Mount, 1)(Mount *) (__extension__ ({ gsize __n = (gsize) (1); gsize __s = sizeof (Mount); gpointer __p; if (__s == 1) __p = g_malloc0 (__n); else if (__builtin_constant_p (__n) && (__s == 0 || __n <= (9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc0 (__n * __s); else __p = g_malloc0_n (__n, __s); __p ; })); | |||
| 793 | sscanf(line, "%127s %63s %63s", dir, dev, type); | |||
| 794 | m->directory = g_strdup(dir); | |||
| 795 | m->device = g_strdup(dev); | |||
| 796 | m->type = g_strdup(type); | |||
| 797 | fstab_list = g_list_append(fstab_list, m); | |||
| 798 | } | |||
| 799 | } | |||
| 800 | ||||
| 801 | static void | |||
| 802 | client_mounts_line_from_server(gchar *line) | |||
| 803 | { | |||
| 804 | GList *list; | |||
| 805 | Mount *m; | |||
| 806 | gchar dir[128], dev[64], type[64]; | |||
| 807 | ||||
| 808 | if (!strcmp(line, ".clear")__extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (line) && __builtin_constant_p (".clear") && (__s1_len = strlen (line), __s2_len = strlen (".clear"), (!( (size_t)(const void *)((line) + 1) - (size_t)(const void *)(line ) == 1) || __s1_len >= 4) && (!((size_t)(const void *)((".clear") + 1) - (size_t)(const void *)(".clear") == 1) || __s2_len >= 4)) ? __builtin_strcmp (line, ".clear") : (__builtin_constant_p (line) && ((size_t)(const void *)((line) + 1) - (size_t )(const void *)(line) == 1) && (__s1_len = strlen (line ), __s1_len < 4) ? (__builtin_constant_p (".clear") && ((size_t)(const void *)((".clear") + 1) - (size_t)(const void *)(".clear") == 1) ? __builtin_strcmp (line, ".clear") : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (".clear"); int __result = (((const unsigned char *) (const char *) (line))[0] - __s2[0]); if (__s1_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) (line))[1] - __s2[1]); if (__s1_len > 1 && __result == 0) { __result = (((const unsigned char *) (const char *) (line))[2] - __s2[2]); if (__s1_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) (line))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p (".clear") && ((size_t)(const void *)((".clear") + 1 ) - (size_t)(const void *)(".clear") == 1) && (__s2_len = strlen (".clear"), __s2_len < 4) ? (__builtin_constant_p (line) && ((size_t)(const void *)((line) + 1) - (size_t )(const void *)(line) == 1) ? __builtin_strcmp (line, ".clear" ) : (- (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (line); int __result = (((const unsigned char *) (const char *) (".clear"))[0] - __s2[0]); if (__s2_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) (".clear"))[1] - __s2[1]); if (__s2_len > 1 && __result == 0) { __result = (((const unsigned char *) (const char *) (".clear"))[2] - __s2[2]); if (__s2_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) (".clear"))[3] - __s2[3]); } } __result ; })))) : __builtin_strcmp (line, ".clear")))); })) | |||
| 809 | { | |||
| 810 | for (list = mounts_list; list; list = list->next) | |||
| 811 | { | |||
| 812 | m = (Mount *) list->data; | |||
| 813 | g_free(m->directory); | |||
| 814 | g_free(m->device); | |||
| 815 | g_free(m->type); | |||
| 816 | g_free(m); | |||
| 817 | } | |||
| 818 | g_list_free(mounts_list); | |||
| 819 | mounts_list = NULL((void*)0); | |||
| 820 | } | |||
| 821 | else | |||
| 822 | { | |||
| 823 | m = g_new0(Mount, 1)(Mount *) (__extension__ ({ gsize __n = (gsize) (1); gsize __s = sizeof (Mount); gpointer __p; if (__s == 1) __p = g_malloc0 (__n); else if (__builtin_constant_p (__n) && (__s == 0 || __n <= (9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc0 (__n * __s); else __p = g_malloc0_n (__n, __s); __p ; })); | |||
| 824 | sscanf(line, "%127s %63s %63s %lu %lu %lu %lu", dir, dev, type, | |||
| 825 | &m->blocks, &m->bavail, &m->bfree, &m->bsize); | |||
| 826 | m->directory = g_strdup(dir); | |||
| 827 | m->device = g_strdup(dev); | |||
| 828 | m->type = g_strdup(type); | |||
| 829 | mounts_list = g_list_append(mounts_list, m); | |||
| 830 | } | |||
| 831 | } | |||
| 832 | ||||
| 833 | static void | |||
| 834 | client_fs_line_from_server(gchar *line) | |||
| 835 | { | |||
| 836 | GList *list; | |||
| 837 | Mount *m; | |||
| 838 | gchar dir[128], dev[64]; | |||
| 839 | gulong blocks, bavail, bfree, bsize; | |||
| 840 | ||||
| 841 | sscanf(line, "%127s %63s %lu %lu %lu %lu", dir, dev, | |||
| 842 | &blocks, &bavail, &bfree, &bsize); | |||
| 843 | for (list = mounts_list; list; list = list->next) | |||
| 844 | { | |||
| 845 | m = (Mount *) list->data; | |||
| 846 | if (!strcmp(m->directory, dir)__extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (m->directory) && __builtin_constant_p (dir) && (__s1_len = strlen (m->directory), __s2_len = strlen (dir ), (!((size_t)(const void *)((m->directory) + 1) - (size_t )(const void *)(m->directory) == 1) || __s1_len >= 4) && (!((size_t)(const void *)((dir) + 1) - (size_t)(const void * )(dir) == 1) || __s2_len >= 4)) ? __builtin_strcmp (m-> directory, dir) : (__builtin_constant_p (m->directory) && ((size_t)(const void *)((m->directory) + 1) - (size_t)(const void *)(m->directory) == 1) && (__s1_len = strlen (m->directory), __s1_len < 4) ? (__builtin_constant_p ( dir) && ((size_t)(const void *)((dir) + 1) - (size_t) (const void *)(dir) == 1) ? __builtin_strcmp (m->directory , dir) : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (dir); int __result = (((const unsigned char *) (const char *) (m->directory))[0] - __s2 [0]); if (__s1_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) (m->directory) )[1] - __s2[1]); if (__s1_len > 1 && __result == 0 ) { __result = (((const unsigned char *) (const char *) (m-> directory))[2] - __s2[2]); if (__s1_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) (m ->directory))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p (dir) && ((size_t)(const void *)((dir) + 1) - (size_t )(const void *)(dir) == 1) && (__s2_len = strlen (dir ), __s2_len < 4) ? (__builtin_constant_p (m->directory) && ((size_t)(const void *)((m->directory) + 1) - ( size_t)(const void *)(m->directory) == 1) ? __builtin_strcmp (m->directory, dir) : (- (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (m->directory ); int __result = (((const unsigned char *) (const char *) (dir ))[0] - __s2[0]); if (__s2_len > 0 && __result == 0 ) { __result = (((const unsigned char *) (const char *) (dir) )[1] - __s2[1]); if (__s2_len > 1 && __result == 0 ) { __result = (((const unsigned char *) (const char *) (dir) )[2] - __s2[2]); if (__s2_len > 2 && __result == 0 ) __result = (((const unsigned char *) (const char *) (dir))[ 3] - __s2[3]); } } __result; })))) : __builtin_strcmp (m-> directory, dir)))); }) && !strcmp(m->device, dev)__extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (m->device) && __builtin_constant_p (dev) && (__s1_len = strlen (m->device), __s2_len = strlen (dev), ( !((size_t)(const void *)((m->device) + 1) - (size_t)(const void *)(m->device) == 1) || __s1_len >= 4) && ( !((size_t)(const void *)((dev) + 1) - (size_t)(const void *)( dev) == 1) || __s2_len >= 4)) ? __builtin_strcmp (m->device , dev) : (__builtin_constant_p (m->device) && ((size_t )(const void *)((m->device) + 1) - (size_t)(const void *)( m->device) == 1) && (__s1_len = strlen (m->device ), __s1_len < 4) ? (__builtin_constant_p (dev) && ( (size_t)(const void *)((dev) + 1) - (size_t)(const void *)(dev ) == 1) ? __builtin_strcmp (m->device, dev) : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (dev); int __result = (((const unsigned char *) (const char *) (m->device))[0] - __s2[0]); if (__s1_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) (m->device))[1] - __s2[1]); if (__s1_len > 1 && __result == 0) { __result = (((const unsigned char *) (const char *) (m->device))[2] - __s2[2]); if (__s1_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) (m->device))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p (dev) && ((size_t)(const void *)((dev) + 1) - (size_t )(const void *)(dev) == 1) && (__s2_len = strlen (dev ), __s2_len < 4) ? (__builtin_constant_p (m->device) && ((size_t)(const void *)((m->device) + 1) - (size_t)(const void *)(m->device) == 1) ? __builtin_strcmp (m->device , dev) : (- (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (m->device); int __result = (((const unsigned char *) (const char *) (dev))[0] - __s2[ 0]); if (__s2_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) (dev))[1] - __s2[ 1]); if (__s2_len > 1 && __result == 0) { __result = (((const unsigned char *) (const char *) (dev))[2] - __s2[ 2]); if (__s2_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) (dev))[3] - __s2[3] ); } } __result; })))) : __builtin_strcmp (m->device, dev) ))); })) | |||
| 847 | { | |||
| 848 | m->blocks = blocks; | |||
| 849 | m->bavail = bavail; | |||
| 850 | m->bfree = bfree; | |||
| 851 | m->bsize = bsize; | |||
| 852 | break; | |||
| 853 | } | |||
| 854 | } | |||
| 855 | } | |||
| 856 | ||||
| 857 | static void | |||
| 858 | get_fsusage(gpointer fs, gchar *dir) | |||
| 859 | { | |||
| 860 | GList *list; | |||
| 861 | Mount *m; | |||
| 862 | ||||
| 863 | for (list = mounts_list; list; list = list->next) | |||
| 864 | { | |||
| 865 | m = (Mount *) list->data; | |||
| 866 | if (!strcmp(m->directory, dir)__extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (m->directory) && __builtin_constant_p (dir) && (__s1_len = strlen (m->directory), __s2_len = strlen (dir ), (!((size_t)(const void *)((m->directory) + 1) - (size_t )(const void *)(m->directory) == 1) || __s1_len >= 4) && (!((size_t)(const void *)((dir) + 1) - (size_t)(const void * )(dir) == 1) || __s2_len >= 4)) ? __builtin_strcmp (m-> directory, dir) : (__builtin_constant_p (m->directory) && ((size_t)(const void *)((m->directory) + 1) - (size_t)(const void *)(m->directory) == 1) && (__s1_len = strlen (m->directory), __s1_len < 4) ? (__builtin_constant_p ( dir) && ((size_t)(const void *)((dir) + 1) - (size_t) (const void *)(dir) == 1) ? __builtin_strcmp (m->directory , dir) : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (dir); int __result = (((const unsigned char *) (const char *) (m->directory))[0] - __s2 [0]); if (__s1_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) (m->directory) )[1] - __s2[1]); if (__s1_len > 1 && __result == 0 ) { __result = (((const unsigned char *) (const char *) (m-> directory))[2] - __s2[2]); if (__s1_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) (m ->directory))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p (dir) && ((size_t)(const void *)((dir) + 1) - (size_t )(const void *)(dir) == 1) && (__s2_len = strlen (dir ), __s2_len < 4) ? (__builtin_constant_p (m->directory) && ((size_t)(const void *)((m->directory) + 1) - ( size_t)(const void *)(m->directory) == 1) ? __builtin_strcmp (m->directory, dir) : (- (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (m->directory ); int __result = (((const unsigned char *) (const char *) (dir ))[0] - __s2[0]); if (__s2_len > 0 && __result == 0 ) { __result = (((const unsigned char *) (const char *) (dir) )[1] - __s2[1]); if (__s2_len > 1 && __result == 0 ) { __result = (((const unsigned char *) (const char *) (dir) )[2] - __s2[2]); if (__s2_len > 2 && __result == 0 ) __result = (((const unsigned char *) (const char *) (dir))[ 3] - __s2[3]); } } __result; })))) : __builtin_strcmp (m-> directory, dir)))); })) | |||
| 867 | { | |||
| 868 | gkrellm_fs_assign_fsusage_data(fs, m->blocks, m->bavail, | |||
| 869 | m->bfree, m->bsize); | |||
| 870 | break; | |||
| 871 | } | |||
| 872 | } | |||
| 873 | } | |||
| 874 | ||||
| 875 | static void | |||
| 876 | get_mounts_list(void) | |||
| 877 | { | |||
| 878 | GList *list; | |||
| 879 | Mount *m; | |||
| 880 | ||||
| 881 | for (list = mounts_list; list; list = list->next) | |||
| 882 | { | |||
| 883 | m = (Mount *) list->data; | |||
| 884 | gkrellm_fs_add_to_mounts_list(m->directory, m->device, m->type); | |||
| 885 | } | |||
| 886 | } | |||
| 887 | ||||
| 888 | static void | |||
| 889 | get_fstab_list(void) | |||
| 890 | { | |||
| 891 | GList *list; | |||
| 892 | Mount *m; | |||
| 893 | ||||
| 894 | for (list = fstab_list; list; list = list->next) | |||
| 895 | { | |||
| 896 | m = (Mount *) list->data; | |||
| 897 | gkrellm_fs_add_to_fstab_list(m->directory, m->device, | |||
| 898 | m->type, "none" /* options NA since no mounting */ ); | |||
| 899 | } | |||
| 900 | fstab_modified = FALSE(0); | |||
| 901 | } | |||
| 902 | ||||
| 903 | static gboolean | |||
| 904 | get_fstab_modified(void) | |||
| 905 | { | |||
| 906 | return fstab_modified; | |||
| 907 | } | |||
| 908 | ||||
| 909 | static void | |||
| 910 | client_sys_fs_init(void) | |||
| 911 | { | |||
| 912 | gkrellm_fs_client_divert(get_fsusage, get_mounts_list, | |||
| 913 | get_fstab_list, get_fstab_modified); | |||
| 914 | if (mounting_unsupported) | |||
| 915 | gkrellm_fs_mounting_unsupported(); | |||
| 916 | } | |||
| 917 | ||||
| 918 | static void | |||
| 919 | client_fs_setup(gchar *line) | |||
| 920 | { | |||
| 921 | if (!strcmp(line, "mounting_unsupported")__extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (line) && __builtin_constant_p ("mounting_unsupported" ) && (__s1_len = strlen (line), __s2_len = strlen ("mounting_unsupported" ), (!((size_t)(const void *)((line) + 1) - (size_t)(const void *)(line) == 1) || __s1_len >= 4) && (!((size_t)(const void *)(("mounting_unsupported") + 1) - (size_t)(const void * )("mounting_unsupported") == 1) || __s2_len >= 4)) ? __builtin_strcmp (line, "mounting_unsupported") : (__builtin_constant_p (line ) && ((size_t)(const void *)((line) + 1) - (size_t)(const void *)(line) == 1) && (__s1_len = strlen (line), __s1_len < 4) ? (__builtin_constant_p ("mounting_unsupported") && ((size_t)(const void *)(("mounting_unsupported") + 1) - (size_t )(const void *)("mounting_unsupported") == 1) ? __builtin_strcmp (line, "mounting_unsupported") : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) ("mounting_unsupported" ); int __result = (((const unsigned char *) (const char *) (line ))[0] - __s2[0]); if (__s1_len > 0 && __result == 0 ) { __result = (((const unsigned char *) (const char *) (line ))[1] - __s2[1]); if (__s1_len > 1 && __result == 0 ) { __result = (((const unsigned char *) (const char *) (line ))[2] - __s2[2]); if (__s1_len > 2 && __result == 0 ) __result = (((const unsigned char *) (const char *) (line)) [3] - __s2[3]); } } __result; }))) : (__builtin_constant_p ("mounting_unsupported" ) && ((size_t)(const void *)(("mounting_unsupported") + 1) - (size_t)(const void *)("mounting_unsupported") == 1) && (__s2_len = strlen ("mounting_unsupported"), __s2_len < 4 ) ? (__builtin_constant_p (line) && ((size_t)(const void *)((line) + 1) - (size_t)(const void *)(line) == 1) ? __builtin_strcmp (line, "mounting_unsupported") : (- (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (line); int __result = (((const unsigned char *) (const char *) ("mounting_unsupported" ))[0] - __s2[0]); if (__s2_len > 0 && __result == 0 ) { __result = (((const unsigned char *) (const char *) ("mounting_unsupported" ))[1] - __s2[1]); if (__s2_len > 1 && __result == 0 ) { __result = (((const unsigned char *) (const char *) ("mounting_unsupported" ))[2] - __s2[2]); if (__s2_len > 2 && __result == 0 ) __result = (((const unsigned char *) (const char *) ("mounting_unsupported" ))[3] - __s2[3]); } } __result; })))) : __builtin_strcmp (line , "mounting_unsupported")))); })) | |||
| 922 | mounting_unsupported = TRUE(!(0)); | |||
| 923 | } | |||
| 924 | ||||
| 925 | /* ================================================================= */ | |||
| 926 | typedef struct | |||
| 927 | { | |||
| 928 | gchar *path; | |||
| 929 | gint total, | |||
| 930 | new; | |||
| 931 | gpointer mbox_ptr; | |||
| 932 | } | |||
| 933 | Mailbox; | |||
| 934 | ||||
| 935 | static GList *mailbox_list; | |||
| 936 | ||||
| 937 | static gboolean | |||
| 938 | check_mail(Mailbox *mbox) | |||
| 939 | { | |||
| 940 | gkrellm_set_external_mbox_counts(mbox->mbox_ptr, mbox->total, mbox->new); | |||
| 941 | return TRUE(!(0)); | |||
| 942 | } | |||
| 943 | ||||
| 944 | static void | |||
| 945 | client_mail_line_from_server(gchar *line) | |||
| 946 | { | |||
| 947 | Mailbox *mbox = NULL((void*)0); | |||
| 948 | GList *list; | |||
| 949 | gchar path[256]; | |||
| 950 | // gchar *s; | |||
| 951 | gint total, new; | |||
| 952 | ||||
| 953 | if (sscanf(line, "%255s %d %d", path, &total, &new) < 3) | |||
| 954 | return; | |||
| 955 | for (list = mailbox_list; list; list = list->next) | |||
| 956 | { | |||
| 957 | mbox = (Mailbox *) list->data; | |||
| 958 | if (!strcmp(path, mbox->path)__extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (path) && __builtin_constant_p (mbox->path) && (__s1_len = strlen (path), __s2_len = strlen (mbox->path) , (!((size_t)(const void *)((path) + 1) - (size_t)(const void *)(path) == 1) || __s1_len >= 4) && (!((size_t)(const void *)((mbox->path) + 1) - (size_t)(const void *)(mbox-> path) == 1) || __s2_len >= 4)) ? __builtin_strcmp (path, mbox ->path) : (__builtin_constant_p (path) && ((size_t )(const void *)((path) + 1) - (size_t)(const void *)(path) == 1) && (__s1_len = strlen (path), __s1_len < 4) ? ( __builtin_constant_p (mbox->path) && ((size_t)(const void *)((mbox->path) + 1) - (size_t)(const void *)(mbox-> path) == 1) ? __builtin_strcmp (path, mbox->path) : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (mbox->path); int __result = (((const unsigned char *) (const char *) (path))[0] - __s2[0]); if (__s1_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) (path))[1] - __s2[1]); if (__s1_len > 1 && __result == 0) { __result = (((const unsigned char *) (const char *) (path))[2] - __s2[2]); if (__s1_len > 2 && __result == 0) __result = (((const unsigned char * ) (const char *) (path))[3] - __s2[3]); } } __result; }))) : ( __builtin_constant_p (mbox->path) && ((size_t)(const void *)((mbox->path) + 1) - (size_t)(const void *)(mbox-> path) == 1) && (__s2_len = strlen (mbox->path), __s2_len < 4) ? (__builtin_constant_p (path) && ((size_t)( const void *)((path) + 1) - (size_t)(const void *)(path) == 1 ) ? __builtin_strcmp (path, mbox->path) : (- (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (path); int __result = (((const unsigned char *) (const char *) (mbox->path))[0] - __s2[0]); if (__s2_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) (mbox->path))[1] - __s2[1]); if (__s2_len > 1 && __result == 0) { __result = (((const unsigned char *) (const char *) (mbox->path))[2] - __s2[2]); if (__s2_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) (mbox->path))[3] - __s2[3]); } } __result; })))) : __builtin_strcmp (path, mbox->path)))); })) | |||
| 959 | break; | |||
| 960 | } | |||
| 961 | if (!list) | |||
| 962 | { | |||
| 963 | mbox = g_new0(Mailbox, 1)(Mailbox *) (__extension__ ({ gsize __n = (gsize) (1); gsize __s = sizeof (Mailbox); gpointer __p; if (__s == 1) __p = g_malloc0 (__n); else if (__builtin_constant_p (__n) && (__s == 0 || __n <= (9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc0 (__n * __s); else __p = g_malloc0_n (__n, __s); __p ; })); | |||
| 964 | mbox->path = g_strdup(path); | |||
| 965 | mailbox_list = g_list_append(mailbox_list, mbox); | |||
| 966 | mbox->mbox_ptr = | |||
| 967 | gkrellm_add_external_mbox(check_mail, FALSE(0), mbox); | |||
| 968 | gkrellm_set_external_mbox_tooltip(mbox->mbox_ptr, mbox->path); | |||
| 969 | ||||
| 970 | // s = g_strdup_printf("%s:%s", _GK.server_hostname, mbox->path); | |||
| 971 | // gkrellm_set_external_mbox_tooltip(mbox->mbox_ptr, s); | |||
| 972 | // g_free(s); | |||
| 973 | } | |||
| 974 | if (mbox) | |||
| 975 | { | |||
| 976 | mbox->total = total; | |||
| 977 | mbox->new = new; | |||
| 978 | } | |||
| 979 | } | |||
| 980 | ||||
| 981 | static void | |||
| 982 | client_sys_mail_init(void) | |||
| 983 | { | |||
| 984 | } | |||
| 985 | ||||
| 986 | static void | |||
| 987 | client_mail_setup(gchar *line) | |||
| 988 | { | |||
| 989 | } | |||
| 990 | ||||
| 991 | /* ================================================================= */ | |||
| 992 | GList *battery_list; | |||
| 993 | ||||
| 994 | gboolean batteries_available; | |||
| 995 | ||||
| 996 | typedef struct | |||
| 997 | { | |||
| 998 | gint id; | |||
| 999 | gboolean present, | |||
| 1000 | on_line, | |||
| 1001 | charging; | |||
| 1002 | gint percent; | |||
| 1003 | gint time_left; | |||
| 1004 | } | |||
| 1005 | Battery; | |||
| 1006 | ||||
| 1007 | static Battery *composite_battery; | |||
| 1008 | ||||
| 1009 | static Battery * | |||
| 1010 | battery_nth(gint n) | |||
| 1011 | { | |||
| 1012 | Battery *bat; | |||
| 1013 | static gint n_batteries; | |||
| 1014 | ||||
| 1015 | if (n > 10) | |||
| 1016 | return NULL((void*)0); | |||
| 1017 | if (n < 0) | |||
| 1018 | { | |||
| 1019 | if (!composite_battery) | |||
| 1020 | { | |||
| 1021 | bat = g_new0(Battery, 1)(Battery *) (__extension__ ({ gsize __n = (gsize) (1); gsize __s = sizeof (Battery); gpointer __p; if (__s == 1) __p = g_malloc0 (__n); else if (__builtin_constant_p (__n) && (__s == 0 || __n <= (9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc0 (__n * __s); else __p = g_malloc0_n (__n, __s); __p ; })); | |||
| 1022 | battery_list = g_list_prepend(battery_list, bat); | |||
| 1023 | bat->id = GKRELLM_BATTERY_COMPOSITE_ID-1; | |||
| 1024 | composite_battery = bat; | |||
| 1025 | } | |||
| 1026 | return composite_battery; | |||
| 1027 | } | |||
| 1028 | ||||
| 1029 | if (composite_battery) | |||
| 1030 | ++n; | |||
| 1031 | ||||
| 1032 | while ((bat = (Battery *)g_list_nth_data(battery_list, n)) == NULL((void*)0)) | |||
| 1033 | { | |||
| 1034 | bat = g_new0(Battery, 1)(Battery *) (__extension__ ({ gsize __n = (gsize) (1); gsize __s = sizeof (Battery); gpointer __p; if (__s == 1) __p = g_malloc0 (__n); else if (__builtin_constant_p (__n) && (__s == 0 || __n <= (9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc0 (__n * __s); else __p = g_malloc0_n (__n, __s); __p ; })); | |||
| 1035 | battery_list = g_list_append(battery_list, bat); | |||
| 1036 | bat->id = n_batteries++; | |||
| 1037 | } | |||
| 1038 | return bat; | |||
| 1039 | } | |||
| 1040 | ||||
| 1041 | ||||
| 1042 | static void | |||
| 1043 | client_battery_line_from_server(gchar *line) | |||
| 1044 | { | |||
| 1045 | Battery *bat; | |||
| 1046 | gboolean present, on_line, charging; | |||
| 1047 | gint percent, time_left, n = 0; | |||
| 1048 | ||||
| 1049 | /* 2.1.9 adds 6th arg battery id number | |||
| 1050 | */ | |||
| 1051 | if (sscanf(line, "%d %d %d %d %d %d", | |||
| 1052 | &present, &on_line, &charging, &percent, &time_left, &n) < 5) | |||
| 1053 | return; | |||
| 1054 | ||||
| 1055 | bat = battery_nth(n); | |||
| 1056 | if (!bat) | |||
| 1057 | return; | |||
| 1058 | bat->present = present; | |||
| 1059 | bat->on_line = on_line; | |||
| 1060 | bat->charging = charging; | |||
| 1061 | bat->percent = percent; | |||
| 1062 | bat->time_left = time_left; | |||
| 1063 | } | |||
| 1064 | ||||
| 1065 | static void | |||
| 1066 | read_battery_data(void) | |||
| 1067 | { | |||
| 1068 | GList *list; | |||
| 1069 | Battery *bat; | |||
| 1070 | ||||
| 1071 | for (list = battery_list; list; list = list->next) | |||
| 1072 | { | |||
| 1073 | bat = (Battery *) list->data; | |||
| 1074 | gkrellm_battery_assign_data(bat->id, bat->present, | |||
| 1075 | bat->on_line, bat->charging, | |||
| 1076 | bat->percent, bat->time_left); | |||
| 1077 | } | |||
| 1078 | } | |||
| 1079 | ||||
| 1080 | static void | |||
| 1081 | client_sys_battery_init(void) | |||
| 1082 | { | |||
| 1083 | if (batteries_available) | |||
| 1084 | gkrellm_battery_client_divert(read_battery_data); | |||
| 1085 | } | |||
| 1086 | ||||
| 1087 | static void | |||
| 1088 | client_battery_setup(gchar *line) | |||
| 1089 | { | |||
| 1090 | if ( !strcmp(line, "apm_available")__extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (line) && __builtin_constant_p ("apm_available") && (__s1_len = strlen (line), __s2_len = strlen ("apm_available" ), (!((size_t)(const void *)((line) + 1) - (size_t)(const void *)(line) == 1) || __s1_len >= 4) && (!((size_t)(const void *)(("apm_available") + 1) - (size_t)(const void *)("apm_available" ) == 1) || __s2_len >= 4)) ? __builtin_strcmp (line, "apm_available" ) : (__builtin_constant_p (line) && ((size_t)(const void *)((line) + 1) - (size_t)(const void *)(line) == 1) && (__s1_len = strlen (line), __s1_len < 4) ? (__builtin_constant_p ("apm_available") && ((size_t)(const void *)(("apm_available" ) + 1) - (size_t)(const void *)("apm_available") == 1) ? __builtin_strcmp (line, "apm_available") : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) ("apm_available" ); int __result = (((const unsigned char *) (const char *) (line ))[0] - __s2[0]); if (__s1_len > 0 && __result == 0 ) { __result = (((const unsigned char *) (const char *) (line ))[1] - __s2[1]); if (__s1_len > 1 && __result == 0 ) { __result = (((const unsigned char *) (const char *) (line ))[2] - __s2[2]); if (__s1_len > 2 && __result == 0 ) __result = (((const unsigned char *) (const char *) (line)) [3] - __s2[3]); } } __result; }))) : (__builtin_constant_p ("apm_available" ) && ((size_t)(const void *)(("apm_available") + 1) - (size_t)(const void *)("apm_available") == 1) && (__s2_len = strlen ("apm_available"), __s2_len < 4) ? (__builtin_constant_p (line) && ((size_t)(const void *)((line) + 1) - (size_t )(const void *)(line) == 1) ? __builtin_strcmp (line, "apm_available" ) : (- (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (line); int __result = (((const unsigned char *) (const char *) ("apm_available"))[0] - __s2[0]); if ( __s2_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) ("apm_available"))[1] - __s2 [1]); if (__s2_len > 1 && __result == 0) { __result = (((const unsigned char *) (const char *) ("apm_available") )[2] - __s2[2]); if (__s2_len > 2 && __result == 0 ) __result = (((const unsigned char *) (const char *) ("apm_available" ))[3] - __s2[3]); } } __result; })))) : __builtin_strcmp (line , "apm_available")))); }) | |||
| 1091 | || !strcmp(line, "battery_available")__extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (line) && __builtin_constant_p ("battery_available") && (__s1_len = strlen (line), __s2_len = strlen ("battery_available" ), (!((size_t)(const void *)((line) + 1) - (size_t)(const void *)(line) == 1) || __s1_len >= 4) && (!((size_t)(const void *)(("battery_available") + 1) - (size_t)(const void *)( "battery_available") == 1) || __s2_len >= 4)) ? __builtin_strcmp (line, "battery_available") : (__builtin_constant_p (line) && ((size_t)(const void *)((line) + 1) - (size_t)(const void *) (line) == 1) && (__s1_len = strlen (line), __s1_len < 4) ? (__builtin_constant_p ("battery_available") && ( (size_t)(const void *)(("battery_available") + 1) - (size_t)( const void *)("battery_available") == 1) ? __builtin_strcmp ( line, "battery_available") : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) ("battery_available" ); int __result = (((const unsigned char *) (const char *) (line ))[0] - __s2[0]); if (__s1_len > 0 && __result == 0 ) { __result = (((const unsigned char *) (const char *) (line ))[1] - __s2[1]); if (__s1_len > 1 && __result == 0 ) { __result = (((const unsigned char *) (const char *) (line ))[2] - __s2[2]); if (__s1_len > 2 && __result == 0 ) __result = (((const unsigned char *) (const char *) (line)) [3] - __s2[3]); } } __result; }))) : (__builtin_constant_p ("battery_available" ) && ((size_t)(const void *)(("battery_available") + 1 ) - (size_t)(const void *)("battery_available") == 1) && (__s2_len = strlen ("battery_available"), __s2_len < 4) ? (__builtin_constant_p (line) && ((size_t)(const void *)((line) + 1) - (size_t)(const void *)(line) == 1) ? __builtin_strcmp (line, "battery_available") : (- (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (line); int __result = (((const unsigned char *) (const char *) ("battery_available" ))[0] - __s2[0]); if (__s2_len > 0 && __result == 0 ) { __result = (((const unsigned char *) (const char *) ("battery_available" ))[1] - __s2[1]); if (__s2_len > 1 && __result == 0 ) { __result = (((const unsigned char *) (const char *) ("battery_available" ))[2] - __s2[2]); if (__s2_len > 2 && __result == 0 ) __result = (((const unsigned char *) (const char *) ("battery_available" ))[3] - __s2[3]); } } __result; })))) : __builtin_strcmp (line , "battery_available")))); }) | |||
| 1092 | ) | |||
| 1093 | batteries_available = TRUE(!(0)); | |||
| 1094 | } | |||
| 1095 | ||||
| 1096 | /* ================================================================= */ | |||
| 1097 | typedef struct | |||
| 1098 | { | |||
| 1099 | gint type; | |||
| 1100 | ||||
| 1101 | gchar *basename; | |||
| 1102 | gint id; | |||
| 1103 | gint iodev; | |||
| 1104 | gint inter; | |||
| 1105 | ||||
| 1106 | gint group; | |||
| 1107 | ||||
| 1108 | gchar *vref; | |||
| 1109 | gchar *default_label; | |||
| 1110 | ||||
| 1111 | gfloat factor; | |||
| 1112 | gfloat offset; | |||
| 1113 | gfloat raw_value; | |||
| 1114 | } | |||
| 1115 | Sensor; | |||
| 1116 | ||||
| 1117 | static GList *sensors_list; | |||
| 1118 | ||||
| 1119 | ||||
| 1120 | static void | |||
| 1121 | client_sensors_line_from_server(gchar *line) | |||
| 1122 | { | |||
| 1123 | GList *list; | |||
| 1124 | Sensor s, *sensor; | |||
| 1125 | gchar basename[128]; | |||
| 1126 | ||||
| 1127 | if (need_locale_fix) | |||
| 1128 | locale_fix(line); | |||
| 1129 | sscanf(line, "%d \"%127[^\"]\" %d %d %d %f", | |||
| 1130 | &s.type, basename, &s.id, &s.iodev, &s.inter, &s.raw_value); | |||
| 1131 | for (list = sensors_list; list; list = list->next) | |||
| 1132 | { | |||
| 1133 | sensor = (Sensor *) list->data; | |||
| 1134 | if ( sensor->type == s.type && !strcmp(sensor->basename, basename)__extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (sensor->basename) && __builtin_constant_p (basename ) && (__s1_len = strlen (sensor->basename), __s2_len = strlen (basename), (!((size_t)(const void *)((sensor->basename ) + 1) - (size_t)(const void *)(sensor->basename) == 1) || __s1_len >= 4) && (!((size_t)(const void *)((basename ) + 1) - (size_t)(const void *)(basename) == 1) || __s2_len >= 4)) ? __builtin_strcmp (sensor->basename, basename) : (__builtin_constant_p (sensor->basename) && ((size_t)(const void *)((sensor ->basename) + 1) - (size_t)(const void *)(sensor->basename ) == 1) && (__s1_len = strlen (sensor->basename), __s1_len < 4) ? (__builtin_constant_p (basename) && ((size_t )(const void *)((basename) + 1) - (size_t)(const void *)(basename ) == 1) ? __builtin_strcmp (sensor->basename, basename) : ( __extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (basename); int __result = (((const unsigned char *) (const char *) (sensor->basename))[0] - __s2[0]); if (__s1_len > 0 && __result == 0) { __result = ( ((const unsigned char *) (const char *) (sensor->basename) )[1] - __s2[1]); if (__s1_len > 1 && __result == 0 ) { __result = (((const unsigned char *) (const char *) (sensor ->basename))[2] - __s2[2]); if (__s1_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) (sensor->basename))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p (basename) && ((size_t)(const void *)((basename) + 1) - (size_t)(const void *)(basename) == 1) && (__s2_len = strlen (basename), __s2_len < 4) ? (__builtin_constant_p (sensor->basename) && ((size_t)(const void *)((sensor ->basename) + 1) - (size_t)(const void *)(sensor->basename ) == 1) ? __builtin_strcmp (sensor->basename, basename) : ( - (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (sensor->basename); int __result = (((const unsigned char *) (const char *) (basename))[0] - __s2 [0]); if (__s2_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) (basename))[1] - __s2 [1]); if (__s2_len > 1 && __result == 0) { __result = (((const unsigned char *) (const char *) (basename))[2] - __s2 [2]); if (__s2_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) (basename))[3] - __s2 [3]); } } __result; })))) : __builtin_strcmp (sensor->basename , basename)))); }) | |||
| 1135 | && sensor->id == s.id && sensor->iodev == s.iodev | |||
| 1136 | && sensor->inter == s.inter | |||
| 1137 | ) | |||
| 1138 | { | |||
| 1139 | sensor->raw_value = s.raw_value; | |||
| 1140 | break; | |||
| 1141 | } | |||
| 1142 | } | |||
| 1143 | } | |||
| 1144 | ||||
| 1145 | static gboolean | |||
| 1146 | get_temperature(gchar *path, gint id, gint iodev, gint inter, gfloat *value) | |||
| 1147 | { | |||
| 1148 | GList *list; | |||
| 1149 | Sensor *s; | |||
| 1150 | ||||
| 1151 | for (list = sensors_list; list; list = list->next) | |||
| 1152 | { | |||
| 1153 | s = (Sensor *) list->data; | |||
| 1154 | if ( s->type == SENSOR_TEMPERATURE0 && !strcmp(s->basename, path)__extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (s->basename) && __builtin_constant_p (path) && (__s1_len = strlen (s->basename), __s2_len = strlen (path ), (!((size_t)(const void *)((s->basename) + 1) - (size_t) (const void *)(s->basename) == 1) || __s1_len >= 4) && (!((size_t)(const void *)((path) + 1) - (size_t)(const void * )(path) == 1) || __s2_len >= 4)) ? __builtin_strcmp (s-> basename, path) : (__builtin_constant_p (s->basename) && ((size_t)(const void *)((s->basename) + 1) - (size_t)(const void *)(s->basename) == 1) && (__s1_len = strlen ( s->basename), __s1_len < 4) ? (__builtin_constant_p (path ) && ((size_t)(const void *)((path) + 1) - (size_t)(const void *)(path) == 1) ? __builtin_strcmp (s->basename, path ) : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (path); int __result = (((const unsigned char *) (const char *) (s->basename))[0] - __s2[0]); if ( __s1_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) (s->basename))[1] - __s2[ 1]); if (__s1_len > 1 && __result == 0) { __result = (((const unsigned char *) (const char *) (s->basename)) [2] - __s2[2]); if (__s1_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) (s->basename ))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p ( path) && ((size_t)(const void *)((path) + 1) - (size_t )(const void *)(path) == 1) && (__s2_len = strlen (path ), __s2_len < 4) ? (__builtin_constant_p (s->basename) && ((size_t)(const void *)((s->basename) + 1) - (size_t)(const void *)(s->basename) == 1) ? __builtin_strcmp (s->basename , path) : (- (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (s->basename); int __result = (((const unsigned char *) (const char *) (path))[0] - __s2 [0]); if (__s2_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) (path))[1] - __s2 [1]); if (__s2_len > 1 && __result == 0) { __result = (((const unsigned char *) (const char *) (path))[2] - __s2 [2]); if (__s2_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) (path))[3] - __s2[3 ]); } } __result; })))) : __builtin_strcmp (s->basename, path )))); }) | |||
| 1155 | && s->id == id && s->iodev == iodev && s->inter == inter | |||
| 1156 | ) | |||
| 1157 | { | |||
| 1158 | *value = s->raw_value; | |||
| 1159 | return TRUE(!(0)); | |||
| 1160 | } | |||
| 1161 | } | |||
| 1162 | return FALSE(0); | |||
| 1163 | } | |||
| 1164 | ||||
| 1165 | static gboolean | |||
| 1166 | get_fan(gchar *path, gint id, gint iodev, gint inter, gfloat *value) | |||
| 1167 | { | |||
| 1168 | GList *list; | |||
| 1169 | Sensor *s; | |||
| 1170 | ||||
| 1171 | for (list = sensors_list; list; list = list->next) | |||
| 1172 | { | |||
| 1173 | s = (Sensor *) list->data; | |||
| 1174 | if ( s->type == SENSOR_FAN1 && !strcmp(s->basename, path)__extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (s->basename) && __builtin_constant_p (path) && (__s1_len = strlen (s->basename), __s2_len = strlen (path ), (!((size_t)(const void *)((s->basename) + 1) - (size_t) (const void *)(s->basename) == 1) || __s1_len >= 4) && (!((size_t)(const void *)((path) + 1) - (size_t)(const void * )(path) == 1) || __s2_len >= 4)) ? __builtin_strcmp (s-> basename, path) : (__builtin_constant_p (s->basename) && ((size_t)(const void *)((s->basename) + 1) - (size_t)(const void *)(s->basename) == 1) && (__s1_len = strlen ( s->basename), __s1_len < 4) ? (__builtin_constant_p (path ) && ((size_t)(const void *)((path) + 1) - (size_t)(const void *)(path) == 1) ? __builtin_strcmp (s->basename, path ) : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (path); int __result = (((const unsigned char *) (const char *) (s->basename))[0] - __s2[0]); if ( __s1_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) (s->basename))[1] - __s2[ 1]); if (__s1_len > 1 && __result == 0) { __result = (((const unsigned char *) (const char *) (s->basename)) [2] - __s2[2]); if (__s1_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) (s->basename ))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p ( path) && ((size_t)(const void *)((path) + 1) - (size_t )(const void *)(path) == 1) && (__s2_len = strlen (path ), __s2_len < 4) ? (__builtin_constant_p (s->basename) && ((size_t)(const void *)((s->basename) + 1) - (size_t)(const void *)(s->basename) == 1) ? __builtin_strcmp (s->basename , path) : (- (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (s->basename); int __result = (((const unsigned char *) (const char *) (path))[0] - __s2 [0]); if (__s2_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) (path))[1] - __s2 [1]); if (__s2_len > 1 && __result == 0) { __result = (((const unsigned char *) (const char *) (path))[2] - __s2 [2]); if (__s2_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) (path))[3] - __s2[3 ]); } } __result; })))) : __builtin_strcmp (s->basename, path )))); }) | |||
| 1175 | && s->id == id && s->iodev == iodev && s->inter == inter | |||
| 1176 | ) | |||
| 1177 | { | |||
| 1178 | *value = s->raw_value; | |||
| 1179 | return TRUE(!(0)); | |||
| 1180 | } | |||
| 1181 | } | |||
| 1182 | return FALSE(0); | |||
| 1183 | } | |||
| 1184 | ||||
| 1185 | static gboolean | |||
| 1186 | get_voltage(gchar *path, gint id, gint iodev, gint inter, gfloat *value) | |||
| 1187 | { | |||
| 1188 | GList *list; | |||
| 1189 | Sensor *s; | |||
| 1190 | ||||
| 1191 | for (list = sensors_list; list; list = list->next) | |||
| 1192 | { | |||
| 1193 | s = (Sensor *) list->data; | |||
| 1194 | if ( s->type == SENSOR_VOLTAGE2 && !strcmp(s->basename, path)__extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (s->basename) && __builtin_constant_p (path) && (__s1_len = strlen (s->basename), __s2_len = strlen (path ), (!((size_t)(const void *)((s->basename) + 1) - (size_t) (const void *)(s->basename) == 1) || __s1_len >= 4) && (!((size_t)(const void *)((path) + 1) - (size_t)(const void * )(path) == 1) || __s2_len >= 4)) ? __builtin_strcmp (s-> basename, path) : (__builtin_constant_p (s->basename) && ((size_t)(const void *)((s->basename) + 1) - (size_t)(const void *)(s->basename) == 1) && (__s1_len = strlen ( s->basename), __s1_len < 4) ? (__builtin_constant_p (path ) && ((size_t)(const void *)((path) + 1) - (size_t)(const void *)(path) == 1) ? __builtin_strcmp (s->basename, path ) : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (path); int __result = (((const unsigned char *) (const char *) (s->basename))[0] - __s2[0]); if ( __s1_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) (s->basename))[1] - __s2[ 1]); if (__s1_len > 1 && __result == 0) { __result = (((const unsigned char *) (const char *) (s->basename)) [2] - __s2[2]); if (__s1_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) (s->basename ))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p ( path) && ((size_t)(const void *)((path) + 1) - (size_t )(const void *)(path) == 1) && (__s2_len = strlen (path ), __s2_len < 4) ? (__builtin_constant_p (s->basename) && ((size_t)(const void *)((s->basename) + 1) - (size_t)(const void *)(s->basename) == 1) ? __builtin_strcmp (s->basename , path) : (- (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (s->basename); int __result = (((const unsigned char *) (const char *) (path))[0] - __s2 [0]); if (__s2_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) (path))[1] - __s2 [1]); if (__s2_len > 1 && __result == 0) { __result = (((const unsigned char *) (const char *) (path))[2] - __s2 [2]); if (__s2_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) (path))[3] - __s2[3 ]); } } __result; })))) : __builtin_strcmp (s->basename, path )))); }) | |||
| 1195 | && s->id == id && s->iodev == iodev && s->inter == inter | |||
| 1196 | ) | |||
| 1197 | { | |||
| 1198 | *value = s->raw_value; | |||
| 1199 | return TRUE(!(0)); | |||
| 1200 | } | |||
| 1201 | } | |||
| 1202 | return FALSE(0); | |||
| 1203 | } | |||
| 1204 | ||||
| 1205 | static void | |||
| 1206 | client_sys_sensors_init(void) | |||
| 1207 | { | |||
| 1208 | GList *list; | |||
| 1209 | Sensor *s; | |||
| 1210 | gpointer sr; | |||
| 1211 | ||||
| 1212 | if (!sensors_list) | |||
| 1213 | return; | |||
| 1214 | ||||
| 1215 | gkrellm_sensors_client_divert(get_temperature, get_fan, get_voltage); | |||
| 1216 | for (list = sensors_list; list; list = list->next) | |||
| 1217 | { | |||
| 1218 | s = (Sensor *) list->data; | |||
| 1219 | ||||
| 1220 | /* The sysdep code in the server may be using the dir arg to get sensor | |||
| 1221 | | values, but dir is no longer needed. | |||
| 1222 | */ | |||
| 1223 | sr = gkrellm_sensors_add_sensor(s->type, NULL((void*)0), s->basename, | |||
| 1224 | s->id, s->iodev, s->inter, | |||
| 1225 | s->factor, s->offset, | |||
| 1226 | s->vref, s->default_label); | |||
| 1227 | gkrellm_sensors_set_group(sr, s->group); | |||
| 1228 | } | |||
| 1229 | } | |||
| 1230 | ||||
| 1231 | static void | |||
| 1232 | client_sensors_setup(gchar *line) | |||
| 1233 | { | |||
| 1234 | Sensor *s; | |||
| 1235 | gchar basename[128], vref[32], default_label[32]; | |||
| 1236 | ||||
| 1237 | if (need_locale_fix) | |||
| 1238 | locale_fix(line); | |||
| 1239 | ||||
| 1240 | s = g_new0(Sensor, 1)(Sensor *) (__extension__ ({ gsize __n = (gsize) (1); gsize __s = sizeof (Sensor); gpointer __p; if (__s == 1) __p = g_malloc0 (__n); else if (__builtin_constant_p (__n) && (__s == 0 || __n <= (9223372036854775807L *2UL+1UL) / __s)) __p = g_malloc0 (__n * __s); else __p = g_malloc0_n (__n, __s); __p ; })); | |||
| 1241 | s->group = SENSOR_GROUP_MAINBOARD0; /* Not in pre 2.2.0 versions */ | |||
| 1242 | if (sscanf(line, | |||
| 1243 | "%d \"%127[^\"]\" %d %d %d %f %f \"%31[^\"]\" \"%31[^\"]\" %d", | |||
| 1244 | &s->type, basename, &s->id, &s->iodev, &s->inter, | |||
| 1245 | &s->factor, &s->offset, vref, default_label, &s->group) >= 9) | |||
| 1246 | { | |||
| 1247 | s->basename = g_strdup(basename); | |||
| 1248 | if (strcmp(vref, "NONE")__extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (vref) && __builtin_constant_p ("NONE") && ( __s1_len = strlen (vref), __s2_len = strlen ("NONE"), (!((size_t )(const void *)((vref) + 1) - (size_t)(const void *)(vref) == 1) || __s1_len >= 4) && (!((size_t)(const void *) (("NONE") + 1) - (size_t)(const void *)("NONE") == 1) || __s2_len >= 4)) ? __builtin_strcmp (vref, "NONE") : (__builtin_constant_p (vref) && ((size_t)(const void *)((vref) + 1) - (size_t )(const void *)(vref) == 1) && (__s1_len = strlen (vref ), __s1_len < 4) ? (__builtin_constant_p ("NONE") && ((size_t)(const void *)(("NONE") + 1) - (size_t)(const void * )("NONE") == 1) ? __builtin_strcmp (vref, "NONE") : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) ("NONE"); int __result = (((const unsigned char *) ( const char *) (vref))[0] - __s2[0]); if (__s1_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) (vref))[1] - __s2[1]); if (__s1_len > 1 && __result == 0) { __result = (((const unsigned char *) (const char *) (vref))[2] - __s2[2]); if (__s1_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) (vref))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p ("NONE") && ((size_t)(const void *)(("NONE") + 1) - ( size_t)(const void *)("NONE") == 1) && (__s2_len = strlen ("NONE"), __s2_len < 4) ? (__builtin_constant_p (vref) && ((size_t)(const void *)((vref) + 1) - (size_t)(const void *) (vref) == 1) ? __builtin_strcmp (vref, "NONE") : (- (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (vref); int __result = (((const unsigned char *) (const char *) ("NONE"))[0] - __s2[0]); if (__s2_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) ("NONE"))[1] - __s2[1]); if (__s2_len > 1 && __result == 0) { __result = (((const unsigned char *) (const char *) ("NONE"))[2] - __s2[2]); if (__s2_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) ("NONE"))[3] - __s2[3]); } } __result; })))) : __builtin_strcmp (vref, "NONE")))); })) | |||
| 1249 | s->vref = g_strdup(vref); | |||
| 1250 | if (strcmp(default_label, "NONE")__extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (default_label) && __builtin_constant_p ("NONE") && (__s1_len = strlen (default_label), __s2_len = strlen ("NONE" ), (!((size_t)(const void *)((default_label) + 1) - (size_t)( const void *)(default_label) == 1) || __s1_len >= 4) && (!((size_t)(const void *)(("NONE") + 1) - (size_t)(const void *)("NONE") == 1) || __s2_len >= 4)) ? __builtin_strcmp (default_label , "NONE") : (__builtin_constant_p (default_label) && ( (size_t)(const void *)((default_label) + 1) - (size_t)(const void *)(default_label) == 1) && (__s1_len = strlen (default_label ), __s1_len < 4) ? (__builtin_constant_p ("NONE") && ((size_t)(const void *)(("NONE") + 1) - (size_t)(const void * )("NONE") == 1) ? __builtin_strcmp (default_label, "NONE") : ( __extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) ("NONE"); int __result = (((const unsigned char *) (const char *) (default_label))[0] - __s2[0]); if (__s1_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) (default_label))[1] - __s2[1]); if (__s1_len > 1 && __result == 0) { __result = (((const unsigned char *) (const char *) (default_label))[2] - __s2[2]); if (__s1_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) (default_label))[3] - __s2[3]); } } __result ; }))) : (__builtin_constant_p ("NONE") && ((size_t)( const void *)(("NONE") + 1) - (size_t)(const void *)("NONE") == 1) && (__s2_len = strlen ("NONE"), __s2_len < 4) ? (__builtin_constant_p (default_label) && ((size_t)(const void *)((default_label) + 1) - (size_t)(const void *)(default_label ) == 1) ? __builtin_strcmp (default_label, "NONE") : (- (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (default_label); int __result = (((const unsigned char *) (const char *) ("NONE"))[0] - __s2[0]); if (__s2_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) ("NONE"))[1] - __s2[1]); if (__s2_len > 1 && __result == 0) { __result = (((const unsigned char *) (const char *) ("NONE"))[2] - __s2[2]); if (__s2_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) ("NONE"))[3] - __s2[3]); } } __result; })) )) : __builtin_strcmp (default_label, "NONE")))); })) | |||
| 1251 | s->default_label = g_strdup(default_label); | |||
| 1252 | ||||
| 1253 | sensors_list = g_list_append(sensors_list, s); | |||
| 1254 | } | |||
| 1255 | else | |||
| 1256 | g_free(s); | |||
| 1257 | } | |||
| 1258 | ||||
| 1259 | /* ================================================================= */ | |||
| 1260 | static time_t server_uptime; | |||
| 1261 | ||||
| 1262 | static void | |||
| 1263 | client_uptime_line_from_server(gchar *s) | |||
| 1264 | { | |||
| 1265 | gulong up_minutes; | |||
| 1266 | ||||
| 1267 | sscanf(s, "%lu", &up_minutes); | |||
| 1268 | server_uptime = ((time_t) up_minutes) * 60; | |||
| 1269 | } | |||
| 1270 | ||||
| 1271 | static time_t | |||
| 1272 | client_read_uptime(void) | |||
| 1273 | { | |||
| 1274 | return server_uptime; | |||
| 1275 | } | |||
| 1276 | ||||
| 1277 | static void | |||
| 1278 | client_sys_uptime_init(void) | |||
| 1279 | { | |||
| 1280 | gkrellm_uptime_client_divert(client_read_uptime); | |||
| 1281 | } | |||
| 1282 | ||||
| 1283 | /* ================================================================= */ | |||
| 1284 | static struct tm server_time; | |||
| 1285 | ||||
| 1286 | /* clock monitor doesn't have a sysdep interface, so it needs a hook | |||
| 1287 | | to get server system time when in client mode. | |||
| 1288 | */ | |||
| 1289 | struct tm * | |||
| 1290 | gkrellm_client_server_time(void) | |||
| 1291 | { | |||
| 1292 | return &server_time; | |||
| 1293 | } | |||
| 1294 | ||||
| 1295 | static void | |||
| 1296 | client_time_line_from_server(gchar *s) | |||
| 1297 | { | |||
| 1298 | struct tm *t; | |||
| 1299 | ||||
| 1300 | t = &server_time; | |||
| 1301 | sscanf(s, "%d %d %d %d %d %d %d %d %d", | |||
| 1302 | &t->tm_sec, &t->tm_min, &t->tm_hour, | |||
| 1303 | &t->tm_mday, &t->tm_mon, &t->tm_year, | |||
| 1304 | &t->tm_wday, &t->tm_yday, &t->tm_isdst); | |||
| 1305 | } | |||
| 1306 | ||||
| 1307 | /* ================================================================= */ | |||
| 1308 | static void | |||
| 1309 | client_server_version_setup(gchar *line) | |||
| 1310 | { | |||
| 1311 | sscanf(line, "%*s %d.%d.%d", &server_major_version, | |||
| 1312 | &server_minor_version, &server_rev_version); | |||
| 1313 | } | |||
| 1314 | ||||
| 1315 | static void | |||
| 1316 | client_hostname_setup(gchar *s) | |||
| 1317 | { | |||
| 1318 | g_free(_GK.server_hostname); | |||
| 1319 | _GK.server_hostname = g_strdup(s); | |||
| 1320 | } | |||
| 1321 | ||||
| 1322 | static void | |||
| 1323 | client_sysname_setup(gchar *s) | |||
| 1324 | { | |||
| 1325 | g_free(_GK.server_sysname); | |||
| 1326 | _GK.server_sysname = g_strdup(s); | |||
| 1327 | } | |||
| 1328 | ||||
| 1329 | ||||
| 1330 | KeyTable monitor_table[] = | |||
| 1331 | { | |||
| 1332 | {"sensors", client_sys_sensors_init }, | |||
| 1333 | {"cpu", client_sys_cpu_init }, | |||
| 1334 | {"proc", client_sys_proc_init }, | |||
| 1335 | {"disk", client_sys_disk_init }, | |||
| 1336 | {"net", client_sys_net_init }, | |||
| 1337 | {"inet", client_sys_inet_init }, | |||
| 1338 | {"mem", client_sys_mem_init }, | |||
| 1339 | {"fs", client_sys_fs_init }, | |||
| 1340 | {"mail", client_sys_mail_init }, | |||
| 1341 | {"apm", client_sys_battery_init }, | |||
| 1342 | {"battery", client_sys_battery_init }, | |||
| 1343 | {"uptime", client_sys_uptime_init }, | |||
| 1344 | }; | |||
| 1345 | ||||
| 1346 | ||||
| 1347 | static gboolean setup_done; /* only one sys init */ | |||
| 1348 | ||||
| 1349 | ||||
| 1350 | /* Setup lines are received before monitor init functions are called, so | |||
| 1351 | | for plugins must save the strings until plugins are loaded. | |||
| 1352 | */ | |||
| 1353 | static GList *client_plugin_setup_line_list; | |||
| 1354 | ||||
| 1355 | static void | |||
| 1356 | client_plugin_add_setup_line(gchar *line) | |||
| 1357 | { | |||
| 1358 | client_plugin_setup_line_list | |||
| 1359 | = g_list_append(client_plugin_setup_line_list, g_strdup(line)); | |||
| 1360 | } | |||
| 1361 | ||||
| 1362 | /* Plugins should call this in their gkrellm_init_plugin() function. | |||
| 1363 | */ | |||
| 1364 | void | |||
| 1365 | gkrellm_client_plugin_get_setup(gchar *key_name, | |||
| 1366 | void (*setup_func_cb)(gchar *str)) | |||
| 1367 | { | |||
| 1368 | GList *list; | |||
| 1369 | gchar *line, *s; | |||
| 1370 | gint n; | |||
| 1371 | ||||
| 1372 | if (!_GK.client_mode || !key_name || !setup_func_cb) | |||
| 1373 | return; | |||
| 1374 | for (list = client_plugin_setup_line_list; list; list = list->next) | |||
| 1375 | { | |||
| 1376 | line = (gchar *) list->data; | |||
| 1377 | n = strlen(key_name); | |||
| 1378 | s = line + n; | |||
| 1379 | if (!strncmp(line, key_name, n)(__extension__ (__builtin_constant_p (n) && ((__builtin_constant_p (line) && strlen (line) < ((size_t) (n))) || (__builtin_constant_p (key_name) && strlen (key_name) < ((size_t) (n))) ) ? __extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (line) && __builtin_constant_p (key_name) && (__s1_len = strlen (line), __s2_len = strlen (key_name), (!( (size_t)(const void *)((line) + 1) - (size_t)(const void *)(line ) == 1) || __s1_len >= 4) && (!((size_t)(const void *)((key_name) + 1) - (size_t)(const void *)(key_name) == 1) || __s2_len >= 4)) ? __builtin_strcmp (line, key_name) : (__builtin_constant_p (line) && ((size_t)(const void *)((line) + 1) - (size_t )(const void *)(line) == 1) && (__s1_len = strlen (line ), __s1_len < 4) ? (__builtin_constant_p (key_name) && ((size_t)(const void *)((key_name) + 1) - (size_t)(const void *)(key_name) == 1) ? __builtin_strcmp (line, key_name) : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (key_name); int __result = (((const unsigned char *) (const char *) (line))[0] - __s2[0]); if (__s1_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) (line))[1] - __s2[1]); if (__s1_len > 1 && __result == 0) { __result = (((const unsigned char *) (const char *) (line))[2] - __s2[2]); if (__s1_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) (line))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p (key_name) && ((size_t)(const void *)((key_name) + 1 ) - (size_t)(const void *)(key_name) == 1) && (__s2_len = strlen (key_name), __s2_len < 4) ? (__builtin_constant_p (line) && ((size_t)(const void *)((line) + 1) - (size_t )(const void *)(line) == 1) ? __builtin_strcmp (line, key_name ) : (- (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (line); int __result = (((const unsigned char *) (const char *) (key_name))[0] - __s2[0]); if (__s2_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) (key_name))[1] - __s2[1]); if (__s2_len > 1 && __result == 0) { __result = (((const unsigned char *) (const char *) (key_name))[2] - __s2[2]); if (__s2_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) (key_name))[3] - __s2[3]); } } __result ; })))) : __builtin_strcmp (line, key_name)))); }) : strncmp ( line, key_name, n))) && *s == ' ') | |||
| 1380 | { | |||
| 1381 | while (*s == ' ') | |||
| 1382 | ++s; | |||
| 1383 | (*setup_func_cb)(s); | |||
| 1384 | } | |||
| 1385 | } | |||
| 1386 | } | |||
| 1387 | ||||
| 1388 | static void | |||
| 1389 | client_monitor_setup(gchar *line) | |||
| 1390 | { | |||
| 1391 | void (*func)(); | |||
| 1392 | gchar buf[64]; | |||
| 1393 | gint i; | |||
| 1394 | gboolean found_builtin = FALSE(0); | |||
| 1395 | ||||
| 1396 | if (!*line || setup_done) | |||
| 1397 | return; | |||
| 1398 | for (i = 0; i < sizeof(monitor_table) / sizeof(KeyTable); ++i) | |||
| 1399 | { | |||
| 1400 | if (!strcmp(line, monitor_table[i].key)__extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (line) && __builtin_constant_p (monitor_table[i].key ) && (__s1_len = strlen (line), __s2_len = strlen (monitor_table [i].key), (!((size_t)(const void *)((line) + 1) - (size_t)(const void *)(line) == 1) || __s1_len >= 4) && (!((size_t )(const void *)((monitor_table[i].key) + 1) - (size_t)(const void *)(monitor_table[i].key) == 1) || __s2_len >= 4)) ? __builtin_strcmp (line, monitor_table[i].key) : (__builtin_constant_p (line) && ((size_t)(const void *)((line) + 1) - (size_t)(const void *) (line) == 1) && (__s1_len = strlen (line), __s1_len < 4) ? (__builtin_constant_p (monitor_table[i].key) && ((size_t)(const void *)((monitor_table[i].key) + 1) - (size_t )(const void *)(monitor_table[i].key) == 1) ? __builtin_strcmp (line, monitor_table[i].key) : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (monitor_table [i].key); int __result = (((const unsigned char *) (const char *) (line))[0] - __s2[0]); if (__s1_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) ( line))[1] - __s2[1]); if (__s1_len > 1 && __result == 0) { __result = (((const unsigned char *) (const char *) ( line))[2] - __s2[2]); if (__s1_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) (line ))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p ( monitor_table[i].key) && ((size_t)(const void *)((monitor_table [i].key) + 1) - (size_t)(const void *)(monitor_table[i].key) == 1) && (__s2_len = strlen (monitor_table[i].key), __s2_len < 4) ? (__builtin_constant_p (line) && ((size_t)( const void *)((line) + 1) - (size_t)(const void *)(line) == 1 ) ? __builtin_strcmp (line, monitor_table[i].key) : (- (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (line); int __result = (((const unsigned char *) (const char *) (monitor_table[i].key))[0] - __s2[0]); if (__s2_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) (monitor_table[i].key))[1] - __s2[1]); if ( __s2_len > 1 && __result == 0) { __result = (((const unsigned char *) (const char *) (monitor_table[i].key))[2] - __s2[2]); if (__s2_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) (monitor_table[i] .key))[3] - __s2[3]); } } __result; })))) : __builtin_strcmp ( line, monitor_table[i].key)))); })) | |||
| 1401 | { | |||
| 1402 | func = monitor_table[i].func; | |||
| 1403 | (*func)(); | |||
| 1404 | found_builtin = TRUE(!(0)); | |||
| 1405 | break; | |||
| 1406 | } | |||
| 1407 | } | |||
| 1408 | /* The client mode init work of a plugin must be defered since they | |||
| 1409 | | aren't loaded yet. Set up so they will can get an "available" flag. | |||
| 1410 | */ | |||
| 1411 | if (!found_builtin) | |||
| 1412 | { | |||
| 1413 | snprintf(buf, sizeof(buf), "%s available", line); | |||
| 1414 | client_plugin_add_setup_line(buf); | |||
| 1415 | } | |||
| 1416 | } | |||
| 1417 | ||||
| 1418 | static void | |||
| 1419 | client_server_error(gchar *line) | |||
| 1420 | { | |||
| 1421 | fprintf(stderrstderr, "gkrellmd error: %s\n", line); | |||
| 1422 | exit(0); | |||
| 1423 | } | |||
| 1424 | ||||
| 1425 | ||||
| 1426 | static void | |||
| 1427 | locale_sync(void) | |||
| 1428 | { | |||
| 1429 | struct lconv *lc; | |||
| 1430 | ||||
| 1431 | lc = localeconv(); | |||
| 1432 | locale_decimal_point = *lc->decimal_point; | |||
| 1433 | if (locale_decimal_point != server_decimal_point) | |||
| 1434 | need_locale_fix = TRUE(!(0)); | |||
| 1435 | } | |||
| 1436 | ||||
| 1437 | static void | |||
| 1438 | client_server_decimal_point(gchar *line) | |||
| 1439 | { | |||
| 1440 | sscanf(line, "%c", &server_decimal_point); | |||
| 1441 | locale_sync(); | |||
| 1442 | } | |||
| 1443 | ||||
| 1444 | static void | |||
| 1445 | client_server_io_timeout(gchar *line) | |||
| 1446 | { | |||
| 1447 | sscanf(line, "%d", &_GK.client_server_io_timeout); | |||
| 1448 | if (_GK.client_server_io_timeout < 2) | |||
| 1449 | _GK.client_server_io_timeout = 0; | |||
| 1450 | } | |||
| 1451 | ||||
| 1452 | static void | |||
| 1453 | client_server_reconnect_timeout(gchar *line) | |||
| 1454 | { | |||
| 1455 | sscanf(line, "%d", &_GK.client_server_reconnect_timeout); | |||
| 1456 | if (_GK.client_server_reconnect_timeout < 2) | |||
| 1457 | _GK.client_server_reconnect_timeout = 0; | |||
| 1458 | } | |||
| 1459 | ||||
| 1460 | ||||
| 1461 | /* ================================================================= */ | |||
| 1462 | KeyTable setup_table[] = | |||
| 1463 | { | |||
| 1464 | {"<version>", client_server_version_setup }, | |||
| 1465 | {"<sensors_setup>", client_sensors_setup }, | |||
| 1466 | {"<hostname>", client_hostname_setup }, | |||
| 1467 | {"<sysname>", client_sysname_setup }, | |||
| 1468 | {"<cpu_setup>", client_cpu_setup }, | |||
| 1469 | {"<disk_setup>", client_disk_setup }, | |||
| 1470 | {"<inet_setup>", client_inet_setup }, | |||
| 1471 | {"<net_setup>", client_net_setup }, | |||
| 1472 | {"<fs_setup>", client_fs_setup }, | |||
| 1473 | {"<mail_setup>", client_mail_setup }, | |||
| 1474 | {"<apm_setup>", client_battery_setup }, | |||
| 1475 | {"<battery_setup>", client_battery_setup }, | |||
| 1476 | {"<time>", client_time_line_from_server}, | |||
| 1477 | {"<monitors>", client_monitor_setup }, | |||
| 1478 | {"<decimal_point>", client_server_decimal_point }, | |||
| 1479 | {"<error>", client_server_error }, | |||
| 1480 | {"<io_timeout>", client_server_io_timeout}, | |||
| 1481 | {"<reconnect_timeout>", client_server_reconnect_timeout}, | |||
| 1482 | ||||
| 1483 | {"<plugin_setup>", client_plugin_add_setup_line}, | |||
| 1484 | }; | |||
| 1485 | ||||
| 1486 | ||||
| 1487 | typedef struct | |||
| 1488 | { | |||
| 1489 | GkrellmMonitor *mon; | |||
| 1490 | gchar *key_name; | |||
| 1491 | void (*func_cb)(gchar *line); | |||
| 1492 | } | |||
| 1493 | ClientPlugin; | |||
| 1494 | ||||
| 1495 | static GList *client_plugin_serve_data_list; | |||
| 1496 | static GList *plugin_initial_update_list; | |||
| 1497 | ||||
| 1498 | static GkrellmFunc | |||
| 1499 | client_plugin_func(gchar *line) | |||
| 1500 | { | |||
| 1501 | GList *list; | |||
| 1502 | ClientPlugin *plug; | |||
| 1503 | void (*func)() = NULL((void*)0); | |||
| 1504 | gchar *s; | |||
| 1505 | gint n; | |||
| 1506 | ||||
| 1507 | for (list = client_plugin_serve_data_list; list; list = list->next) | |||
| 1508 | { | |||
| 1509 | plug = (ClientPlugin *) list->data; | |||
| 1510 | if (!plug->key_name) | |||
| 1511 | continue; | |||
| 1512 | n = strlen(plug->key_name); | |||
| 1513 | s = line + n; | |||
| 1514 | if (*s == '>' && !strncmp(plug->key_name, line, n)(__extension__ (__builtin_constant_p (n) && ((__builtin_constant_p (plug->key_name) && strlen (plug->key_name) < ((size_t) (n))) || (__builtin_constant_p (line) && strlen (line) < ((size_t) (n)))) ? __extension__ ({ size_t __s1_len , __s2_len; (__builtin_constant_p (plug->key_name) && __builtin_constant_p (line) && (__s1_len = strlen (plug ->key_name), __s2_len = strlen (line), (!((size_t)(const void *)((plug->key_name) + 1) - (size_t)(const void *)(plug-> key_name) == 1) || __s1_len >= 4) && (!((size_t)(const void *)((line) + 1) - (size_t)(const void *)(line) == 1) || __s2_len >= 4)) ? __builtin_strcmp (plug->key_name, line) : (__builtin_constant_p (plug->key_name) && ((size_t)(const void *)((plug ->key_name) + 1) - (size_t)(const void *)(plug->key_name ) == 1) && (__s1_len = strlen (plug->key_name), __s1_len < 4) ? (__builtin_constant_p (line) && ((size_t)( const void *)((line) + 1) - (size_t)(const void *)(line) == 1 ) ? __builtin_strcmp (plug->key_name, line) : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (line); int __result = (((const unsigned char *) (const char *) (plug->key_name))[0] - __s2[0]); if (__s1_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) (plug->key_name))[1] - __s2[1]); if (__s1_len > 1 && __result == 0) { __result = (((const unsigned char *) (const char *) (plug->key_name))[2] - __s2[2]); if (__s1_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) (plug->key_name))[3] - __s2 [3]); } } __result; }))) : (__builtin_constant_p (line) && ((size_t)(const void *)((line) + 1) - (size_t)(const void *) (line) == 1) && (__s2_len = strlen (line), __s2_len < 4) ? (__builtin_constant_p (plug->key_name) && (( size_t)(const void *)((plug->key_name) + 1) - (size_t)(const void *)(plug->key_name) == 1) ? __builtin_strcmp (plug-> key_name, line) : (- (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (plug->key_name) ; int __result = (((const unsigned char *) (const char *) (line ))[0] - __s2[0]); if (__s2_len > 0 && __result == 0 ) { __result = (((const unsigned char *) (const char *) (line ))[1] - __s2[1]); if (__s2_len > 1 && __result == 0 ) { __result = (((const unsigned char *) (const char *) (line ))[2] - __s2[2]); if (__s2_len > 2 && __result == 0 ) __result = (((const unsigned char *) (const char *) (line)) [3] - __s2[3]); } } __result; })))) : __builtin_strcmp (plug-> key_name, line)))); }) : strncmp (plug->key_name, line, n) ))) | |||
| 1515 | { | |||
| 1516 | func = plug->func_cb; | |||
| 1517 | break; | |||
| 1518 | } | |||
| 1519 | } | |||
| 1520 | return func; | |||
| 1521 | } | |||
| 1522 | ||||
| 1523 | static void | |||
| 1524 | client_plugin_initial_update(ClientPlugin *plug) | |||
| 1525 | { | |||
| 1526 | GList *list; | |||
| 1527 | void (*func)(gchar *); | |||
| 1528 | gchar *line, *serve_name; | |||
| 1529 | ||||
| 1530 | func = NULL((void*)0); | |||
| 1531 | serve_name = g_strdup_printf("<%s>", plug->key_name); | |||
| 1532 | for (list = plugin_initial_update_list; list; list = list->next) | |||
| 1533 | { | |||
| 1534 | line = (gchar *) list->data; | |||
| 1535 | if (*line == '<') | |||
| 1536 | { | |||
| 1537 | func = NULL((void*)0); | |||
| 1538 | if (!strcmp(line, serve_name)__extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (line) && __builtin_constant_p (serve_name) && (__s1_len = strlen (line), __s2_len = strlen (serve_name), ( !((size_t)(const void *)((line) + 1) - (size_t)(const void *) (line) == 1) || __s1_len >= 4) && (!((size_t)(const void *)((serve_name) + 1) - (size_t)(const void *)(serve_name ) == 1) || __s2_len >= 4)) ? __builtin_strcmp (line, serve_name ) : (__builtin_constant_p (line) && ((size_t)(const void *)((line) + 1) - (size_t)(const void *)(line) == 1) && (__s1_len = strlen (line), __s1_len < 4) ? (__builtin_constant_p (serve_name) && ((size_t)(const void *)((serve_name) + 1) - (size_t)(const void *)(serve_name) == 1) ? __builtin_strcmp (line, serve_name) : (__extension__ ({ const unsigned char * __s2 = (const unsigned char *) (const char *) (serve_name); int __result = (((const unsigned char *) (const char *) (line))[ 0] - __s2[0]); if (__s1_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) (line))[ 1] - __s2[1]); if (__s1_len > 1 && __result == 0) { __result = (((const unsigned char *) (const char *) (line))[ 2] - __s2[2]); if (__s1_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) (line))[3] - __s2 [3]); } } __result; }))) : (__builtin_constant_p (serve_name) && ((size_t)(const void *)((serve_name) + 1) - (size_t )(const void *)(serve_name) == 1) && (__s2_len = strlen (serve_name), __s2_len < 4) ? (__builtin_constant_p (line ) && ((size_t)(const void *)((line) + 1) - (size_t)(const void *)(line) == 1) ? __builtin_strcmp (line, serve_name) : ( - (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (line); int __result = (((const unsigned char *) (const char *) (serve_name))[0] - __s2[0]); if (__s2_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) (serve_name))[1] - __s2[1]); if (__s2_len > 1 && __result == 0) { __result = (((const unsigned char *) (const char *) (serve_name))[2] - __s2[2]); if (__s2_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) (serve_name))[3] - __s2[3]); } } __result ; })))) : __builtin_strcmp (line, serve_name)))); })) | |||
| 1539 | func = plug->func_cb; | |||
| 1540 | } | |||
| 1541 | else if (func) | |||
| 1542 | (*func)(line); | |||
| 1543 | } | |||
| 1544 | g_free(serve_name); | |||
| 1545 | } | |||
| 1546 | ||||
| 1547 | void | |||
| 1548 | gkrellm_client_plugin_serve_data_connect(GkrellmMonitor *mon, | |||
| 1549 | gchar *key_name, void (*func_cb)(gchar *line)) | |||
| 1550 | { | |||
| 1551 | ClientPlugin *plug; | |||
| 1552 | ||||
| 1553 | if (!mon || !key_name || !func_cb) | |||
| 1554 | return; | |||
| 1555 | plug = g_new0(ClientPlugin, 1)(ClientPlugin *) (__extension__ ({ gsize __n = (gsize) (1); gsize __s = sizeof (ClientPlugin); gpointer __p; if (__s == 1) __p = g_malloc0 (__n); else if (__builtin_constant_p (__n) && (__s == 0 || __n <= (9223372036854775807L *2UL+1UL) / __s )) __p = g_malloc0 (__n * __s); else __p = g_malloc0_n (__n, __s ); __p; })); | |||
| 1556 | plug->mon = mon; | |||
| 1557 | plug->key_name = g_strdup(key_name); | |||
| 1558 | plug->func_cb = func_cb; | |||
| 1559 | client_plugin_serve_data_list | |||
| 1560 | = g_list_append(client_plugin_serve_data_list, plug); | |||
| 1561 | ||||
| 1562 | client_plugin_initial_update(plug); | |||
| 1563 | } | |||
| 1564 | ||||
| 1565 | static gboolean | |||
| 1566 | client_send_to_server(gchar *buf) | |||
| 1567 | { | |||
| 1568 | gint n; | |||
| 1569 | ||||
| 1570 | if (!server_alive || client_fd < 0 || !buf) | |||
| 1571 | return FALSE(0); | |||
| 1572 | #if defined(MSG_NOSIGNALMSG_NOSIGNAL) | |||
| 1573 | n = send(client_fd, buf, strlen(buf), MSG_NOSIGNALMSG_NOSIGNAL); | |||
| 1574 | #else | |||
| 1575 | n = send(client_fd, buf, strlen(buf), 0); | |||
| 1576 | #endif | |||
| 1577 | if (n < 0 && errno(*__errno_location ()) == EPIPE32) | |||
| 1578 | { | |||
| 1579 | gkrellm_debug(DEBUG_CLIENT0x1000, "Write on closed pipe to gkrellmd " \ | |||
| 1580 | "server, marking server-connection as dead\n"); | |||
| 1581 | server_alive = FALSE(0); | |||
| 1582 | return FALSE(0); | |||
| 1583 | } | |||
| 1584 | return TRUE(!(0)); | |||
| 1585 | } | |||
| 1586 | ||||
| 1587 | gboolean | |||
| 1588 | gkrellm_client_send_to_server(gchar *key_name, gchar *line) | |||
| 1589 | { | |||
| 1590 | gchar *str; | |||
| 1591 | gboolean result; | |||
| 1592 | ||||
| 1593 | if (!key_name || !line || !*line) | |||
| 1594 | return FALSE(0); | |||
| 1595 | str = g_strdup_printf("<%s>\n", key_name); | |||
| 1596 | client_send_to_server(str); | |||
| 1597 | g_free(str); | |||
| 1598 | if (line[strlen(line) - 1] != '\n') | |||
| 1599 | { | |||
| 1600 | str = g_strdup_printf("%s\n", line); | |||
| 1601 | result = client_send_to_server(str); | |||
| 1602 | g_free(str); | |||
| 1603 | } | |||
| 1604 | else | |||
| 1605 | result = client_send_to_server(line); | |||
| 1606 | ||||
| 1607 | return result; | |||
| 1608 | } | |||
| 1609 | ||||
| 1610 | KeyTable update_table[] = | |||
| 1611 | { | |||
| 1612 | {"<cpu>", client_cpu_line_from_server}, | |||
| 1613 | {"<proc>", client_proc_line_from_server}, | |||
| 1614 | {"<disk>", client_disk_line_from_server}, | |||
| 1615 | {"<net>", client_net_line_from_server}, | |||
| 1616 | {"<net_routed>", client_net_routed_line_from_server}, | |||
| 1617 | {"<net_timer>", client_net_timer_line_from_server}, | |||
| 1618 | {"<mem>", client_mem_line_from_server}, | |||
| 1619 | {"<swap>", client_swap_line_from_server}, | |||
| 1620 | {"<fs>", client_fs_line_from_server}, | |||
| 1621 | {"<fs_fstab>", client_fstab_line_from_server}, | |||
| 1622 | {"<fs_mounts>", client_mounts_line_from_server}, | |||
| 1623 | {"<inet>", client_inet_line_from_server}, | |||
| 1624 | {"<mail>", client_mail_line_from_server}, | |||
| 1625 | {"<apm>", client_battery_line_from_server}, | |||
| 1626 | {"<battery>", client_battery_line_from_server}, | |||
| 1627 | {"<sensors>", client_sensors_line_from_server}, | |||
| 1628 | {"<time>", client_time_line_from_server}, | |||
| 1629 | {"<uptime>", client_uptime_line_from_server}, | |||
| 1630 | ||||
| 1631 | // {"<>", client__line_from_server}, | |||
| 1632 | }; | |||
| 1633 | ||||
| 1634 | ||||
| 1635 | ||||
| 1636 | /* TODO: Port to GInputStream */ | |||
| 1637 | static gint | |||
| 1638 | gkrellm_getline(gint fd, gchar *buf, gint len) | |||
| 1639 | { | |||
| 1640 | fd_set read_fds; | |||
| 1641 | struct timeval tv; | |||
| 1642 | gchar *s; | |||
| 1643 | gint result, n, nread = 0; | |||
| 1644 | ||||
| 1645 | FD_ZERO(&read_fds)do { int __d0, __d1; __asm__ __volatile__ ("cld; rep; " "stosq" : "=c" (__d0), "=D" (__d1) : "a" (0), "0" (sizeof (fd_set) / sizeof (__fd_mask)), "1" (&((&read_fds)->fds_bits )[0]) : "memory"); } while (0); | |||
| 1646 | FD_SET(fd, &read_fds)((void) (((&read_fds)->fds_bits)[((fd) / (8 * (int) sizeof (__fd_mask)))] |= ((__fd_mask) (1UL << ((fd) % (8 * (int ) sizeof (__fd_mask))))))); | |||
| 1647 | tv.tv_usec = 0; | |||
| 1648 | tv.tv_sec = 15; | |||
| 1649 | s = buf; | |||
| 1650 | *s = '\0'; | |||
| 1651 | for (n = 0; n < len - 1; ++n) | |||
| 1652 | { | |||
| 1653 | nread = 0; | |||
| 1654 | result = select(fd + 1, &read_fds, NULL((void*)0), NULL((void*)0), &tv); | |||
| 1655 | if (result <= 0 || (nread = recv(fd, s, 1, 0)) != 1) | |||
| 1656 | break; | |||
| 1657 | if (*s == '\n') | |||
| 1658 | { | |||
| 1659 | *s = '\0'; | |||
| 1660 | break; | |||
| 1661 | } | |||
| 1662 | *++s = '\0'; | |||
| 1663 | } | |||
| 1664 | if (nread < 0 && errno(*__errno_location ()) != EINTR4) | |||
| 1665 | { | |||
| 1666 | g_warning("Broken server connection\n"); | |||
| 1667 | exit(0); | |||
| 1668 | } | |||
| 1669 | gkrellm_debug(DEBUG_CLIENT0x1000, "%s\n", buf); | |||
| 1670 | return n; | |||
| 1671 | } | |||
| 1672 | ||||
| 1673 | static void | |||
| 1674 | process_server_line(KeyTable *table, gint table_size, gchar *line) | |||
| 1675 | { | |||
| 1676 | static void (*func)(gchar *); | |||
| 1677 | gint i; | |||
| 1678 | ||||
| 1679 | if (!*line || *line == '#') | |||
| 1680 | return; | |||
| 1681 | ||||
| 1682 | if (*line == '<') | |||
| 1683 | { | |||
| 1684 | func = NULL((void*)0); | |||
| 1685 | if (line[1] == '.') | |||
| 1686 | { | |||
| 1687 | server_time.tm_sec = atoi(line + 2); | |||
| 1688 | return; | |||
| 1689 | } | |||
| 1690 | for (i = 0; i < table_size; ++i) | |||
| 1691 | { | |||
| 1692 | if (!strcmp(table[i].key, line)__extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (table[i].key) && __builtin_constant_p (line) && (__s1_len = strlen (table[i].key), __s2_len = strlen (line), (!((size_t)(const void *)((table[i].key) + 1) - (size_t)(const void *)(table[i].key) == 1) || __s1_len >= 4) && ( !((size_t)(const void *)((line) + 1) - (size_t)(const void *) (line) == 1) || __s2_len >= 4)) ? __builtin_strcmp (table[ i].key, line) : (__builtin_constant_p (table[i].key) && ((size_t)(const void *)((table[i].key) + 1) - (size_t)(const void *)(table[i].key) == 1) && (__s1_len = strlen (table [i].key), __s1_len < 4) ? (__builtin_constant_p (line) && ((size_t)(const void *)((line) + 1) - (size_t)(const void *) (line) == 1) ? __builtin_strcmp (table[i].key, line) : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (line); int __result = (((const unsigned char *) (const char *) (table[i].key))[0] - __s2[0]); if (__s1_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) (table[i].key))[1] - __s2[1]); if (__s1_len > 1 && __result == 0) { __result = (((const unsigned char *) (const char *) (table[i].key))[2] - __s2[2]); if (__s1_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) (table[i].key))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p (line) && ((size_t)(const void *)((line) + 1) - (size_t )(const void *)(line) == 1) && (__s2_len = strlen (line ), __s2_len < 4) ? (__builtin_constant_p (table[i].key) && ((size_t)(const void *)((table[i].key) + 1) - (size_t)(const void *)(table[i].key) == 1) ? __builtin_strcmp (table[i].key , line) : (- (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (table[i].key); int __result = (((const unsigned char *) (const char *) (line))[0] - __s2 [0]); if (__s2_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) (line))[1] - __s2 [1]); if (__s2_len > 1 && __result == 0) { __result = (((const unsigned char *) (const char *) (line))[2] - __s2 [2]); if (__s2_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) (line))[3] - __s2[3 ]); } } __result; })))) : __builtin_strcmp (table[i].key, line )))); })) | |||
| 1693 | { | |||
| 1694 | func = table[i].func; | |||
| 1695 | break; | |||
| 1696 | } | |||
| 1697 | } | |||
| 1698 | if (!func) | |||
| 1699 | func = client_plugin_func(line + 1); | |||
| 1700 | } | |||
| 1701 | else if (func) | |||
| 1702 | (*func)(line); | |||
| 1703 | if (!func && !setup_done) | |||
| 1704 | plugin_initial_update_list | |||
| 1705 | = g_list_append(plugin_initial_update_list, g_strdup(line)); | |||
| 1706 | } | |||
| 1707 | ||||
| 1708 | ||||
| 1709 | /* Read setup info from gkrellmd server. Stuff needed before the | |||
| 1710 | | client_init calls must be read here. | |||
| 1711 | */ | |||
| 1712 | static gboolean | |||
| 1713 | read_server_setup(gint fd) | |||
| 1714 | { | |||
| 1715 | gchar buf[4097]; /* TODO: Use dynamic receive buffer */ | |||
| 1716 | gint table_size; | |||
| 1717 | ||||
| 1718 | gkrellm_debug(DEBUG_CLIENT0x1000, "read_server_setup()\n"); | |||
| 1719 | ||||
| 1720 | /* Pre 2.1.6 gkrellmd does not send <decimal_point>, so put a fallback | |||
| 1721 | | locale_sync() here. | |||
| 1722 | */ | |||
| 1723 | locale_sync(); | |||
| 1724 | _GK.client_server_read_time = time(0); | |||
| 1725 | table_size = sizeof(setup_table) / sizeof(KeyTable); | |||
| 1726 | ||||
| 1727 | gkrellm_free_glist_and_data(&client_plugin_setup_line_list); | |||
| 1728 | ||||
| 1729 | gint rs; | |||
| 1730 | ||||
| 1731 | while (1) | |||
| 1732 | { | |||
| 1733 | rs = gkrellm_getline(fd, buf, sizeof(buf)); | |||
| 1734 | if (rs < 0) | |||
| 1735 | return FALSE(0); | |||
| 1736 | if (!strcmp(buf, "</gkrellmd_setup>")__extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (buf) && __builtin_constant_p ("</gkrellmd_setup>" ) && (__s1_len = strlen (buf), __s2_len = strlen ("</gkrellmd_setup>" ), (!((size_t)(const void *)((buf) + 1) - (size_t)(const void *)(buf) == 1) || __s1_len >= 4) && (!((size_t)(const void *)(("</gkrellmd_setup>") + 1) - (size_t)(const void *)("</gkrellmd_setup>") == 1) || __s2_len >= 4)) ? __builtin_strcmp (buf, "</gkrellmd_setup>") : (__builtin_constant_p (buf ) && ((size_t)(const void *)((buf) + 1) - (size_t)(const void *)(buf) == 1) && (__s1_len = strlen (buf), __s1_len < 4) ? (__builtin_constant_p ("</gkrellmd_setup>") && ((size_t)(const void *)(("</gkrellmd_setup>") + 1) - ( size_t)(const void *)("</gkrellmd_setup>") == 1) ? __builtin_strcmp (buf, "</gkrellmd_setup>") : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) ("</gkrellmd_setup>" ); int __result = (((const unsigned char *) (const char *) (buf ))[0] - __s2[0]); if (__s1_len > 0 && __result == 0 ) { __result = (((const unsigned char *) (const char *) (buf) )[1] - __s2[1]); if (__s1_len > 1 && __result == 0 ) { __result = (((const unsigned char *) (const char *) (buf) )[2] - __s2[2]); if (__s1_len > 2 && __result == 0 ) __result = (((const unsigned char *) (const char *) (buf))[ 3] - __s2[3]); } } __result; }))) : (__builtin_constant_p ("</gkrellmd_setup>" ) && ((size_t)(const void *)(("</gkrellmd_setup>" ) + 1) - (size_t)(const void *)("</gkrellmd_setup>") == 1) && (__s2_len = strlen ("</gkrellmd_setup>") , __s2_len < 4) ? (__builtin_constant_p (buf) && ( (size_t)(const void *)((buf) + 1) - (size_t)(const void *)(buf ) == 1) ? __builtin_strcmp (buf, "</gkrellmd_setup>") : (- (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (buf); int __result = (((const unsigned char *) (const char *) ("</gkrellmd_setup>"))[0] - __s2 [0]); if (__s2_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) ("</gkrellmd_setup>" ))[1] - __s2[1]); if (__s2_len > 1 && __result == 0 ) { __result = (((const unsigned char *) (const char *) ("</gkrellmd_setup>" ))[2] - __s2[2]); if (__s2_len > 2 && __result == 0 ) __result = (((const unsigned char *) (const char *) ("</gkrellmd_setup>" ))[3] - __s2[3]); } } __result; })))) : __builtin_strcmp (buf , "</gkrellmd_setup>")))); })) | |||
| 1737 | break; | |||
| 1738 | process_server_line(&setup_table[0], table_size, buf); | |||
| 1739 | } | |||
| 1740 | ||||
| 1741 | /* Reset any data that is not cumulative. gkrellmd sends .clear tags | |||
| 1742 | | for fstab and mounts, but inet does not. So fix it here. | |||
| 1743 | */ | |||
| 1744 | client_inet_reset(); | |||
| 1745 | ||||
| 1746 | /* Read the initial update data | |||
| 1747 | */ | |||
| 1748 | table_size = sizeof(update_table) / sizeof(KeyTable); | |||
| 1749 | while (1) | |||
| 1750 | { | |||
| 1751 | rs = gkrellm_getline(fd, buf, sizeof(buf)); | |||
| 1752 | if (rs < 0) | |||
| 1753 | return FALSE(0); | |||
| 1754 | if (!strcmp(buf, "</initial_update>")__extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (buf) && __builtin_constant_p ("</initial_update>" ) && (__s1_len = strlen (buf), __s2_len = strlen ("</initial_update>" ), (!((size_t)(const void *)((buf) + 1) - (size_t)(const void *)(buf) == 1) || __s1_len >= 4) && (!((size_t)(const void *)(("</initial_update>") + 1) - (size_t)(const void *)("</initial_update>") == 1) || __s2_len >= 4)) ? __builtin_strcmp (buf, "</initial_update>") : (__builtin_constant_p (buf ) && ((size_t)(const void *)((buf) + 1) - (size_t)(const void *)(buf) == 1) && (__s1_len = strlen (buf), __s1_len < 4) ? (__builtin_constant_p ("</initial_update>") && ((size_t)(const void *)(("</initial_update>") + 1) - ( size_t)(const void *)("</initial_update>") == 1) ? __builtin_strcmp (buf, "</initial_update>") : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) ("</initial_update>" ); int __result = (((const unsigned char *) (const char *) (buf ))[0] - __s2[0]); if (__s1_len > 0 && __result == 0 ) { __result = (((const unsigned char *) (const char *) (buf) )[1] - __s2[1]); if (__s1_len > 1 && __result == 0 ) { __result = (((const unsigned char *) (const char *) (buf) )[2] - __s2[2]); if (__s1_len > 2 && __result == 0 ) __result = (((const unsigned char *) (const char *) (buf))[ 3] - __s2[3]); } } __result; }))) : (__builtin_constant_p ("</initial_update>" ) && ((size_t)(const void *)(("</initial_update>" ) + 1) - (size_t)(const void *)("</initial_update>") == 1) && (__s2_len = strlen ("</initial_update>") , __s2_len < 4) ? (__builtin_constant_p (buf) && ( (size_t)(const void *)((buf) + 1) - (size_t)(const void *)(buf ) == 1) ? __builtin_strcmp (buf, "</initial_update>") : (- (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (buf); int __result = (((const unsigned char *) (const char *) ("</initial_update>"))[0] - __s2 [0]); if (__s2_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) ("</initial_update>" ))[1] - __s2[1]); if (__s2_len > 1 && __result == 0 ) { __result = (((const unsigned char *) (const char *) ("</initial_update>" ))[2] - __s2[2]); if (__s2_len > 2 && __result == 0 ) __result = (((const unsigned char *) (const char *) ("</initial_update>" ))[3] - __s2[3]); } } __result; })))) : __builtin_strcmp (buf , "</initial_update>")))); })) | |||
| 1755 | break; | |||
| 1756 | process_server_line(&update_table[0], table_size, buf); | |||
| 1757 | } | |||
| 1758 | setup_done = TRUE(!(0)); | |||
| 1759 | return TRUE(!(0)); | |||
| 1760 | } | |||
| 1761 | ||||
| 1762 | void | |||
| 1763 | gkrellm_client_mode_disconnect(void) | |||
| 1764 | { | |||
| 1765 | if (client_fd >= 0) | |||
| 1766 | { | |||
| 1767 | gkrellm_debug(DEBUG_CLIENT0x1000, "gkrellm_client_mode_disconnect(); " \ | |||
| 1768 | "closing connection to server\n"); | |||
| 1769 | close(client_fd); | |||
| 1770 | } | |||
| 1771 | client_fd = -1; | |||
| 1772 | server_alive = FALSE(0); | |||
| 1773 | gdk_input_remove(client_input_id); | |||
| 1774 | client_input_id = 0; | |||
| 1775 | } | |||
| 1776 | ||||
| 1777 | static void | |||
| 1778 | read_server_input(gpointer data, gint fd, GdkInputCondition condition) | |||
| 1779 | { | |||
| 1780 | gchar *line, *eol; | |||
| 1781 | gint count, n, table_size; | |||
| 1782 | ||||
| 1783 | n = sizeof(server_buf) - buf_index - 1; | |||
| 1784 | count = recv(fd, server_buf + buf_index, n, 0); | |||
| 1785 | if (count <= 0) | |||
| 1786 | { | |||
| 1787 | gkrellm_debug(DEBUG_CLIENT0x1000, "read_server_input(); recv() " \ | |||
| 1788 | "returned error, disconnecting from server\n", count); | |||
| 1789 | gkrellm_client_mode_disconnect(); | |||
| 1790 | return; | |||
| 1791 | } | |||
| 1792 | if (_GK.time_now > 0) | |||
| 1793 | _GK.client_server_read_time = _GK.time_now; | |||
| 1794 | server_buf[buf_index + count] = '\0'; | |||
| 1795 | line = server_buf; | |||
| 1796 | table_size = sizeof(update_table) / sizeof(KeyTable); | |||
| 1797 | while (*line && (eol = strchr(line, '\n')(__extension__ (__builtin_constant_p ('\n') && !__builtin_constant_p (line) && ('\n') == '\0' ? (char *) __rawmemchr (line , '\n') : __builtin_strchr (line, '\n')))) != NULL((void*)0)) | |||
| 1798 | { | |||
| 1799 | *eol = '\0'; | |||
| 1800 | gkrellm_debug(DEBUG_CLIENT0x1000, "%s\n", line); | |||
| 1801 | process_server_line(&update_table[0], table_size, line); | |||
| 1802 | line = eol + 1; | |||
| 1803 | } | |||
| 1804 | if (line != server_buf && *line) | |||
| 1805 | { | |||
| 1806 | buf_index = strlen(line); | |||
| 1807 | memmove(server_buf, line, buf_index); | |||
| 1808 | } | |||
| 1809 | else if (!*line) | |||
| 1810 | buf_index = 0; | |||
| 1811 | else | |||
| 1812 | { | |||
| 1813 | buf_index += count; | |||
| 1814 | if (buf_index >= sizeof(server_buf) - 2) | |||
| 1815 | buf_index = 0; | |||
| 1816 | } | |||
| 1817 | ||||
| 1818 | server_buf[buf_index] = '\0'; | |||
| 1819 | } | |||
| 1820 | ||||
| 1821 | ||||
| 1822 | gint | |||
| 1823 | gkrellm_connect_to(gchar *server, gint server_port) | |||
| 1824 | { | |||
| 1825 | gint fd = -1; | |||
| 1826 | #ifdef HAVE_GETADDRINFO1 | |||
| 1827 | gint rv = 0; | |||
| 1828 | struct addrinfo hints, *res, *res0; | |||
| 1829 | gchar portnumber[6]; | |||
| 1830 | #else | |||
| 1831 | struct hostent *addr; | |||
| 1832 | struct sockaddr_in s; | |||
| 1833 | #endif | |||
| 1834 | ||||
| 1835 | #ifdef HAVE_GETADDRINFO1 | |||
| 1836 | snprintf (portnumber, sizeof(portnumber), "%d", server_port); | |||
| 1837 | memset(&hints, 0, sizeof(hints)); | |||
| 1838 | hints.ai_family = PF_UNSPEC0; | |||
| 1839 | hints.ai_socktype = SOCK_STREAMSOCK_STREAM; | |||
| 1840 | hints.ai_protocol = 0; | |||
| 1841 | if ((rv = getaddrinfo(server, portnumber, &hints, &res0)) != 0) | |||
| 1842 | return -1; | |||
| 1843 | ||||
| 1844 | for (res = res0; res; res = res->ai_next) | |||
| 1845 | { | |||
| 1846 | if ((fd = socket(res->ai_family, res->ai_socktype, | |||
| 1847 | res->ai_protocol)) < 0) | |||
| 1848 | continue; | |||
| 1849 | gkrellm_debug(DEBUG_CLIENT0x1000, "\t[gkrellm_connect_to: (%d,%d,%d) %s:%d]\n", | |||
| 1850 | res->ai_family, res->ai_socktype, | |||
| 1851 | res->ai_protocol, server, server_port); | |||
| 1852 | if (connect(fd, res->ai_addr, res->ai_addrlen) >= 0) | |||
| 1853 | break; | |||
| 1854 | #ifdef WIN32 | |||
| 1855 | closesocket(fd); | |||
| 1856 | #else | |||
| 1857 | close(fd); | |||
| 1858 | #endif | |||
| 1859 | fd = -1; | |||
| 1860 | } | |||
| 1861 | freeaddrinfo(res0); | |||
| 1862 | #else | |||
| 1863 | gkrellm_debug(DEBUG_CLIENT0x1000, "\t[gkrellm_connect_to: %s:%d]\n", server, | |||
| 1864 | server_port); | |||
| 1865 | addr = gethostbyname(server); | |||
| 1866 | if (addr) | |||
| 1867 | { | |||
| 1868 | fd = socket(AF_INET2, SOCK_STREAMSOCK_STREAM, 0); | |||
| 1869 | if (fd >= 0) | |||
| 1870 | { | |||
| 1871 | memset(&s, 0, sizeof(s)); | |||
| 1872 | memcpy(&s.sin_addr.s_addr, addr->h_addrh_addr_list[0], addr->h_length); | |||
| 1873 | s.sin_family = AF_INET2; | |||
| 1874 | s.sin_port = htons(server_port)(__extension__ ({ unsigned short int __v, __x = (unsigned short int) (server_port); if (__builtin_constant_p (__x)) __v = (( unsigned short int) ((((__x) >> 8) & 0xff) | (((__x ) & 0xff) << 8))); else __asm__ ("rorw $8, %w0" : "=r" (__v) : "0" (__x) : "cc"); __v; })); | |||
| 1875 | if (connect(fd, (struct sockaddr *)&s, sizeof (s)) < 0) | |||
| 1876 | { | |||
| 1877 | gkrellm_debug(DEBUG_CLIENT0x1000, "gkrellm_connect_to(); connect() failed\n"); | |||
| 1878 | #ifdef WIN32 | |||
| 1879 | closesocket(fd); | |||
| 1880 | #else | |||
| 1881 | close(fd); | |||
| 1882 | #endif | |||
| 1883 | fd = -1; | |||
| 1884 | } | |||
| 1885 | } | |||
| 1886 | } | |||
| 1887 | else | |||
| 1888 | { | |||
| 1889 | gkrellm_debug(DEBUG_CLIENT0x1000, "gkrellm_connect_to(); gethostbyname() failed\n"); | |||
| 1890 | } | |||
| 1891 | #endif | |||
| 1892 | if (fd < 0) | |||
| 1893 | return -1; | |||
| 1894 | ||||
| 1895 | return fd; | |||
| 1896 | } | |||
| 1897 | ||||
| 1898 | enum GkrellmConnectResult | |||
| 1899 | gkrellm_client_mode_connect(void) | |||
| 1900 | { | |||
| 1901 | gchar buf[128]; | |||
| 1902 | ||||
| 1903 | if (_GK.server_port == 0) | |||
| 1904 | _GK.server_port = GKRELLMD_SERVER_PORT19150; | |||
| 1905 | ||||
| 1906 | client_fd = gkrellm_connect_to(_GK.server, _GK.server_port); | |||
| 1907 | if (client_fd < 0) | |||
| 1908 | return BAD_CONNECT; | |||
| 1909 | ||||
| 1910 | snprintf(buf, sizeof(buf), "gkrellm %d.%d.%d%s\n", | |||
| 1911 | GKRELLM_VERSION_MAJOR2, GKRELLM_VERSION_MINOR3, | |||
| 1912 | GKRELLM_VERSION_REV5, GKRELLM_EXTRAVERSION""); | |||
| 1913 | send(client_fd, buf, strlen(buf), 0); | |||
| 1914 | ||||
| 1915 | /* Initial setup lines from server are read in blocking mode. | |||
| 1916 | */ | |||
| 1917 | if(!read_server_setup(client_fd)) | |||
| 1918 | { | |||
| 1919 | close(client_fd); | |||
| 1920 | return BAD_SETUP; | |||
| 1921 | } | |||
| 1922 | ||||
| 1923 | /* Extra stuff not handled in read_server_setup() | |||
| 1924 | */ | |||
| 1925 | gkrellm_mail_local_unsupported(); | |||
| 1926 | ||||
| 1927 | /* Now switch to non blocking and set up a read handler. | |||
| 1928 | */ | |||
| 1929 | #ifndef WIN32 | |||
| 1930 | fcntl(client_fd, F_SETFL4, O_NONBLOCK04000); | |||
| 1931 | #endif | |||
| 1932 | client_input_id = gdk_input_add(client_fd, GDK_INPUT_READ, | |||
| 1933 | (GdkInputFunction) read_server_input, NULL((void*)0)); | |||
| 1934 | ||||
| 1935 | server_alive = TRUE(!(0)); | |||
| 1936 | ||||
| 1937 | return GOOD_CONNECT; | |||
| 1938 | } | |||
| 1939 | ||||
| 1940 | ||||
| 1941 | static gboolean client_mode_thread_busy; | |||
| 1942 | ||||
| 1943 | enum GkrellmConnectState | |||
| 1944 | gkrellm_client_server_connect_state(void) | |||
| 1945 | { | |||
| 1946 | if (client_mode_thread_busy) /* reconnect in progress? */ | |||
| 1947 | return CONNECTING; | |||
| 1948 | if (_GK.client_mode && client_input_id > 0) /* Currently connected? */ | |||
| 1949 | return CONNECTED; | |||
| 1950 | else if (_GK.client_mode) | |||
| 1951 | return DISCONNECTED; | |||
| 1952 | else | |||
| 1953 | return NO_CLIENT; | |||
| 1954 | } | |||
| 1955 | ||||
| 1956 | static gpointer | |||
| 1957 | client_mode_connect_thread(void *data) | |||
| 1958 | { | |||
| 1959 | gkrellm_client_mode_connect(); | |||
| 1960 | client_mode_thread_busy = FALSE(0); | |||
| 1961 | return NULL((void*)0); | |||
| 1962 | } | |||
| 1963 | ||||
| 1964 | void | |||
| 1965 | gkrellm_client_mode_connect_thread(void) | |||
| 1966 | { | |||
| 1967 | if (client_mode_thread_busy || !_GK.client_mode) | |||
| 1968 | return; | |||
| 1969 | client_mode_thread_busy = TRUE(!(0)); | |||
| 1970 | g_thread_new("client_mode_connect", client_mode_connect_thread, NULL((void*)0)); | |||
| 1971 | } | |||
| 1972 | ||||
| 1973 | ||||
| 1974 | gboolean | |||
| 1975 | gkrellm_client_mode(void) | |||
| 1976 | { | |||
| 1977 | return _GK.client_mode; | |||
| 1978 | } |