2008-08-20 Henry Zhang <[email protected]>
authorhenryz
Wed, 20 Aug 2008 14:40:15 +0000
changeset 13197 7c6e36efe0d8
parent 13196 528ef1183f90
child 13198 690186125954
2008-08-20 Henry Zhang <[email protected]> * base-specs/libgtop.spec, patches/libgtop-01-solaris.diff: fix bug bugzilla 2946
ChangeLog
base-specs/libgtop.spec
patches/libgtop-01-solaris.diff
--- a/ChangeLog	Wed Aug 20 10:18:16 2008 +0000
+++ b/ChangeLog	Wed Aug 20 14:40:15 2008 +0000
@@ -1,3 +1,9 @@
+2008-08-20  Henry Zhang <[email protected]>
+
+	* base-specs/libgtop.spec,
+          patches/libgtop-01-solaris.diff:
+             fix bug bugzilla 2946
+
 2008-08-20  Dave Lin <[email protected]>
 
 	* base-specs/gvfs.spec: Bump to 0.99.5.
--- a/base-specs/libgtop.spec	Wed Aug 20 10:18:16 2008 +0000
+++ b/base-specs/libgtop.spec	Wed Aug 20 14:40:15 2008 +0000
@@ -11,7 +11,7 @@
 License:      GPL
 Group:        System/Libraries/GNOME
 ## DO NOT BUMP - Contact Henry before making version changes.
-Version:      2.20.1
+Version:      2.23.90
 Release:      1
 Distribution: Java Desktop System
 Vendor:	      Sun Microsystems, Inc.
--- a/patches/libgtop-01-solaris.diff	Wed Aug 20 10:18:16 2008 +0000
+++ b/patches/libgtop-01-solaris.diff	Wed Aug 20 14:40:15 2008 +0000
@@ -1,182 +1,280 @@
-diff -Nrup libgtop-2.19.2/include/glibtop/procstate.h libgtop-2.19.2.mod/include/glibtop/procstate.h
---- libgtop-2.19.2/include/glibtop/procstate.h	2007-04-27 06:27:30.000000000 +0800
-+++ libgtop-2.19.2.mod/include/glibtop/procstate.h	2007-05-18 15:45:06.525673000 +0800
-@@ -64,11 +64,19 @@ struct _glibtop_proc_state
- 	 *                   fields if their values are corrent ! */
- 	int uid;		/* UID of process */
- 	int gid;		/* GID of process */
--    int ruid;
--    int rgid;
--    int has_cpu;
--    int processor;
--    int last_processor;
-+    	int ruid;
-+    	int rgid;
-+    	int has_cpu;
-+    	int processor;
-+    	int last_processor;
-+	
+diff -Nrup libgtop-2.23.90.orig/include/glibtop/procstate.h libgtop-2.23.90.mod/include/glibtop/procstate.h
+--- libgtop-2.23.90.orig/include/glibtop/procstate.h	2008-05-24 06:13:20.000000000 +0800
++++ libgtop-2.23.90.mod/include/glibtop/procstate.h	2008-08-20 10:26:31.847117000 +0800
+@@ -69,6 +69,13 @@ struct _glibtop_proc_state
+     int has_cpu;
+     int processor;
+     int last_processor;
++
 +        gint32  nice;           /*zhua: used to store nice */
 +        guint64 start_time;     /* start time of process -- */
 +        guint64 vsize;          /* number of pages of virtual memory ... */
 +        guint64 resident;       /* number of resident set */
 +        guint   load;           /* cpu load for process */
 +        gint32  ppid;           /* pid of parent process */
-+
  };
  
  void glibtop_get_proc_state(glibtop_proc_state *buf, pid_t pid);
