$OpenBSD: patch-sysdeps_bsd_sysinfo_c,v 1.8 2010/09/18 09:14:18 ajacoutot Exp $
--- sysdeps/bsd/sysinfo.c.orig	Sun Apr 19 19:51:00 2009
+++ sysdeps/bsd/sysinfo.c	Sat Sep 18 11:06:35 2010
@@ -36,7 +36,12 @@ static void
 init_sysinfo (glibtop *server)
 {
 	char *model;
+#if defined(__OpenBSD__)
+	int mib[2];
+	int ncpus = 1;
+#else
 	guint64 ncpus = 1;
+#endif
 	int mhz = 0;
 	size_t len;
 
@@ -45,6 +50,34 @@ init_sysinfo (glibtop *server)
 
 	glibtop_init_s (&server, GLIBTOP_SYSDEPS_CPU, 0);
 
+#if defined(__OpenBSD__)
+	mib[0] = CTL_HW;
+
+	/* Get the number of CPU's present */
+	mib[1] = HW_NCPU;
+
+	len = sizeof(ncpus);
+	if (sysctl(mib, 2, &ncpus, &len, NULL, 0) != 0)
+		printf("Couldn't determine hw.ncpu.\n");
+
+	/* Get the CPU model */
+	mib[1] = HW_MODEL;
+	len = 0;
+
+	if (sysctl(mib, 2, NULL, &len, NULL, 0) != -1) {
+		model = g_malloc (len);
+		sysctl(mib, 2, model, &len, NULL, 0);
+	} else {
+		printf("Couldn't determine hw.model.\n");
+	}
+
+	/* Get the clockrate */
+	mib[1] = HW_CPUSPEED;
+	len = sizeof(mhz);
+
+	if (sysctl(mib, 2, &mhz, &len, NULL, 0) != 0)
+		printf("Couldn't determine hw.cpuspeed.\n");
+#else
 	len = sizeof (ncpus);
 	sysctlbyname ("hw.ncpu", &ncpus, &len, NULL, 0);
 	len = 0;
@@ -54,6 +87,8 @@ init_sysinfo (glibtop *server)
 	len = sizeof (mhz);
 	sysctlbyname ("hw.clockrate", &mhz, &len, NULL, 0);
 
+#endif /* __OpenBSD__ */
+
 	for (sysinfo.ncpu = 0;
 	     sysinfo.ncpu < GLIBTOP_NCPU && sysinfo.ncpu < ncpus;
 	     sysinfo.ncpu++) {
@@ -71,6 +106,10 @@ init_sysinfo (glibtop *server)
 
 		g_ptr_array_add (cpuinfo->labels, "vendor_id");
 		g_hash_table_insert (cpuinfo->values, "vendor_id",
+				     g_strdup(model));
+
+		g_ptr_array_add (cpuinfo->labels, "model name");
+		g_hash_table_insert (cpuinfo->values, "model name",
 				     g_strdup(model));
 
 		g_ptr_array_add (cpuinfo->labels, "cpu MHz");
