diff --git a/sysdeps/freebsd/ChangeLog b/sysdeps/freebsd/ChangeLog index 4fd3ab3a..cb3b7a48 100644 --- a/sysdeps/freebsd/ChangeLog +++ b/sysdeps/freebsd/ChangeLog @@ -1,3 +1,16 @@ +2006-04-04 Julio M. Merino Vidal + + * sysdeps/freebsd/Makefile.am: + * sysdeps/freebsd/sysinfo.c: + + Bring back to life (from the 1.x versions) the sysinfo.c file for + the freebsd sysdeps. The new file comes from the FreeBSD ports + repository and has some minor style changes by me. This is required + to get the glibtop_get_sysinfo_s function used by the sysdeps common + code. + + Fixes bug #337251. + 2006-04-04 Julio M. Merino Vidal * sysdeps/freebsd/proctime.c: diff --git a/sysdeps/freebsd/Makefile.am b/sysdeps/freebsd/Makefile.am index 7a3ae6c2..20dd8a66 100644 --- a/sysdeps/freebsd/Makefile.am +++ b/sysdeps/freebsd/Makefile.am @@ -3,7 +3,7 @@ INCLUDES = @INCLUDES@ noinst_LTLIBRARIES = libgtop_sysdeps-2.0.la libgtop_sysdeps_suid-2.0.la -libgtop_sysdeps_2_0_la_SOURCES = nosuid.c siglist.c +libgtop_sysdeps_2_0_la_SOURCES = nosuid.c siglist.c sysinfo.c libgtop_sysdeps_2_0_la_LDFLAGS = $(LT_VERSION_INFO) diff --git a/sysdeps/freebsd/sysinfo.c b/sysdeps/freebsd/sysinfo.c new file mode 100644 index 00000000..8a44167b --- /dev/null +++ b/sysdeps/freebsd/sysinfo.c @@ -0,0 +1,93 @@ +/* Copyright (C) 1998-99 Martin Baulig + This file is part of LibGTop 1.0. + + Contributed by Martin Baulig , April 1998. + + LibGTop is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, + or (at your option) any later version. + + LibGTop is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with LibGTop; see the file COPYING. If not, write to the + Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. +*/ + +#include +#include +#include +#include +#include +#include +#include + +static const unsigned long _glibtop_sysdeps_sysinfo = +(1L << GLIBTOP_SYSINFO_CPUINFO); + +static glibtop_sysinfo sysinfo = { .flags = 0 }; + +static void +init_sysinfo (glibtop *server) +{ + char *model; + guint64 ncpus = 1; + int mhz = 0; + size_t len; + + if (G_LIKELY (sysinfo.flags)) + return; + + glibtop_init_s (&server, GLIBTOP_SYSDEPS_CPU, 0); + + len = sizeof (ncpus); + sysctlbyname ("hw.ncpu", &ncpus, &len, NULL, 0); + len = 0; + sysctlbyname ("hw.model", NULL, &len, NULL, 0); + model = g_malloc (len); + sysctlbyname ("hw.model", model, &len, NULL, 0); + len = sizeof (mhz); + sysctlbyname ("hw.clockrate", &mhz, &len, NULL, 0); + + for (sysinfo.ncpu = 0; + sysinfo.ncpu < GLIBTOP_NCPU && sysinfo.ncpu < ncpus; + sysinfo.ncpu++) { + glibtop_entry * const cpuinfo = &sysinfo.cpuinfo[sysinfo.ncpu]; + + cpuinfo->labels = g_ptr_array_new (); + + cpuinfo->values = g_hash_table_new_full(g_str_hash, + g_str_equal, + g_free, g_free); + + cpuinfo->descriptions = g_hash_table_new_full(g_str_hash, + g_str_equal, + g_free, g_free); + + g_ptr_array_add (cpuinfo->labels, "processor"); + g_hash_table_insert (cpuinfo->values, "processor", + &sysinfo.ncpu); + + g_ptr_array_add (cpuinfo->labels, "vendor_id"); + g_hash_table_insert (cpuinfo->values, "vendor_id", model); + + g_ptr_array_add (cpuinfo->labels, "cpu MHz"); + g_hash_table_insert (cpuinfo->values, "cpu MHz", &mhz); + } + + g_free (model); + + sysinfo.flags = _glibtop_sysdeps_sysinfo; +} + +const glibtop_sysinfo * +glibtop_get_sysinfo_s (glibtop *server) +{ + init_sysinfo (server); + return &sysinfo; +}