-diff -Nrup libgtop-2.19.2/lib/libgtop.sym libgtop-2.19.2.mod/lib/libgtop.sym
---- libgtop-2.19.2/lib/libgtop.sym	2007-05-13 05:54:57.000000000 +0800
-+++ libgtop-2.19.2.mod/lib/libgtop.sym	2007-05-19 00:09:27.355595000 +0800
-@@ -1,118 +1,89 @@
- glibtop_call_l
--glibtop_call_p
- glibtop_close
- glibtop_close_p
- glibtop_close_r
- glibtop_close_s
- glibtop_get_cpu
- glibtop_get_cpu_l
--glibtop_get_cpu_p
- glibtop_get_cpu_s
- glibtop_get_fsusage
- glibtop_get_fsusage_l
--glibtop_get_fsusage_p
- glibtop_get_fsusage_s
- glibtop_get_loadavg
- glibtop_get_loadavg_l
--glibtop_get_loadavg_p
- glibtop_get_loadavg_s
- glibtop_get_mem
- glibtop_get_mem_l
--glibtop_get_mem_p
- glibtop_get_mem_s
- glibtop_get_mountlist
- glibtop_get_mountlist_l
--glibtop_get_mountlist_p
- glibtop_get_mountlist_s
- glibtop_get_msg_limits
- glibtop_get_msg_limits_l
--glibtop_get_msg_limits_p
- glibtop_get_msg_limits_s
- glibtop_get_netlist
- glibtop_get_netlist_l
--glibtop_get_netlist_p
- glibtop_get_netlist_s
- glibtop_get_netload
- glibtop_get_netload_l
--glibtop_get_netload_p
- glibtop_get_netload_s
- glibtop_get_parameter_l
--glibtop_get_parameter_p
- glibtop_get_ppp
- glibtop_get_ppp_l
--glibtop_get_ppp_p
- glibtop_get_ppp_s
- glibtop_get_proc_args
- glibtop_get_proc_args_l
--glibtop_get_proc_args_p
- glibtop_get_proc_args_s
- glibtop_get_proc_argv
- glibtop_get_proc_argv_l
--glibtop_get_proc_argv_p
- glibtop_get_proc_kernel
- glibtop_get_proc_kernel_l
--glibtop_get_proc_kernel_p
- glibtop_get_proc_kernel_s
- glibtop_get_proclist
- glibtop_get_proclist_l
--glibtop_get_proclist_p
- glibtop_get_proclist_s
- glibtop_get_proc_map
- glibtop_get_proc_map_l
--glibtop_get_proc_map_p
- glibtop_get_proc_map_s
- glibtop_get_proc_mem
- glibtop_get_proc_mem_l
--glibtop_get_proc_mem_p
- glibtop_get_proc_mem_s
- glibtop_get_proc_open_files
- glibtop_get_proc_open_files_l
--glibtop_get_proc_open_files_p
- glibtop_get_proc_open_files_s
- glibtop_get_proc_segment
- glibtop_get_proc_segment_l
--glibtop_get_proc_segment_p
- glibtop_get_proc_segment_s
- glibtop_get_proc_signal
- glibtop_get_proc_signal_l
--glibtop_get_proc_signal_p
- glibtop_get_proc_signal_s
- glibtop_get_proc_state
- glibtop_get_proc_state_l
--glibtop_get_proc_state_p
- glibtop_get_proc_state_s
- glibtop_get_proc_time
- glibtop_get_proc_time_l
--glibtop_get_proc_time_p
- glibtop_get_proc_time_s
- glibtop_get_proc_uid
- glibtop_get_proc_uid_l
--glibtop_get_proc_uid_p
- glibtop_get_proc_uid_s
- glibtop_get_proc_wd
- glibtop_get_proc_wd_l
--glibtop_get_proc_wd_p
- glibtop_get_proc_wd_s
- glibtop_get_sem_limits
- glibtop_get_sem_limits_l
--glibtop_get_sem_limits_p
- glibtop_get_sem_limits_s
- glibtop_get_shm_limits
- glibtop_get_shm_limits_l
--glibtop_get_shm_limits_p
- glibtop_get_shm_limits_s
- glibtop_get_swap
- glibtop_get_swap_l
--glibtop_get_swap_p
- glibtop_get_swap_s
- glibtop_get_sysdeps
- glibtop_get_sysdeps_r
- glibtop_get_sysinfo
--glibtop_get_sysinfo_p
- glibtop_get_sysinfo_s
- glibtop_get_uptime
- glibtop_get_uptime_l
--glibtop_get_uptime_p
- glibtop_get_uptime_s
- glibtop_global_server
- glibtop_init
-@@ -126,5 +97,4 @@ glibtop_open_p
- glibtop_open_s
- glibtop_server_features
- glibtop_set_parameter_l
--glibtop_set_parameter_p
- glibtop_sys_siglist
-diff -Nrup libgtop-2.19.2/sysdeps/common/fsusage.c libgtop-2.19.2.mod/sysdeps/common/fsusage.c
---- libgtop-2.19.2/sysdeps/common/fsusage.c	2007-04-27 06:27:34.000000000 +0800
-+++ libgtop-2.19.2.mod/sysdeps/common/fsusage.c	2007-05-18 15:49:16.128329000 +0800
-@@ -148,6 +148,15 @@ _glibtop_freebsd_get_fsusage_read_write(
- 
- #define _glibtop_get_fsusage_read_write(S, B, P) \
- 	_glibtop_freebsd_get_fsusage_read_write(S, B, P)
-+	
-+#elif (defined(sun) || defined(__sun))
-+G_GNUC_INTERNAL void
-+_glibtop_sun_get_fsusage_read_write(glibtop *server,
-+					glibtop_fsusage *buf,
-+					const char *path);
+diff -Nrup libgtop-2.23.90.orig/procmap.c libgtop-2.23.90.mod/procmap.c
+--- libgtop-2.23.90.orig/procmap.c	1970-01-01 08:00:00.000000000 +0800
++++ libgtop-2.23.90.mod/procmap.c	2008-08-20 19:05:25.738052000 +0800
+@@ -0,0 +1,252 @@
++/* Copyright (C) 1998-99 Martin Baulig
++   This file is part of LibGTop 1.0.
++
++   Contributed by Martin Baulig <[email protected]>, 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 <config.h>
++#include <glibtop.h>
++#include <glibtop/error.h>
++#include <glibtop/procmap.h>
++
++#include <errno.h>
++
++#include "safeio.h"
++
++
++static const unsigned long _glibtop_sysdeps_proc_map =
++(1L << GLIBTOP_PROC_MAP_NUMBER) + (1L << GLIBTOP_PROC_MAP_TOTAL) +
++(1L << GLIBTOP_PROC_MAP_SIZE);
++static const unsigned long _glibtop_sysdeps_map_entry =
++(1L << GLIBTOP_MAP_ENTRY_START) + (1L << GLIBTOP_MAP_ENTRY_END) +
++(1L << GLIBTOP_MAP_ENTRY_OFFSET) + (1L << GLIBTOP_MAP_ENTRY_PERM);
++static const unsigned long _glibtop_sysdeps_map_device =
++(1L << GLIBTOP_MAP_ENTRY_DEVICE) + (1L << GLIBTOP_MAP_ENTRY_INODE);
++
++
++/* Init function. */
++
++void
++_glibtop_init_proc_map_s (glibtop *server)
++{
++	server->sysdeps.proc_map = _glibtop_sysdeps_proc_map;
++}
++
++/* Provides detailed information about a process. */
++
++glibtop_map_entry *
++glibtop_get_proc_map_s (glibtop *server, glibtop_proc_map *buf,	pid_t pid)
++{
++   	int fd, i, nmaps, pr_err, heap;
++
++        char filename [BUFSIZ];
++	/* use flags as a check condition, if it is 1, check, or, not check... zhua */
++	int check = buf->flags;
++	/* set flags back to 0 */
++	buf->flags = 0;
++
++#if GLIBTOP_SOLARIS_RELEASE >= 50600
++	prxmap_t *maps;
++//	struct ps_prochandle *Pr = NULL;
++#else
++	prmap_t *maps;
++#endif
++
++	/* A few defines, to make it shorter down there */
++
++#ifdef HAVE_PROCFS_H
++# define OFFSET  pr_offset
++#else
++# define OFFSET  pr_off
++#endif
++
++	glibtop_map_entry *entry;
++	struct stat inode;
++	char buffer[BUFSIZ];
++
++	memset (buf, 0, sizeof (glibtop_proc_map));
 +
-+#define _glibtop_get_fsusage_read_write(S, B, P) \
-+	_glibtop_sun_get_fsusage_read_write(S, B, P)
- 
- #else /* default fallback */
- #warning glibtop_get_fsusage .read .write are not implemented.
-diff -Nrup libgtop-2.19.2/sysdeps/common/mountlist.c libgtop-2.19.2.mod/sysdeps/common/mountlist.c
---- libgtop-2.19.2/sysdeps/common/mountlist.c	2007-04-27 06:27:34.000000000 +0800
-+++ libgtop-2.19.2.mod/sysdeps/common/mountlist.c	2007-05-18 15:53:42.191233000 +0800
-@@ -590,6 +590,17 @@ glibtop_get_mountlist_s (glibtop *server
++#ifdef HAVE_PROCFS_H
++	sprintf(buffer, "/proc/%d/xmap", (int)pid);
++#else
++	sprintf(buffer, "/proc/%d", (int)pid);
++#endif
++	if((fd = s_open(buffer, O_RDONLY)) < 0)
++	{
++	   	if (errno != EPERM && errno != EACCES)
++		   	glibtop_warn_io_r(server, "open (%s)", buffer);
++		return NULL;
++	}
++#ifdef HAVE_PROCFS_H
++	if(fstat(fd, &inode) < 0)
++	{
++	   	if(errno != EOVERFLOW)
++		   	glibtop_warn_io_r(server, "fstat (%s)", buffer);
++		/* else call daemon for 64-bit support */
++		s_close(fd);
++		return NULL;
++	}
++	maps = g_alloca(inode.st_size);
++	nmaps = inode.st_size / sizeof(prxmap_t);
++	if(s_pread(fd, maps, inode.st_size, 0) != inode.st_size)
++	{
++	   	glibtop_warn_io_r(server, "pread (%s)", buffer);
++		s_close(fd);
++		return NULL;
++	}
++#else
++	if(ioctl(fd, PIOCNMAP, &nmaps) < 0)
++	{
++	   	glibtop_warn_io_r(server, "ioctl(%s, PIOCNMAP)", buffer);
++		s_close(fd);
++		return NULL;
++	}
++	maps = g_alloca((nmaps + 1) * sizeof(prmap_t));
++	if(ioctl(fd, PIOCMAP, maps) < 0)
++	{
++	   	glibtop_warn_io_r(server, "ioctl(%s, PIOCMAP)", buffer);
++		s_close(fd);
++		return NULL;
++	}
++#endif
++	buf->number = nmaps;
++	buf->size = sizeof(glibtop_map_entry);
++	buf->total = nmaps * sizeof(glibtop_map_entry);
++	entry = g_malloc0(buf->total);
++
++//#if GLIBTOP_SOLARIS_RELEASE >= 50600
++
++//	if(server->machine.objname && server->machine.pgrab &&
++//	   server->machine.pfree)
++//	   Pr = (server->machine.pgrab)(pid, 1, &pr_err);
++//#endif
++	for(heap = 0,i = 0; i < nmaps; ++i)
++	{
++	   	int len;
++
++		/* take a check to see if we need all information, if not, just get what we need.. 
++		   Also please see comments in get_process_memory_writable() of gnome-system-monitor zhua */
++		if (check == 1)
++		{
++			if(maps[i].pr_mflags & MA_WRITE){
++		   	entry[i].perm |= GLIBTOP_MAP_PERM_WRITE;
++		   	entry[i].size = maps[i].pr_size;
++			}
++                if(maps[i].pr_mflags & MA_SHARED){
++                        entry[i].perm |= GLIBTOP_MAP_PERM_SHARED;
++			/* here use shared_clean to store Shared Memory */
++                        entry[i].shared_clean = maps[i].pr_size; 
++                	}
++		}
++                else
++                if (check == 2)
++                {
++                       if(maps[i].pr_mflags & MA_SHARED){
++                        entry[i].perm |= GLIBTOP_MAP_PERM_SHARED;
++                       /* here use shared_clean to store Shared Memory */
++                        entry[i].shared_clean = maps[i].pr_size;
++                       }
++                }
++		else {
++		
++	   	int len, rv;
++ 
++
++	   	entry[i].start = maps[i].pr_vaddr;
++		entry[i].end = maps[i].pr_vaddr + maps[i].pr_size;
++
++#if GLIBTOP_SOLARIS_RELEASE >= 50600
++
++		if(maps[i].pr_dev != PRNODEV)
++		{
++		   entry[i].device = maps[i].pr_dev;
++		   entry[i].inode = maps[i].pr_ino;
++		   entry[i].flags |= _glibtop_sysdeps_map_device;
++		}
++#endif
++		entry[i].offset = maps[i].OFFSET;
++		if(maps[i].pr_mflags & MA_READ)
++		   	entry[i].perm |= GLIBTOP_MAP_PERM_READ;
++		if(maps[i].pr_mflags & MA_WRITE){
++		   	entry[i].perm |= GLIBTOP_MAP_PERM_WRITE;
++		   	entry[i].size = maps[i].pr_size;
++		}
++		if(maps[i].pr_mflags & MA_EXEC)
++		   	entry[i].perm |= GLIBTOP_MAP_PERM_EXECUTE;
++		if(maps[i].pr_mflags & MA_SHARED)
++		   	entry[i].perm |= GLIBTOP_MAP_PERM_SHARED;
++		else
++		   	entry[i].perm |= GLIBTOP_MAP_PERM_PRIVATE;
++		entry[i].flags = _glibtop_sysdeps_map_entry;
++
++#if GLIBTOP_SOLARIS_RELEASE >= 50600
++
++		if(maps[i].pr_mflags & MA_ANON)
++		{
++		   if(!heap)
++		   {
++		      ++heap;
++		      strcpy(entry[i].filename, "[ heap ]");
++		   }
++		   else
++		      if(i == nmaps - 1)
++			 strcpy(entry[i].filename, "[ stack ]");
++		      else
++			 strcpy(entry[i].filename, "[ anon ]");
++		   entry[i].flags |= (1L << GLIBTOP_MAP_ENTRY_FILENAME);
++		}
++		else
++//		   if(Pr)
++//		   {
++//		      server->machine.objname(Pr, maps[i].pr_vaddr, buffer,
++//					      BUFSIZ);
++//		      if((len = resolvepath(buffer, entry[i].filename,
++//					    GLIBTOP_MAP_FILENAME_LEN)) > 0)
++//		      {
++//			 entry[i].filename[len] = 0;
++//			 entry[i].flags |= (1L << GLIBTOP_MAP_ENTRY_FILENAME);
++//		      }
++//		   }
++               {
++                        g_strlcpy(buffer, maps[i].pr_mapname,  sizeof buffer);
++                        /* from /path get file name */
++                        g_snprintf(filename, sizeof filename, "/proc/%d/path/%s",
++                                pid, buffer);
++ 
++                        rv = readlink(filename, entry[i].filename, sizeof(entry[i].filename) - 1);
++                        /* read object, if have not, set it as NULL */
++                        if(rv < 0)
++                                rv = 0;
++                        entry[i].filename[rv] = '\0';
++                        /* now set the flags */
++                        entry[i].flags |= (1L << GLIBTOP_MAP_ENTRY_FILENAME);
++                }
++#endif
++	}
++	}
++
++//#if GLIBTOP_SOLARIS_RELEASE >= 50600
++
++//	if(Pr)
++//	   	server->machine.pfree(Pr);
++//#endif
++	buf->flags = _glibtop_sysdeps_proc_map;
++	s_close(fd);
++	return entry;
++}
+diff -Nrup libgtop-2.23.90.orig/sysdeps/common/mountlist.c libgtop-2.23.90.mod/sysdeps/common/mountlist.c
+--- libgtop-2.23.90.orig/sysdeps/common/mountlist.c	2008-05-24 06:13:22.000000000 +0800
++++ libgtop-2.23.90.mod/sysdeps/common/mountlist.c	2008-08-20 11:03:42.561589000 +0800
+@@ -591,6 +591,17 @@ glibtop_get_mountlist_s (glibtop *server
  
  	for (cur = &entries[0]; cur != NULL; cur = next) {
  
@@ -194,136 +292,32 @@
  		if(all_fs || !ignore_mount_entry(cur)) {
  			/* add a new glibtop_mountentry */
  			glibtop_mountentry e;
-diff -Nrup libgtop-2.19.2/sysdeps/solaris/Makefile.am libgtop-2.19.2.mod/sysdeps/solaris/Makefile.am
---- libgtop-2.19.2/sysdeps/solaris/Makefile.am	2007-04-27 06:27:38.000000000 +0800
-+++ libgtop-2.19.2.mod/sysdeps/solaris/Makefile.am	2007-05-19 00:44:12.362476000 +0800
-@@ -8,7 +8,7 @@ libgtop_sysdeps_2_0_la_SOURCES	= open.c 
- 				  proclist.c procstate.c procuid.c \
+diff -Nrup libgtop-2.23.90.orig/sysdeps/solaris/Makefile.am libgtop-2.23.90.mod/sysdeps/solaris/Makefile.am
+--- libgtop-2.23.90.orig/sysdeps/solaris/Makefile.am	2008-05-24 06:13:24.000000000 +0800
++++ libgtop-2.23.90.mod/sysdeps/solaris/Makefile.am	2008-08-20 21:07:30.398511000 +0800
+@@ -9,6 +9,7 @@ libgtop_sysdeps_2_0_la_SOURCES	= open.c 
  				  proctime.c procmem.c procsignal.c \
  				  prockernel.c procsegment.c procargs.c \
--				  procopenfiles.c \
-+				  procopenfiles.c sysinfo.c fsusage.c procwd.c glibtop_private.c \
+ 				  procopenfiles.c \
++                                  sysinfo.c procwd.c glibtop_private.c procaffinity.c \
  				  procmap.c netload.c ppp.c procdata.c netlist.c
  
  libgtop_sysdeps_2_0_la_LDFLAGS	= $(LT_VERSION_INFO)
-diff -Nrup libgtop-2.19.2/sysdeps/solaris/cpu.c libgtop-2.19.2.mod/sysdeps/solaris/cpu.c
---- libgtop-2.19.2/sysdeps/solaris/cpu.c	2007-04-27 06:27:38.000000000 +0800
-+++ libgtop-2.19.2.mod/sysdeps/solaris/cpu.c	2007-05-18 23:10:50.519504000 +0800
+diff -Nrup libgtop-2.23.90.orig/sysdeps/solaris/cpu.c libgtop-2.23.90.mod/sysdeps/solaris/cpu.c
+--- libgtop-2.23.90.orig/sysdeps/solaris/cpu.c	2008-05-24 06:13:24.000000000 +0800
++++ libgtop-2.23.90.mod/sysdeps/solaris/cpu.c	2008-08-20 11:06:54.437929000 +0800
 @@ -34,6 +34,7 @@ static const unsigned long _glibtop_sysd
  
  static const unsigned long _glibtop_sysdeps_cpu_all =
  (1L << GLIBTOP_CPU_TOTAL) + (1L << GLIBTOP_CPU_USER) +
-++(1L << GLIBTOP_CPU_NICE) + /* this value is needed by multiload */
++(1L << GLIBTOP_CPU_NICE) + /* this value is needed by multiload */
  (1L << GLIBTOP_CPU_SYS) + (1L << GLIBTOP_CPU_IDLE) +
  (1L << GLIBTOP_XCPU_TOTAL) + (1L << GLIBTOP_XCPU_USER) +
  (1L << GLIBTOP_XCPU_SYS) + (1L << GLIBTOP_XCPU_IDLE) +
-diff -Nrup libgtop-2.19.2/sysdeps/solaris/fsusage.c libgtop-2.19.2.mod/sysdeps/solaris/fsusage.c
---- libgtop-2.19.2/sysdeps/solaris/fsusage.c	1970-01-01 08:00:00.000000000 +0800
-+++ libgtop-2.19.2.mod/sysdeps/solaris/fsusage.c	2007-05-18 23:27:13.387170000 +0800
-@@ -0,0 +1,99 @@
-+#include <config.h>
-+#include <glibtop.h>
-+#include <glibtop/error.h>
-+#include <glibtop/fsusage.h>
-+#include <glibtop/union.h>
-+
-+#include "glibtop_private.h"
-+
-+#include <glib.h>
-+
-+#include <unistd.h>
-+#include <kstat.h>
-+#include <sys/types.h>
-+#include <sys/stat.h>
-+#include <sys/statvfs.h>
-+
-+#include <stdio.h>
-+#include <string.h>
-+#include <stdlib.h>
-+
-+G_GNUC_INTERNAL void 
-+_glibtop_sun_get_fsusage_read_write(glibtop *server,
-+				      glibtop_fsusage *buf,
-+				      const char *path)
-+{
-+        struct statvfs64       statvfsbuf;
-+        char            ksname[KSTAT_STRLEN + 1];
-+    	kstat_ctl_t * const kctl = server->machine.kc;
-+	kstat_t		*ksp;
-+     	kstat_io_t     	kio;
-+	kstat_named_t   *kread, *kwrite;
-+	int i;
-+	
-+        /*
-+         *  get a kstat handle and update the user's kstat chain
-+         */
-+        if( kctl == NULL ){ 
-+                glibtop_warn_io_r (server, "kstat_open ()");
-+                return;
-+        }
-+	
-+        /* make sure we have current data */  
-+	while( kstat_chain_update( kctl ) != 0 )
-+                ;
-+		
-+         for (ksp = kctl->kc_chain, i =0; ksp != NULL; ksp = ksp->ks_next, i++) {  
-+		if (ksp->ks_type == KSTAT_TYPE_IO && strcmp(ksp->ks_class,"disk") == 0) { 
-+              		kstat_read(kctl, ksp, &kio);  
-+               		buf->read +=  kio.nread;       
-+			buf->write +=  kio.nwritten;
-+		}  
-+	}
-+#if 0
-+	/* these codes keep here, because they are a good way to get the 
-+	   fsusage information, but at the moment, the interfaces used 
-+	   are not public or stable. so let's use them when public...
-+	  */
-+        /*
-+         *  get a kstat handle and update the user's kstat chain
-+         */
-+        if( kctl == NULL ){
-+                glibtop_warn_io_r (server, "kstat_open ()");
-+                return;
-+        }
-+	   
-+	while( kstat_chain_update( kctl ) != 0 )
-+                ;
-+
-+	if (statvfs64(path, &statvfsbuf) != 0) {
-+                glibtop_warn_io_r (server, "kstat_open ()");
-+		return;
-+	}        
-+	snprintf(ksname, KSTAT_STRLEN, "%s%lx", VOPSTATS_STR,
-+                        	statvfsbuf.f_fsid);
-+
-+       	/*
-+         *  traverse the kstat chain
-+         *  to find the appropriate statistics
-+         */
-+        if( (ksp = kstat_lookup( kctl,
-+                       "unix", 0, ksname )) == NULL ) {
-+               	return;
-+        }
-+        if( kstat_read( kctl, ksp, NULL ) == -1 ) {
-+               	return;
-+        }
-+
-+	kread = (kstat_named_t *)kstat_data_lookup(ksp,"read_bytes");
-+        if( kread != NULL ) {
-+               	buf->read = kread->value.ull;
-+        }
-+
-+        kwrite = (kstat_named_t *)kstat_data_lookup(ksp,"write_bytes");
-+        if( kwrite != NULL ) {
-+               	buf->write = kwrite->value.ull;
-+        }
-+#endif
-+        buf->flags |= (1 << GLIBTOP_FSUSAGE_READ) | (1 << GLIBTOP_FSUSAGE_WRITE);
-+}
-diff -Nrup libgtop-2.19.2/sysdeps/solaris/glibtop_machine.h libgtop-2.19.2.mod/sysdeps/solaris/glibtop_machine.h
---- libgtop-2.19.2/sysdeps/solaris/glibtop_machine.h	2007-04-27 06:27:38.000000000 +0800
-+++ libgtop-2.19.2.mod/sysdeps/solaris/glibtop_machine.h	2007-05-18 16:05:20.322950000 +0800
-@@ -61,14 +61,7 @@ struct _glibtop_machine
+diff -Nrup libgtop-2.23.90.orig/sysdeps/solaris/glibtop_machine.h libgtop-2.23.90.mod/sysdeps/solaris/glibtop_machine.h
+--- libgtop-2.23.90.orig/sysdeps/solaris/glibtop_machine.h	2008-05-24 06:13:24.000000000 +0800
++++ libgtop-2.23.90.mod/sysdeps/solaris/glibtop_machine.h	2008-08-20 11:48:46.031067000 +0800
+@@ -61,14 +61,14 @@ struct _glibtop_machine
      int pagesize;		/* in bits to shift, ie. 2^pagesize gives Kb */
      int ticks;			/* clock ticks, as returned by sysconf() */
      unsigned long long boot;	/* boot time, although it's ui32 in kstat */
@@ -333,14 +327,21 @@
 -    struct ps_prochandle *(*pgrab)(pid_t, int, int *);
 -    void (*pfree)(void *);
 -#else
++//    void *libproc;		/* libproc handle */
++//#if GLIBTOP_SOLARIS_RELEASE >= 50600
++//    void (*objname)(void *, uintptr_t, const char *, size_t);
++//    struct ps_prochandle *(*pgrab)(pid_t, int, int *);
++//    void (*pfree)(void *);
++//#else
      void *filler[3];
 -#endif
++//#endif
  };
  
  G_END_DECLS
-diff -Nrup libgtop-2.19.2/sysdeps/solaris/glibtop_private.c libgtop-2.19.2.mod/sysdeps/solaris/glibtop_private.c
---- libgtop-2.19.2/sysdeps/solaris/glibtop_private.c	1970-01-01 08:00:00.000000000 +0800
-+++ libgtop-2.19.2.mod/sysdeps/solaris/glibtop_private.c	2007-05-19 00:39:20.309851000 +0800
+diff -Nrup libgtop-2.23.90.orig/sysdeps/solaris/glibtop_private.c libgtop-2.23.90.mod/sysdeps/solaris/glibtop_private.c
+--- libgtop-2.23.90.orig/sysdeps/solaris/glibtop_private.c	1970-01-01 08:00:00.000000000 +0800
++++ libgtop-2.23.90.mod/sysdeps/solaris/glibtop_private.c	2008-08-20 11:50:10.409057000 +0800
 @@ -0,0 +1,203 @@
 +#include <config.h>
 +#include <glibtop.h>
@@ -545,9 +546,9 @@
 +	buf[ret] = '\0';
 +	return TRUE;
 +}
-diff -Nrup libgtop-2.19.2/sysdeps/solaris/glibtop_private.h libgtop-2.19.2.mod/sysdeps/solaris/glibtop_private.h
---- libgtop-2.19.2/sysdeps/solaris/glibtop_private.h	2007-04-27 06:27:38.000000000 +0800
-+++ libgtop-2.19.2.mod/sysdeps/solaris/glibtop_private.h	2007-05-19 00:34:12.544055000 +0800
+diff -Nrup libgtop-2.23.90.orig/sysdeps/solaris/glibtop_private.h libgtop-2.23.90.mod/sysdeps/solaris/glibtop_private.h
+--- libgtop-2.23.90.orig/sysdeps/solaris/glibtop_private.h	2008-05-24 06:13:24.000000000 +0800
++++ libgtop-2.23.90.mod/sysdeps/solaris/glibtop_private.h	2008-08-20 11:50:43.153956000 +0800
 @@ -60,6 +60,8 @@ int glibtop_get_proc_credentials_s(glibt
  /* Reread kstat chains */
  void glibtop_get_kstats(glibtop *);
@@ -557,9 +558,9 @@
  G_END_DECLS
  
  #endif /* __GLIBTOP_PRIVATE_H__ */
-diff -Nrup libgtop-2.19.2/sysdeps/solaris/glibtop_server.h libgtop-2.19.2.mod/sysdeps/solaris/glibtop_server.h
---- libgtop-2.19.2/sysdeps/solaris/glibtop_server.h	2007-04-27 06:27:38.000000000 +0800
-+++ libgtop-2.19.2.mod/sysdeps/solaris/glibtop_server.h	2007-05-18 18:37:08.382200000 +0800
+diff -Nrup libgtop-2.23.90.orig/sysdeps/solaris/glibtop_server.h libgtop-2.23.90.mod/sysdeps/solaris/glibtop_server.h
+--- libgtop-2.23.90.orig/sysdeps/solaris/glibtop_server.h	2008-05-24 06:13:24.000000000 +0800
++++ libgtop-2.23.90.mod/sysdeps/solaris/glibtop_server.h	2008-08-20 20:27:29.536004000 +0800
 @@ -29,9 +29,15 @@ G_BEGIN_DECLS
  #define GLIBTOP_SUID_SWAP		0
  #define GLIBTOP_SUID_UPTIME		0
@@ -576,23 +577,26 @@
  #define GLIBTOP_SUID_PROCLIST		0
  #define GLIBTOP_SUID_PROC_STATE		0
  #define GLIBTOP_SUID_PROC_UID		0
-@@ -44,6 +50,7 @@ G_BEGIN_DECLS
+@@ -44,7 +50,10 @@ G_BEGIN_DECLS
  #define GLIBTOP_SUID_PROC_MAP		0
  #define GLIBTOP_SUID_NETLOAD		0
  #define GLIBTOP_SUID_NETLIST		0
 +#define GLIBTOP_SUID_PROC_WD		0
  #define GLIBTOP_SUID_PPP		0
++#define GLIBTOP_SUID_PROC_AFFINITY	0
++
  
  G_END_DECLS
-diff -Nrup libgtop-2.19.2/sysdeps/solaris/msg_limits.c libgtop-2.19.2.mod/sysdeps/solaris/msg_limits.c
---- libgtop-2.19.2/sysdeps/solaris/msg_limits.c	2007-04-27 06:27:38.000000000 +0800
-+++ libgtop-2.19.2.mod/sysdeps/solaris/msg_limits.c	2007-05-18 18:26:18.794307000 +0800
+ 
+diff -Nrup libgtop-2.23.90.orig/sysdeps/solaris/msg_limits.c libgtop-2.23.90.mod/sysdeps/solaris/msg_limits.c
+--- libgtop-2.23.90.orig/sysdeps/solaris/msg_limits.c	2008-05-24 06:13:24.000000000 +0800
++++ libgtop-2.23.90.mod/sysdeps/solaris/msg_limits.c	2008-08-20 11:54:47.408687000 +0800
 @@ -37,14 +37,24 @@ static const unsigned long _glibtop_sysd
  (1L << GLIBTOP_IPC_MSGMNB) + (1L << GLIBTOP_IPC_MSGMNI) +
  (1L << GLIBTOP_IPC_MSGTQL);
  #else
 -static const unsigned long _glibtop_sysdeps_msg_limits = 0;
-+static const unsigned long _glibtop_sysdeps_msg_limits =
++static const unsigned long _glibtop_sysdeps_msg_limits = 
 +(1L << GLIBTOP_IPC_MSGMNB) +
 +(1L << GLIBTOP_IPC_MSGMNI) +
 +(1L << GLIBTOP_IPC_MSGMAX) +
@@ -627,86 +631,13 @@
  {
  #if GLIBTOP_SOLARIS_RELEASE < 51000
  
-diff -Nrup libgtop-2.19.2/sysdeps/solaris/netlist.c libgtop-2.19.2.mod/sysdeps/solaris/netlist.c
---- libgtop-2.19.2/sysdeps/solaris/netlist.c	2007-04-27 06:27:38.000000000 +0800
-+++ libgtop-2.19.2.mod/sysdeps/solaris/netlist.c	2007-05-18 16:11:55.054558000 +0800
-@@ -41,7 +41,13 @@ glibtop_get_netlist_s (glibtop *server, 
- {
- 	GPtrArray *devices;
- 	kstat_t *ksp;
--	kstat_ctl_t *kc;
-+	/* use the kc installed in server, don't need to create again, 
-+      	   it will save some time and improve performance */
-+        kstat_ctl_t * const kc = server->machine.kc;
-+	/* use flags as a check condition, if it is 1, check, or not check... zhua */
-+        int check = buf->flags;
-+	/* set flags back to 0 */
-+	buf->flags = 0; 
- 
- 	glibtop_init_s (&server, GLIBTOP_SYSDEPS_NETLIST, 0);
- 
-@@ -49,7 +55,6 @@ glibtop_get_netlist_s (glibtop *server, 
- 
- 	devices = g_ptr_array_new();
- 
--	kc = kstat_open();
- 	if (kc == NULL) {
- 		glibtop_warn_io_r(server, "kstat_open()");
- 		return NULL;
-@@ -60,11 +65,26 @@ glibtop_get_netlist_s (glibtop *server, 
- 		if (strcmp(ksp->ks_class, "net") != 0)
- 			continue;
+diff -Nrup libgtop-2.23.90.orig/sysdeps/solaris/netload.c libgtop-2.23.90.mod/sysdeps/solaris/netload.c
+--- libgtop-2.23.90.orig/sysdeps/solaris/netload.c	2008-05-24 06:13:24.000000000 +0800
++++ libgtop-2.23.90.mod/sysdeps/solaris/netload.c	2008-08-20 20:11:42.601468000 +0800
+@@ -37,6 +37,17 @@
  
--		g_ptr_array_add(devices, g_strdup(ksp->ks_name));
--		buf->number++;
--	}
-+               /* do some check to see if the first character is the same between
-+                  name and module, if not, we don't return it, because 
-+		  glibtop_get_netload() only want the same ones....
-+                */
-+               if (check){
-+                       /* if the first character is not same, they should not
-+                          the one we will use in glibtop_get_netload() */
-+                       if (ksp->ks_name[0] != ksp->ks_module[0])
-+                               continue;
-+                       /* because in glibtop_get_netload(), name
-+                          is at least 1 character longer than module */
-+                       if (strlen( ksp->ks_module ) >= strlen( ksp->ks_name))
-+                               continue;
-+                       /* if it's not digital, continue directly */
-+                       if( !isdigit( (int) ksp->ks_name[strlen( ksp->ks_module )] ))
-+                               continue;
-+               }
-+               g_ptr_array_add(devices, g_strdup(ksp->ks_name));
-+               buf->number++;	}
- 
--	kstat_close(kc);
+ #include <net/if.h>
  
- 	buf->flags = _glibtop_sysdeps_netlist;
- 
-diff -Nrup libgtop-2.19.2/sysdeps/solaris/netload.c libgtop-2.19.2.mod/sysdeps/solaris/netload.c
---- libgtop-2.19.2/sysdeps/solaris/netload.c	2007-04-27 06:27:38.000000000 +0800
-+++ libgtop-2.19.2.mod/sysdeps/solaris/netload.c	2007-05-18 18:03:14.142003000 +0800
-@@ -24,14 +24,245 @@
- #include <glibtop/error.h>
- #include <glibtop/netload.h>
- 
--static const unsigned long _glibtop_sysdeps_netload = 0;
-+#include "glibtop_private.h"
-+
-+#include <errno.h>
-+#include <string.h>
-+#include <kstat.h>
-+
-+#include <sys/types.h>
-+#include <sys/socket.h>
-+#include <sys/ioctl.h>
-+#include <sys/sockio.h>
-+
-+//#if !defined (_LIBC) && defined (__GNU_LIBRARY__) && __GNU_LIBRARY__ > 1
-+/* GNU LibC */
-+#include <net/if.h>
-+
 +#ifdef HAVE_IFADDRS_H
 +/* needed for IPV6 support */
 +
@@ -718,60 +649,13 @@
 +     || (((__const uint8_t *) (a))[0] & 0xff) == 0x20))
 +#endif
 +#endif /* HAVE_IFADDRS_H */
-+
-+static const unsigned long _glibtop_sysdeps_netload =
-+(1L << GLIBTOP_NETLOAD_ERRORS_IN) +
-+(1L << GLIBTOP_NETLOAD_ERRORS_OUT) +
-+(1L << GLIBTOP_NETLOAD_COLLISIONS);
-+
-+static const unsigned long _glibtop_sysdeps_netload_data =
-+(1L << GLIBTOP_NETLOAD_ADDRESS) +
-+(1L << GLIBTOP_NETLOAD_SUBNET) +
-+(1L << GLIBTOP_NETLOAD_MTU);
-+
-+static const unsigned long _glibtop_sysdeps_netload_bytes =
-+(1L << GLIBTOP_NETLOAD_BYTES_IN) +
-+(1L << GLIBTOP_NETLOAD_BYTES_OUT) +
-+(1L << GLIBTOP_NETLOAD_BYTES_TOTAL);
-+
-+static const unsigned long _glibtop_sysdeps_netload_packets =
-+(1L << GLIBTOP_NETLOAD_PACKETS_IN) +
-+(1L << GLIBTOP_NETLOAD_PACKETS_OUT) +
-+(1L << GLIBTOP_NETLOAD_PACKETS_TOTAL);
-+
-+static const unsigned long _glibtop_sysdeps_netload_total =
-+(1L << GLIBTOP_NETLOAD_PACKETS_TOTAL) +
-+(1L << GLIBTOP_NETLOAD_BYTES_TOTAL);
-+
-+static const unsigned long _glibtop_sysdeps_netload_in =
-+(1L << GLIBTOP_NETLOAD_PACKETS_TOTAL) +
-+(1L << GLIBTOP_NETLOAD_BYTES_TOTAL) +
-+(1L << GLIBTOP_NETLOAD_PACKETS_IN) +
-+(1L << GLIBTOP_NETLOAD_BYTES_IN);
-+
-+static const unsigned long _glibtop_sysdeps_netload_out =
-+(1L << GLIBTOP_NETLOAD_PACKETS_TOTAL) +
-+(1L << GLIBTOP_NETLOAD_BYTES_TOTAL) +
-+(1L << GLIBTOP_NETLOAD_PACKETS_OUT) +
-+(1L << GLIBTOP_NETLOAD_BYTES_OUT);
-+
-+static const unsigned long _glibtop_sysdeps_netload_6 =
-+(1L << GLIBTOP_NETLOAD_ADDRESS6) +
-+(1L << GLIBTOP_NETLOAD_PREFIX6) +
-+(1L << GLIBTOP_NETLOAD_SCOPE6);
  
- /* Init function. */
+ static const unsigned long _glibtop_sysdeps_netload =
+ (1L << GLIBTOP_NETLOAD_ERRORS_IN) +
+@@ -89,6 +100,72 @@ _glibtop_init_netload_s (glibtop *server
+ 	_glibtop_sysdeps_netload_packets;
+ }
  
- void
- _glibtop_init_netload_s (glibtop *server)
- {
--	server->sysdeps.netload = _glibtop_sysdeps_netload;
-+   server->sysdeps.netload = _glibtop_sysdeps_netload |
-+	_glibtop_sysdeps_netload_bytes |
-+	_glibtop_sysdeps_netload_packets;
-+}
-+
-+
 +#ifdef HAVE_IFADDRS_H
 +
 +static void get_ipv6(glibtop *server, glibtop_netload *buf,
@@ -838,188 +722,44 @@
 +
 +#endif /* HAVE_IFADDRS_H */
 +
-+
-+
-+static int
-+solaris_stats(glibtop *server,
-+		glibtop_netload *buf,
-+		const char *interface)
-+{
-+	char	*name = interface;
-+	char	*module;
-+	char	*ptr;
-+    	kstat_ctl_t * const kctl = server->machine.kc;
-+	kstat_t			*ksp;
-+	kstat_named_t		*kdata;
-+	int have_bytes = 1;
-+
-+	/*
-+	 *  chop off the trailing interface and 
-+	 */
-+	module = strdup( name );
-+	ptr = module + strlen( module ) - 1;
-+	while( (ptr > module) && isdigit( (int) *ptr ) ) {
-+		*ptr = '\0';
-+		ptr--;
-+	}
-+
-+	/*
-+	 *  get a kstat handle and update the user's kstat chain
-+	 */
-+	if( kctl == NULL ){
-+		glibtop_warn_io_r (server, "kstat_open ()");
-+		free( module );
-+		return( 0 );
-+	}
-+	while( kstat_chain_update( kctl ) != 0 )
-+		;
-+
-+	/*
-+	 *  traverse the kstat chain
-+	 *  to find the appropriate statistics
-+	 */
-+	if( (ksp = kstat_lookup( kctl,
-+			module, 0, name )) == NULL ) {
-+		free( module );
-+		return( 0 );
-+	}
-+	if( kstat_read( kctl, ksp, NULL ) == -1 ) {
-+		free( module );
-+		return( 0 );
-+	}
-+	free( module );
+ static int
+ solaris_stats(glibtop *server,
+ 		glibtop_netload *buf,
+@@ -245,6 +322,13 @@ glibtop_get_netload_s (glibtop *server, 
+ 	    buf->subnet = ((struct sockaddr_in *) &ifr.ifr_addr)->sin_addr.s_addr;
+ 	    buf->flags |= (1L << GLIBTOP_NETLOAD_SUBNET);
+ 	}
 +
-+	/*
-+	 *  lookup & store the data
-+	 */
-+	kdata = (kstat_named_t *) kstat_data_lookup( ksp, "ipackets" );
-+	if( kdata != NULL ) {
-+		buf->packets_in= kdata->value.ul;
-+	}
-+	kdata = (kstat_named_t *) kstat_data_lookup( ksp, "opackets" );
-+	if( kdata != NULL ) {
-+		buf->packets_out = kdata->value.ul;
-+	}
-+	kdata = (kstat_named_t *) kstat_data_lookup( ksp, "rbytes" );
-+	if( kdata != NULL ) {
-+		buf->bytes_in =kdata->value.ul;
-+	}
-+	kdata = (kstat_named_t *) kstat_data_lookup( ksp, "obytes" );
-+	if( kdata != NULL ) {
-+		buf->bytes_out =kdata->value.ul;
-+	}
-+	kdata = (kstat_named_t *) kstat_data_lookup( ksp, "ierrors" );
-+	if( kdata != NULL ) {
-+		buf->errors_in = kdata->value.ul;
-+	}
-+	kdata = (kstat_named_t *) kstat_data_lookup( ksp, "oerrors" );
-+	if( kdata != NULL ) {
-+		buf->errors_out = kdata->value.ul;
-+	}
-+	kdata = (kstat_named_t *) kstat_data_lookup( ksp, "collisions" );
-+	if( kdata != NULL ) {
-+		buf->collisions = kdata->value.ul;
-+	}
-+	
-+	/* Compute total valules. */
-+
-+	buf->bytes_total = buf->bytes_in + buf->bytes_out;
-+	buf->packets_total = buf->packets_in + buf->packets_out;
-+	buf->errors_total = buf->errors_in + buf->errors_out;
-+	/* And now the flags. */
-+	buf->flags |= _glibtop_sysdeps_netload;
-+	buf->flags |= _glibtop_sysdeps_netload_bytes;
-+	buf->flags |= _glibtop_sysdeps_netload_packets;
-+	    
-+	/* finished */
- }
- 
- /* Provides network statistics. */
-@@ -40,5 +271,72 @@ void
- glibtop_get_netload_s (glibtop *server, glibtop_netload *buf,
- 		       const char *interface)
- {
--	memset (buf, 0, sizeof (glibtop_netload));
-+   int skfd;
-+    memset (buf, 0, sizeof (glibtop_netload));
++/*	g_strlcpy (ifr.ifr_name, interface, sizeof ifr.ifr_name);
++	if (!ioctl (skfd, SIOCGIFHWADDR, &ifr)) {
++	    memcpy(buf->hwaddress, &ifr.ifr_hwaddr.sa_data, 8);
++	    buf->flags |= (1L << GLIBTOP_NETLOAD_HWADDRESS);
++	}*/
 +
-+    /* set flag */
-+    skfd = socket (PF_INET, SOCK_DGRAM, 0);
-+    if (skfd) {
-+	struct ifreq ifr;
-+
-+	g_strlcpy (ifr.ifr_name, interface, sizeof ifr.ifr_name);
-+	if (ioctl (skfd, SIOCGIFFLAGS, &ifr) >= 0) {
-+	    const unsigned long long flags = ifr.ifr_flags;
-+
-+	    buf->flags |= (1L << GLIBTOP_NETLOAD_IF_FLAGS);
-+
-+	    if (flags & IFF_UP)
-+		buf->if_flags |= (1L << GLIBTOP_IF_FLAGS_UP);
-+
-+	    if (flags & IFF_BROADCAST)
-+		buf->if_flags |= (1L << GLIBTOP_IF_FLAGS_BROADCAST);
-+
-+	    if (flags & IFF_DEBUG)
-+		buf->if_flags |= (1L << GLIBTOP_IF_FLAGS_DEBUG);
-+
-+	    if (flags & IFF_LOOPBACK)
-+		buf->if_flags |= (1L << GLIBTOP_IF_FLAGS_LOOPBACK);
-+
-+	    if (flags & IFF_POINTOPOINT)
-+		buf->if_flags |= (1L << GLIBTOP_IF_FLAGS_POINTOPOINT);
-+
-+	    if (flags & IFF_RUNNING)
-+		buf->if_flags |= (1L << GLIBTOP_IF_FLAGS_RUNNING);
-+
-+	    if (flags & IFF_NOARP)
-+		buf->if_flags |= (1L << GLIBTOP_IF_FLAGS_NOARP);
-+
-+	    if (flags & IFF_PROMISC)
-+		buf->if_flags |= (1L << GLIBTOP_IF_FLAGS_PROMISC);
-+
-+	    if (flags & IFF_ALLMULTI)
-+		buf->if_flags |= (1L << GLIBTOP_IF_FLAGS_ALLMULTI);
-+
-+	    if (flags & IFF_MULTICAST)
-+		buf->if_flags |= (1L << GLIBTOP_IF_FLAGS_MULTICAST);
-+	    }
-+
-+	g_strlcpy (ifr.ifr_name, interface, sizeof ifr.ifr_name);
-+	if (!ioctl (skfd, SIOCGIFADDR, &ifr)) {
-+	    buf->address = ((struct sockaddr_in *) &ifr.ifr_addr)->sin_addr.s_addr;
-+	    buf->flags |= (1L << GLIBTOP_NETLOAD_ADDRESS);
-+	}
-+
-+	g_strlcpy (ifr.ifr_name, interface, sizeof ifr.ifr_name);
-+	if (!ioctl (skfd, SIOCGIFNETMASK, &ifr)) {
-+	    buf->subnet = ((struct sockaddr_in *) &ifr.ifr_addr)->sin_addr.s_addr;
-+	    buf->flags |= (1L << GLIBTOP_NETLOAD_SUBNET);
-+	}
-+	close (skfd);
-+    }
-+
-+    /*
-+     * Statistics
-+     */
-+     
-+    solaris_stats(server, buf, interface);
-+
+ 	close (skfd);
+     }
+ 
+@@ -254,4 +338,7 @@ glibtop_get_netload_s (glibtop *server, 
+      
+     solaris_stats(server, buf, interface);
+ 
 +#ifdef HAVE_IFADDRS_H
 +    get_ipv6(server, buf, interface);
 +#endif /* HAVE_IFADDRS_H */
  }
-diff -Nrup libgtop-2.19.2/sysdeps/solaris/open.c libgtop-2.19.2.mod/sysdeps/solaris/open.c
---- libgtop-2.19.2/sysdeps/solaris/open.c	2007-04-27 06:27:38.000000000 +0800
-+++ libgtop-2.19.2.mod/sysdeps/solaris/open.c	2007-05-18 16:21:21.872457000 +0800
-@@ -209,34 +209,5 @@ glibtop_open_s (glibtop *server, const c
+diff -Nrup libgtop-2.23.90.orig/sysdeps/solaris/open.c libgtop-2.23.90.mod/sysdeps/solaris/open.c
+--- libgtop-2.23.90.orig/sysdeps/solaris/open.c	2008-05-24 06:13:24.000000000 +0800
++++ libgtop-2.23.90.mod/sysdeps/solaris/open.c	2008-08-20 18:55:17.944520000 +0800
+@@ -209,34 +209,34 @@ glibtop_open_s (glibtop *server, const c
  	    }
      }
  
 -    /* Now let's have a bit of magic dust... */
--
++// /* Now let's have a bit of magic dust... */
+ 
 -#if GLIBTOP_SOLARIS_RELEASE >= 50600
--
++//#if GLIBTOP_SOLARIS_RELEASE >= 50600
+ 
 -    dl = dlopen("/usr/lib/libproc.so", RTLD_LAZY);
 -    if(server->machine.libproc)
 -    	dlclose(server->machine.libproc);
@@ -1027,7 +767,14 @@
 -    if(dl)
 -    {
 -       void *func;
--
++ //   dl = dlopen("/usr/lib/libproc.so", RTLD_LAZY);
++  //  if(server->machine.libproc)
++//   // 	dlclose(server->machine.libproc);
++ //   server->machine.libproc = dl;
++  //  if(dl)
++   // {
++    //   void *func;
+ 
 -       func = dlsym(dl, "Pobjname");		/* Solaris 8 */
 -       if(!func)
 -	  func = dlsym(dl, "proc_objname");	/* Solaris 7 */
@@ -1045,40 +792,153 @@
 -       server->machine.pfree = NULL;
 -    }
 -#endif
++     //  func = dlsym(dl, "Pobjname");		/* Solaris 8 */
++      // if(!func)
++//	  func = dlsym(dl, "proc_objname");	/* Solaris 7 */
++ //      server->machine.objname = (void (*)
++//				 (void *, uintptr_t, const char *, size_t))func;
++ //      server->machine.pgrab = (struct ps_prochandle *(*)(pid_t, int, int *))
++//	  		       dlsym(dl, "Pgrab");
++ //      server->machine.pfree = (void (*)(void *))dlsym(dl, "Pfree");
++  //     
++   // }
++   // else
++   // {
++   //    server->machine.objname = NULL;
++   //    server->machine.pgrab = NULL;
++   //    server->machine.pfree = NULL;
++   // }
++//#endif
      server->machine.me = getpid();
  }
-diff -Nrup libgtop-2.19.2/sysdeps/solaris/procmap.c libgtop-2.19.2.mod/sysdeps/solaris/procmap.c
---- libgtop-2.19.2/sysdeps/solaris/procmap.c	2007-04-27 06:27:38.000000000 +0800
-+++ libgtop-2.19.2.mod/sysdeps/solaris/procmap.c	2007-05-18 17:45:40.836275000 +0800
-@@ -54,9 +54,14 @@ glibtop_map_entry *
+diff -Nrup libgtop-2.23.90.orig/sysdeps/solaris/procaffinity.c libgtop-2.23.90.mod/sysdeps/solaris/procaffinity.c
+--- libgtop-2.23.90.orig/sysdeps/solaris/procaffinity.c	1970-01-01 08:00:00.000000000 +0800
++++ libgtop-2.23.90.mod/sysdeps/solaris/procaffinity.c	2008-08-20 20:39:47.771308000 +0800
+@@ -0,0 +1,84 @@
++/* Copyright (C) 2007 Joe Marcus Clarke <[email protected]>
++   This file is part of LibGTop 2.
++
++   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 <config.h>
++#include <glibtop/procaffinity.h>
++#include <glibtop/error.h>
++
++#include <glibtop_private.h>
++
++#include <sys/param.h>
++
++void
++_glibtop_init_proc_affinity_s(glibtop *server)
++{
++/* 
++  server->sysdeps.proc_affinity =
++    (1 << GLIBTOP_PROC_AFFINITY_NUMBER) |
++    (1 << GLIBTOP_PROC_AFFINITY_ALL);
++*/
++}
++
++
++guint16 *
++glibtop_get_proc_affinity_s(glibtop *server, glibtop_proc_affinity *buf, pid_t pid)
++{
++/*
++#if __FreeBSD_version > 800024
++  id_t id;
++  cpulevel_t level;
++  cpuwhich_t which;
++  cpuset_t mask;
++  size_t i;
++  GArray* cpus;
++
++  memset(buf, 0, sizeof *buf);
++
++  which = CPU_WHICH_PID;
++  level = CPU_LEVEL_WHICH;
++  id = pid;
++
++  if (cpuset_getaffinity(level, which, id, sizeof(mask), &mask) != 0) {
++    glibtop_error_r(server, "cpuset_getaffinity failed");
++    return NULL;
++  }
++
++  cpus = g_array_new(FALSE, FALSE, sizeof(guint16));
++
++  for (i = 0; i < MIN(CPU_SETSIZE, (size_t)(server->ncpu + 1)); i++) {
++    if (CPU_ISSET(i, &mask)) {
++      guint16 n = i;
++      g_array_append_val(cpus, n);
++    }
++  }
++
++  buf->number = cpus->len;
++  buf->all = (cpus->len == (size_t)(server->ncpu + 1));
++  buf->flags = (1 << GLIBTOP_PROC_AFFINITY_NUMBER)
++    | (1 << GLIBTOP_PROC_AFFINITY_ALL);
++
++  return (guint16*) g_array_free(cpus, FALSE);
++#else
++  memset(buf, 0, sizeof *buf);
++
++  return NULL;
++#endif
++*/
++}
++
+diff -Nrup libgtop-2.23.90.orig/sysdeps/solaris/procmap.c libgtop-2.23.90.mod/sysdeps/solaris/procmap.c
+--- libgtop-2.23.90.orig/sysdeps/solaris/procmap.c	2008-05-24 06:13:24.000000000 +0800
++++ libgtop-2.23.90.mod/sysdeps/solaris/procmap.c	2008-08-20 19:06:32.593851000 +0800
+@@ -54,9 +54,16 @@ glibtop_map_entry *
  glibtop_get_proc_map_s (glibtop *server, glibtop_proc_map *buf,	pid_t pid)
  {
     	int fd, i, nmaps, pr_err, heap;
++
 +        char filename [BUFSIZ];
 +	/* use flags as a check condition, if it is 1, check, or, not check... zhua */
 +	int check = buf->flags;
 +	/* set flags back to 0 */
 +	buf->flags = 0;
-+		
++
  #if GLIBTOP_SOLARIS_RELEASE >= 50600
  	prxmap_t *maps;
 -	struct ps_prochandle *Pr = NULL;
++//	struct ps_prochandle *Pr = NULL;
  #else
  	prmap_t *maps;
  #endif
-@@ -123,15 +128,34 @@ glibtop_get_proc_map_s (glibtop *server,
+@@ -123,16 +130,44 @@ glibtop_get_proc_map_s (glibtop *server,
  	buf->total = nmaps * sizeof(glibtop_map_entry);
  	entry = g_malloc0(buf->total);
  
 -#if GLIBTOP_SOLARIS_RELEASE >= 50600
--
++//#if GLIBTOP_SOLARIS_RELEASE >= 50600
+ 
 -	if(server->machine.objname && server->machine.pgrab &&
 -	   server->machine.pfree)
 -	   Pr = (server->machine.pgrab)(pid, 1, &pr_err);
 -#endif
++//	if(server->machine.objname && server->machine.pgrab &&
++//	   server->machine.pfree)
++//	   Pr = (server->machine.pgrab)(pid, 1, &pr_err);
++//#endif
  	for(heap = 0,i = 0; i < nmaps; ++i)
  	{
--	   	int len;
+ 	   	int len;
+ 
 +		/* take a check to see if we need all information, if not, just get what we need.. 
 +		   Also please see comments in get_process_memory_writable() of gnome-system-monitor zhua */
 +		if (check == 1)
@@ -1105,10 +965,12 @@
 +		else {
 +		
 +	   	int len, rv;
- 
++ 
++
  	   	entry[i].start = maps[i].pr_vaddr;
  		entry[i].end = maps[i].pr_vaddr + maps[i].pr_size;
-@@ -177,25 +201,26 @@ glibtop_get_proc_map_s (glibtop *server,
+ 
+@@ -177,25 +212,40 @@ glibtop_get_proc_map_s (glibtop *server,
  		   entry[i].flags |= (1L << GLIBTOP_MAP_ENTRY_FILENAME);
  		}
  		else
@@ -1123,7 +985,26 @@
 -			 entry[i].flags |= (1L << GLIBTOP_MAP_ENTRY_FILENAME);
 -		      }
 -		   }
-+                {
+-#endif
+-	}
+-
+-#if GLIBTOP_SOLARIS_RELEASE >= 50600
+-
+-	if(Pr)
+-	   	server->machine.pfree(Pr);
+-#endif
++//		   if(Pr)
++//		   {
++//		      server->machine.objname(Pr, maps[i].pr_vaddr, buffer,
++//					      BUFSIZ);
++//		      if((len = resolvepath(buffer, entry[i].filename,
++//					    GLIBTOP_MAP_FILENAME_LEN)) > 0)
++//		      {
++//			 entry[i].filename[len] = 0;
++//			 entry[i].flags |= (1L << GLIBTOP_MAP_ENTRY_FILENAME);
++//		      }
++//		   }
++               {
 +                        g_strlcpy(buffer, maps[i].pr_mapname,  sizeof buffer);
 +                        /* from /path get file name */
 +                        g_snprintf(filename, sizeof filename, "/proc/%d/path/%s",
@@ -1137,23 +1018,21 @@
 +                        /* now set the flags */
 +                        entry[i].flags |= (1L << GLIBTOP_MAP_ENTRY_FILENAME);
 +                }
-+		   
- #endif
--	}
-+               } /* end of else check */
- 
--#if GLIBTOP_SOLARIS_RELEASE >= 50600
++#endif
 +	}
- 
--	if(Pr)
--	   	server->machine.pfree(Pr);
--#endif
++        }
++
++//#if GLIBTOP_SOLARIS_RELEASE >= 50600
++
++//	if(Pr)
++//	   	server->machine.pfree(Pr);
++//#endif
  	buf->flags = _glibtop_sysdeps_proc_map;
  	s_close(fd);
  	return entry;
-diff -Nrup libgtop-2.19.2/sysdeps/solaris/procmem.c libgtop-2.19.2.mod/sysdeps/solaris/procmem.c
---- libgtop-2.19.2/sysdeps/solaris/procmem.c	2007-04-27 06:27:38.000000000 +0800
-+++ libgtop-2.19.2.mod/sysdeps/solaris/procmem.c	2007-05-18 16:32:37.862629000 +0800
+diff -Nrup libgtop-2.23.90.orig/sysdeps/solaris/procmem.c libgtop-2.23.90.mod/sysdeps/solaris/procmem.c
+--- libgtop-2.23.90.orig/sysdeps/solaris/procmem.c	2008-05-24 06:13:24.000000000 +0800
++++ libgtop-2.23.90.mod/sysdeps/solaris/procmem.c	2008-08-20 19:09:08.485871000 +0800
 @@ -22,12 +22,14 @@
  #include <config.h>
  #include <glibtop.h>
@@ -1202,22 +1081,21 @@
 + 
  	buf->flags = _glibtop_sysdeps_proc_mem;
  }
-diff -Nrup libgtop-2.19.2/sysdeps/solaris/procstate.c libgtop-2.19.2.mod/sysdeps/solaris/procstate.c
---- libgtop-2.19.2/sysdeps/solaris/procstate.c	2007-04-27 06:27:38.000000000 +0800
-+++ libgtop-2.19.2.mod/sysdeps/solaris/procstate.c	2007-05-19 21:18:30.078392000 +0800
-@@ -62,6 +62,27 @@ glibtop_get_proc_state_s (glibtop *serve
+diff -Nrup libgtop-2.23.90.orig/sysdeps/solaris/procstate.c libgtop-2.23.90.mod/sysdeps/solaris/procstate.c
+--- libgtop-2.23.90.orig/sysdeps/solaris/procstate.c	2008-05-24 06:13:24.000000000 +0800
++++ libgtop-2.23.90.mod/sysdeps/solaris/procstate.c	2008-08-20 22:19:57.697233000 +0800
+@@ -62,6 +62,26 @@ glibtop_get_proc_state_s (glibtop *serve
  	buf->gid = psinfo.pr_egid;
  	buf->ruid = psinfo.pr_uid;
  	buf->rgid = psinfo.pr_gid;
-+        /* zhua: get some value here, so that we don't need run open/pread/close psinfo later,
++       /* zhua: get some value here, so that we don't need run open/pread/close psinfo later,
 +                 and can delete some other call for psinfo open/pread/close. it will save lots of time*/
 +#ifdef HAVE_PROCFS_H
 +        buf->nice = psinfo.pr_lwp.pr_nice - NZERO;
 +#else
 +        buf->nice = psinfo.pr_nice - NZERO;
 +#endif
-+   
-+        buf->start_time = psinfo.pr_start.tv_sec;
++        buf->start_time = psinfo.pr_start.tv_sec; 
 +        buf->ppid = psinfo.pr_ppid;
 +   
 +#ifdef HAVE_PROCFS_H
@@ -1233,10 +1111,10 @@
  
  #ifdef HAVE_PROCFS_H
  	switch(psinfo.pr_lwp.pr_state)
-diff -Nrup libgtop-2.19.2/sysdeps/solaris/proctime.c libgtop-2.19.2.mod/sysdeps/solaris/proctime.c
---- libgtop-2.19.2/sysdeps/solaris/proctime.c	2007-04-27 06:27:38.000000000 +0800
-+++ libgtop-2.19.2.mod/sysdeps/solaris/proctime.c	2007-05-18 23:15:50.623438000 +0800
-@@ -43,8 +43,12 @@ void
+diff -Nrup libgtop-2.23.90.orig/sysdeps/solaris/proctime.c libgtop-2.23.90.mod/sysdeps/solaris/proctime.c
+--- libgtop-2.23.90.orig/sysdeps/solaris/proctime.c	2008-05-24 06:13:24.000000000 +0800
++++ libgtop-2.23.90.mod/sysdeps/solaris/proctime.c	2008-08-20 19:38:04.212493000 +0800
+@@ -43,6 +43,11 @@ void
  glibtop_get_proc_time_s (glibtop *server, glibtop_proc_time *buf,
  			 pid_t pid)
  {
@@ -1246,20 +1124,18 @@
 +       struct prpsinfo pinfo;
 +#endif
  	struct prusage prusage;
--        GTimeVal time;
+         GTimeVal time;
  
- 	memset (buf, 0, sizeof (glibtop_proc_time));
- 
-@@ -52,19 +56,21 @@ glibtop_get_proc_time_s (glibtop *server
+@@ -52,19 +57,27 @@ glibtop_get_proc_time_s (glibtop *server
  
  	if(pid)
  	{
 +  /* zhua remove this function call, because we can change to get start_time in
-+        glibtop_get_proc_state(), it don't need open psinfo again here
++        glibtop_get_proc_state(), it don't need open psinfo again here */
 +
 +                if (glibtop_get_proc_data_psinfo_s(server, &pinfo, pid))
 +                        return;
-+                buf->start_time = pinfo.pr_start.tv_sec; */
++                buf->start_time = pinfo.pr_start.tv_sec; 
 +
  		if (glibtop_get_proc_data_usage_s (server, &prusage, pid))
  			return;
@@ -1267,9 +1143,14 @@
 -                g_get_current_time (&time);
 -		/* prusage.pr_rtime.tv_sec is the during that the process existed */
 -                buf->start_time = time.tv_sec - prusage.pr_rtime.tv_sec;
--
++//                g_get_current_time (&time);
++//		/* prusage.pr_rtime.tv_sec is the during that the process existed */
++ //               buf->start_time = time.tv_sec - prusage.pr_rtime.tv_sec;
+ 
 -		buf->rtime = prusage.pr_rtime.tv_sec * 1E+6 +
 -			prusage.pr_rtime.tv_nsec / 1E+3;
++//		buf->rtime = prusage.pr_rtime.tv_sec * 1E+6 +
++//			prusage.pr_rtime.tv_nsec / 1E+3;
  		buf->utime = prusage.pr_utime.tv_sec * 1E+6 +
  			prusage.pr_utime.tv_nsec / 1E+3;
  		buf->stime = prusage.pr_stime.tv_sec * 1E+6 +
@@ -1278,9 +1159,9 @@
  	}
  
  	buf->flags = _glibtop_sysdeps_proc_time;
-diff -Nrup libgtop-2.19.2/sysdeps/solaris/procwd.c libgtop-2.19.2.mod/sysdeps/solaris/procwd.c
---- libgtop-2.19.2/sysdeps/solaris/procwd.c	1970-01-01 08:00:00.000000000 +0800
-+++ libgtop-2.19.2.mod/sysdeps/solaris/procwd.c	2007-05-19 00:11:54.105195000 +0800
+diff -Nrup libgtop-2.23.90.orig/sysdeps/solaris/procwd.c libgtop-2.23.90.mod/sysdeps/solaris/procwd.c
+--- libgtop-2.23.90.orig/sysdeps/solaris/procwd.c	1970-01-01 08:00:00.000000000 +0800
++++ libgtop-2.23.90.mod/sysdeps/solaris/procwd.c	2008-08-20 19:17:28.084980000 +0800
 @@ -0,0 +1,98 @@
 +/* Copyright (C) 2007 BenoƮt Dejean
 +   This file is part of LibGTop 2.
@@ -1380,15 +1261,15 @@
 +	return (char**) g_ptr_array_free(dirs, FALSE);
 +}
 +
-diff -Nrup libgtop-2.19.2/sysdeps/solaris/sem_limits.c libgtop-2.19.2.mod/sysdeps/solaris/sem_limits.c
---- libgtop-2.19.2/sysdeps/solaris/sem_limits.c	2007-04-27 06:27:38.000000000 +0800
-+++ libgtop-2.19.2.mod/sysdeps/solaris/sem_limits.c	2007-05-18 18:27:01.752030000 +0800
+diff -Nrup libgtop-2.23.90.orig/sysdeps/solaris/sem_limits.c libgtop-2.23.90.mod/sysdeps/solaris/sem_limits.c
+--- libgtop-2.23.90.orig/sysdeps/solaris/sem_limits.c	2008-05-24 06:13:24.000000000 +0800
++++ libgtop-2.23.90.mod/sysdeps/solaris/sem_limits.c	2008-08-20 20:21:27.584506000 +0800
 @@ -39,14 +39,22 @@ static const unsigned long _glibtop_sysd
  (1L << GLIBTOP_IPC_SEMUSZ) + (1L << GLIBTOP_IPC_SEMVMX) +
  (1L << GLIBTOP_IPC_SEMAEM);
  #else
 -static const unsigned long _glibtop_sysdeps_sem_limits = 0;
-+static const unsigned long _glibtop_sysdeps_sem_limits =
++static const unsigned long _glibtop_sysdeps_sem_limits = 
 +(1L << GLIBTOP_IPC_SEMMNI) +
 +(1L << GLIBTOP_IPC_SEMMSL) +
 +(1L << GLIBTOP_IPC_SEMOPM);
@@ -1421,15 +1302,15 @@
  {
  #if GLIBTOP_SOLARIS_RELEASE < 51000
     	kvm_t *kd = server->machine.kd;
-diff -Nrup libgtop-2.19.2/sysdeps/solaris/shm_limits.c libgtop-2.19.2.mod/sysdeps/solaris/shm_limits.c
---- libgtop-2.19.2/sysdeps/solaris/shm_limits.c	2007-04-27 06:27:38.000000000 +0800
-+++ libgtop-2.19.2.mod/sysdeps/solaris/shm_limits.c	2007-05-18 18:27:11.803445000 +0800
+diff -Nrup libgtop-2.23.90.orig/sysdeps/solaris/shm_limits.c libgtop-2.23.90.mod/sysdeps/solaris/shm_limits.c
+--- libgtop-2.23.90.orig/sysdeps/solaris/shm_limits.c	2008-05-24 06:13:24.000000000 +0800
++++ libgtop-2.23.90.mod/sysdeps/solaris/shm_limits.c	2008-08-20 21:46:13.220805000 +0800
 @@ -30,7 +30,9 @@
  static const struct nlist nlst[] = { {"glibtop_shm_limits"}, {NULL} };
  
  #if GLIBTOP_SOLARIS_RELEASE >=51000
 -static const unsigned long _glibtop_sysdeps_shm_limits = 0;
-+static const unsigned long _glibtop_sysdeps_shm_limits =
++static const unsigned long _glibtop_sysdeps_shm_limits = 
 +(1L << GLIBTOP_IPC_SHMMAX) +
 +(1L << GLIBTOP_IPC_SHMMIN);
  #else
@@ -1463,9 +1344,9 @@
  {
  #if GLIBTOP_SOLARIS_RELEASE < 51000
  
-diff -Nrup libgtop-2.19.2/sysdeps/solaris/siglist.c libgtop-2.19.2.mod/sysdeps/solaris/siglist.c
---- libgtop-2.19.2/sysdeps/solaris/siglist.c	2007-04-27 06:27:38.000000000 +0800
-+++ libgtop-2.19.2.mod/sysdeps/solaris/siglist.c	2007-05-18 16:43:23.348125000 +0800
+diff -Nrup libgtop-2.23.90.orig/sysdeps/solaris/siglist.c libgtop-2.23.90.mod/sysdeps/solaris/siglist.c
+--- libgtop-2.23.90.orig/sysdeps/solaris/siglist.c	2008-05-24 06:13:24.000000000 +0800
++++ libgtop-2.23.90.mod/sysdeps/solaris/siglist.c	2008-08-20 19:22:53.411487000 +0800
 @@ -61,6 +61,7 @@ const glibtop_signame glibtop_sys_siglis
     { 35, "SIGTHAW", "Checkpoint Thaw" },
     { 36, "SIGCANCEL","Thread Cancelation" },
@@ -1505,9 +1386,9 @@
 +#endif
     {  0, NULL, NULL }
  };
-diff -Nrup libgtop-2.19.2/sysdeps/solaris/sysinfo.c libgtop-2.19.2.mod/sysdeps/solaris/sysinfo.c
---- libgtop-2.19.2/sysdeps/solaris/sysinfo.c	1970-01-01 08:00:00.000000000 +0800
-+++ libgtop-2.19.2.mod/sysdeps/solaris/sysinfo.c	2007-05-18 17:03:56.558810000 +0800
+diff -Nrup libgtop-2.23.90.orig/sysdeps/solaris/sysinfo.c libgtop-2.23.90.mod/sysdeps/solaris/sysinfo.c
+--- libgtop-2.23.90.orig/sysdeps/solaris/sysinfo.c	1970-01-01 08:00:00.000000000 +0800
++++ libgtop-2.23.90.mod/sysdeps/solaris/sysinfo.c	2008-08-20 19:23:21.791056000 +0800
 @@ -0,0 +1,48 @@
 +/* $Id: sysinfo.c,v 1.22 2004/11/28 01:32:55 bdejean Exp $ */
 +