Compare commits
	
		
			32 Commits
		
	
	
		
			gnome-2-10
			...
			LIBGTOP_2_
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					7e506a6c83 | ||
| 
						 | 
					1645027004 | ||
| 
						 | 
					8e656af060 | ||
| 
						 | 
					4efcfb2cb3 | ||
| 
						 | 
					59da1618b0 | ||
| 
						 | 
					e9ce3ccc1c | ||
| 
						 | 
					84e45a6519 | ||
| 
						 | 
					96fe554afd | ||
| 
						 | 
					16e0c943b2 | ||
| 
						 | 
					f409c553f5 | ||
| 
						 | 
					b6a10fd8f7 | ||
| 
						 | 
					efeca4a865 | ||
| 
						 | 
					5e70932b66 | ||
| 
						 | 
					d499bd3761 | ||
| 
						 | 
					48e3d5b2ec | ||
| 
						 | 
					55270e618e | ||
| 
						 | 
					a5c897b846 | ||
| 
						 | 
					b0093954b3 | ||
| 
						 | 
					c81e055427 | ||
| 
						 | 
					06fb19b5c6 | ||
| 
						 | 
					f8d9557257 | ||
| 
						 | 
					ef2ed50bf7 | ||
| 
						 | 
					c19ba1af03 | ||
| 
						 | 
					c1e5bdfb16 | ||
| 
						 | 
					be7dabf75d | ||
| 
						 | 
					d37b1b9a2e | ||
| 
						 | 
					6f755a5ca7 | ||
| 
						 | 
					4cd022b315 | ||
| 
						 | 
					69873a143d | ||
| 
						 | 
					f5655f12d3 | ||
| 
						 | 
					a71839c0a7 | ||
| 
						 | 
					74d9b24132 | 
							
								
								
									
										125
									
								
								ChangeLog
									
									
									
									
									
								
							
							
						
						
									
										125
									
								
								ChangeLog
									
									
									
									
									
								
							@@ -1,6 +1,127 @@
 | 
			
		||||
2005-06-13  Benoît Dejean  <TazForEver@dlfp.org>
 | 
			
		||||
2005-07-24  Benoît Dejean  <TazForEver@dlfp.org>
 | 
			
		||||
 | 
			
		||||
	* NEWS: Released 2.10.2.
 | 
			
		||||
	* NEWS:
 | 
			
		||||
	* configure.in: Released 2.11.90.
 | 
			
		||||
 | 
			
		||||
2005-07-22  Benoît Dejean  <TazForEver@dlfp.org>
 | 
			
		||||
 | 
			
		||||
	* configure.in: 2.11.3 post release version bump.
 | 
			
		||||
 | 
			
		||||
2005-07-13  Benoît Dejean  <TazForEver@dlfp.org>
 | 
			
		||||
 | 
			
		||||
	* NEWS: Released 2.11.2.
 | 
			
		||||
 | 
			
		||||
2005-07-06  Benoît Dejean  <TazForEver@dlfp.org>
 | 
			
		||||
 | 
			
		||||
	* configure.in: 2.11.2 post release version bump.
 | 
			
		||||
 | 
			
		||||
2005-07-03  Benoît Dejean  <TazForEver@dlfp.org>
 | 
			
		||||
 | 
			
		||||
	* NEWS: Released 2.11.1.
 | 
			
		||||
 | 
			
		||||
2005-06-15  Benoît Dejean  <TazForEver@dlfp.org>
 | 
			
		||||
 | 
			
		||||
	* sysdeps/common/Makefile.am:
 | 
			
		||||
	* sysdeps/linux/Makefile.am: Removed LT_VERSION_INFO from LDFLAGS
 | 
			
		||||
	when unused.
 | 
			
		||||
 | 
			
		||||
2005-06-08  Benoît Dejean  <TazForEver@dlfp.org>
 | 
			
		||||
 | 
			
		||||
	* configure.in: 2.11.1 post release version bump.
 | 
			
		||||
 | 
			
		||||
2005-06-08  Benoît Dejean  <TazForEver@dlfp.org>
 | 
			
		||||
 | 
			
		||||
	* NEWS: Released 2.11.0.
 | 
			
		||||
 | 
			
		||||
2005-06-07  Benoît Dejean  <TazForEver@dlfp.org>
 | 
			
		||||
 | 
			
		||||
	* configure.in:
 | 
			
		||||
	* glibtop.h:
 | 
			
		||||
	* include/glibtop/close.h:
 | 
			
		||||
	* include/glibtop/cpu.h:
 | 
			
		||||
	* include/glibtop/fsusage.h:
 | 
			
		||||
	* include/glibtop/loadavg.h:
 | 
			
		||||
	* include/glibtop/mem.h:
 | 
			
		||||
	* include/glibtop/mountlist.h:
 | 
			
		||||
	* include/glibtop/msg_limits.h:
 | 
			
		||||
	* include/glibtop/netlist.h:
 | 
			
		||||
	* include/glibtop/netload.h:
 | 
			
		||||
	* include/glibtop/ppp.h:
 | 
			
		||||
	* include/glibtop/procargs.h:
 | 
			
		||||
	* include/glibtop/prockernel.h:
 | 
			
		||||
	* include/glibtop/proclist.h:
 | 
			
		||||
	* include/glibtop/procmap.h:
 | 
			
		||||
	* include/glibtop/procmem.h:
 | 
			
		||||
	* include/glibtop/procopenfiles.h:
 | 
			
		||||
	* include/glibtop/procsegment.h:
 | 
			
		||||
	* include/glibtop/procsignal.h:
 | 
			
		||||
	* include/glibtop/procstate.h:
 | 
			
		||||
	* include/glibtop/proctime.h:
 | 
			
		||||
	* include/glibtop/procuid.h:
 | 
			
		||||
	* include/glibtop/sem_limits.h:
 | 
			
		||||
	* include/glibtop/shm_limits.h:
 | 
			
		||||
	* include/glibtop/swap.h:
 | 
			
		||||
	* include/glibtop/sysdeps.h:
 | 
			
		||||
	* include/glibtop/sysinfo.h:
 | 
			
		||||
	* include/glibtop/uptime.h:
 | 
			
		||||
	* sysdeps/common/Makefile.am:
 | 
			
		||||
	* sysdeps/common/default.c: (glibtop_close), (glibtop_init),
 | 
			
		||||
	(glibtop_get_cpu), (glibtop_get_fsusage), (glibtop_get_uptime),
 | 
			
		||||
	(glibtop_get_sysinfo), (glibtop_get_swap), (glibtop_get_proc_uid),
 | 
			
		||||
	(glibtop_get_proc_time), (glibtop_get_proc_state),
 | 
			
		||||
	(glibtop_get_proc_signal), (glibtop_get_proc_segment),
 | 
			
		||||
	(glibtop_get_proc_open_files), (glibtop_get_proc_mem),
 | 
			
		||||
	(glibtop_get_proc_map), (glibtop_get_proc_args),
 | 
			
		||||
	(glibtop_get_proc_argv), (glibtop_get_proclist),
 | 
			
		||||
	(glibtop_get_proc_kernel), (glibtop_get_ppp),
 | 
			
		||||
	(glibtop_get_netlist), (glibtop_get_netload),
 | 
			
		||||
	(glibtop_get_mountlist), (glibtop_get_mem), (glibtop_get_loadavg),
 | 
			
		||||
	(glibtop_get_msg_limits), (glibtop_get_sem_limits),
 | 
			
		||||
	(glibtop_get_shm_limits), (glibtop_get_sysdeps):
 | 
			
		||||
	
 | 
			
		||||
	Added a lot of new functions to replace dirty macros.
 | 
			
		||||
	Every macro glibtop_get_*(buf[, args]) has been turned to a function.
 | 
			
		||||
 | 
			
		||||
2005-06-06  Benoît Dejean  <TazForEver@dlfp.org>
 | 
			
		||||
 | 
			
		||||
	* dtd/: Bye bye.
 | 
			
		||||
 | 
			
		||||
2005-06-06  Benoît Dejean  <TazForEver@dlfp.org>
 | 
			
		||||
 | 
			
		||||
	* backends/: Removed useless files.
 | 
			
		||||
 | 
			
		||||
2005-06-06  Benoît Dejean  <TazForEver@dlfp.org>
 | 
			
		||||
 | 
			
		||||
	* examples/smp.c: (main): Removed translation.
 | 
			
		||||
 | 
			
		||||
	* lib/lib.pl:
 | 
			
		||||
	* lib/read.c:
 | 
			
		||||
	* lib/read_data.c:
 | 
			
		||||
	* lib/write.c:
 | 
			
		||||
	* src/daemon/gnuserv.c: s/gi18n.h/gi18n-lib.h.
 | 
			
		||||
 | 
			
		||||
2005-06-06  Benoît Dejean  <TazForEver@dlfp.org>
 | 
			
		||||
 | 
			
		||||
	* acinclude.m4: bye bye support.
 | 
			
		||||
 | 
			
		||||
2005-06-06  Benoît Dejean  <TazForEver@dlfp.org>
 | 
			
		||||
 | 
			
		||||
	* support/ : Removed unused files.
 | 
			
		||||
	
 | 
			
		||||
2005-06-06  Benoît Dejean  <TazForEver@dlfp.org>
 | 
			
		||||
 | 
			
		||||
	* examples/smp.c:
 | 
			
		||||
	* include/Makefile.am:
 | 
			
		||||
	* include/libgtop-i18n.h:
 | 
			
		||||
	* lib/lib.pl:
 | 
			
		||||
	* lib/read.c:
 | 
			
		||||
	* lib/read_data.c:
 | 
			
		||||
	* lib/write.c:
 | 
			
		||||
	* src/daemon/gnuserv.c: Got rid of include/libgtop-i18n.h.
 | 
			
		||||
 | 
			
		||||
2005-06-06  Benoît Dejean  <TazForEver@dlfp.org>
 | 
			
		||||
 | 
			
		||||
	* configure.in: version bump.
 | 
			
		||||
 | 
			
		||||
2005-06-05  Benoît Dejean  <TazForEver@dlfp.org>
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										25
									
								
								NEWS
									
									
									
									
									
								
							
							
						
						
									
										25
									
								
								NEWS
									
									
									
									
									
								
							@@ -1,10 +1,23 @@
 | 
			
		||||
June 12, 2005: Overview of changes from 2.10.1 to 2.10.2
 | 
			
		||||
========================================================
 | 
			
		||||
* glibtop_get_mountlist() : Added tmpfs to ignore list.
 | 
			
		||||
* Re-install open.h to please GTop (libgtop perl wrapper).
 | 
			
		||||
July 24, 2005: Overview of changes from 2.11.2 to 2.11.90
 | 
			
		||||
=========================================================
 | 
			
		||||
* Linux:
 | 
			
		||||
  * Fixed compilation on mips.
 | 
			
		||||
  * Added pagein/pageout for 2.6.
 | 
			
		||||
  - fixed glibtop_uptime .flags.
 | 
			
		||||
 | 
			
		||||
July &3, 2005: Overview of changes from 2.11.1 to 2.11.2
 | 
			
		||||
========================================================
 | 
			
		||||
* Linux:
 | 
			
		||||
  - little improvements for 2.6.
 | 
			
		||||
 | 
			
		||||
July 3, 2005: Overview of changes from 2.11.0 to 2.11.1
 | 
			
		||||
=======================================================
 | 
			
		||||
* Linux:
 | 
			
		||||
  - glibtop_get_swap : added page(in|out) for linux 2.6.
 | 
			
		||||
 | 
			
		||||
June 8, 2005: Overview of changes from 2.10.x to 2.11.0
 | 
			
		||||
=======================================================
 | 
			
		||||
* Replaced a lot of macros by functions
 | 
			
		||||
* Got rid of dozens of useless files.
 | 
			
		||||
* libgtop 2.11.x are and will stay API and ABI compatible with 2.10.x, i swear.
 | 
			
		||||
 | 
			
		||||
April 10, 2005: Overview of changes from 2.10.0 to 2.10.1
 | 
			
		||||
=========================================================
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										70
									
								
								acinclude.m4
									
									
									
									
									
								
							
							
						
						
									
										70
									
								
								acinclude.m4
									
									
									
									
									
								
							@@ -503,76 +503,6 @@ AC_CHECKING(for AFS)
 | 
			
		||||
test -d /afs && AC_DEFINE(AFS)
 | 
			
		||||
])
 | 
			
		||||
 | 
			
		||||
dnl GNOME_SUPPORT_CHECKS
 | 
			
		||||
dnl    Check for various support functions needed by the standard
 | 
			
		||||
dnl    Gnome libraries.  Sets LIBOBJS, might define some macros.
 | 
			
		||||
dnl    This should only be used when building the Gnome libs; 
 | 
			
		||||
dnl    Gnome clients should not need this macro.
 | 
			
		||||
AC_DEFUN([GNOME_SUPPORT_CHECKS],[
 | 
			
		||||
  # we need an `awk' to build `gnomesupport.h'
 | 
			
		||||
  AC_REQUIRE([AC_PROG_AWK])
 | 
			
		||||
 | 
			
		||||
  # this should go away soon
 | 
			
		||||
  need_gnome_support=yes
 | 
			
		||||
 | 
			
		||||
  AC_CHECK_FUNCS(getopt_long,,
 | 
			
		||||
   [AC_LIBOBJ(getopt)
 | 
			
		||||
    AC_LIBOBJ(getopt1)])
 | 
			
		||||
 | 
			
		||||
  # for `scandir'
 | 
			
		||||
  AC_HEADER_DIRENT
 | 
			
		||||
 | 
			
		||||
  # copied from `configure.in' of `libiberty'
 | 
			
		||||
  vars="program_invocation_short_name program_invocation_name sys_errlist"
 | 
			
		||||
  for v in $vars; do
 | 
			
		||||
    AC_MSG_CHECKING([for $v])
 | 
			
		||||
    AC_CACHE_VAL(gnome_cv_var_$v,
 | 
			
		||||
      [AC_TRY_LINK([int *p;], [extern int $v; p = &$v;],
 | 
			
		||||
		   [eval "gnome_cv_var_$v=yes"],
 | 
			
		||||
		   [eval "gnome_cv_var_$v=no"])])
 | 
			
		||||
    if eval "test \"`echo '$gnome_cv_var_'$v`\" = yes"; then
 | 
			
		||||
      AC_MSG_RESULT(yes)
 | 
			
		||||
      n=HAVE_`echo $v | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
 | 
			
		||||
      AC_DEFINE_UNQUOTED($n)
 | 
			
		||||
    else
 | 
			
		||||
      AC_MSG_RESULT(no)
 | 
			
		||||
    fi
 | 
			
		||||
  done
 | 
			
		||||
 | 
			
		||||
  AC_REPLACE_FUNCS(memmove mkstemp scandir strcasecmp strerror strndup strnlen)
 | 
			
		||||
  AC_REPLACE_FUNCS(strtok_r strtod strtol strtoul vasprintf vsnprintf)
 | 
			
		||||
 | 
			
		||||
  AC_CHECK_FUNCS(realpath,,AC_LIBOBJ(canonicalize))
 | 
			
		||||
 | 
			
		||||
  # to include `error.c' error.c has some HAVE_* checks
 | 
			
		||||
  AC_CHECK_FUNCS(vprintf doprnt strerror_r)
 | 
			
		||||
  # stolen from am_func_error_at_line
 | 
			
		||||
  AC_CACHE_CHECK([for error_at_line], am_cv_lib_error_at_line,
 | 
			
		||||
  [AC_TRY_LINK([],[error_at_line(0, 0, "", 0, "");],
 | 
			
		||||
              am_cv_lib_error_at_line=yes,
 | 
			
		||||
              am_cv_lib_error_at_line=no)])
 | 
			
		||||
  if test $am_cv_lib_error_at_line = no; then
 | 
			
		||||
    AC_LIBOBJ(error)
 | 
			
		||||
  fi
 | 
			
		||||
  
 | 
			
		||||
  # This is required if we declare setreuid () and setregid ().
 | 
			
		||||
  AC_TYPE_UID_T
 | 
			
		||||
 | 
			
		||||
  # see if we need to declare some functions.  Solaris is notorious for
 | 
			
		||||
  # putting functions into the `libc' but not listing them in the headers
 | 
			
		||||
  AC_CHECK_HEADERS(string.h strings.h stdlib.h unistd.h dirent.h)
 | 
			
		||||
  GCC_NEED_DECLARATIONS(gethostname setreuid setregid getpagesize)
 | 
			
		||||
  GCC_NEED_DECLARATION(scandir,[
 | 
			
		||||
#ifdef HAVE_DIRENT_H
 | 
			
		||||
#include <dirent.h>
 | 
			
		||||
#endif
 | 
			
		||||
])
 | 
			
		||||
 | 
			
		||||
  AC_SUBST(need_gnome_support)
 | 
			
		||||
 | 
			
		||||
  AM_CONDITIONAL(BUILD_GNOME_SUPPORT, test "$need_gnome_support" = yes)
 | 
			
		||||
])
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
dnl This file is intended for use both internally in libgtop and in every program
 | 
			
		||||
dnl that wants to use it.
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +0,0 @@
 | 
			
		||||
.deps
 | 
			
		||||
.libs
 | 
			
		||||
Makefile
 | 
			
		||||
Makefile.in
 | 
			
		||||
*.lo
 | 
			
		||||
@@ -1,15 +0,0 @@
 | 
			
		||||
if NEED_LIBGTOP
 | 
			
		||||
server_dir	= server
 | 
			
		||||
else
 | 
			
		||||
server_dir	=
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
if HAVE_SYSDEPS
 | 
			
		||||
sysdeps_dir	= sysdeps
 | 
			
		||||
else
 | 
			
		||||
sysdeps_dir	=
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
SUBDIRS		= $(server_dir) $(sysdeps_dir) common
 | 
			
		||||
 | 
			
		||||
DIST_SUBDIRS	= server sysdeps common
 | 
			
		||||
@@ -1,7 +0,0 @@
 | 
			
		||||
.deps
 | 
			
		||||
.libs
 | 
			
		||||
Makefile
 | 
			
		||||
Makefile.in
 | 
			
		||||
*.lo
 | 
			
		||||
*.la
 | 
			
		||||
marshal.c
 | 
			
		||||
@@ -1,50 +0,0 @@
 | 
			
		||||
2003-10-20  Bastien Nocera  <hadess@hadess.net>
 | 
			
		||||
 | 
			
		||||
	* backend-common.c: (_open_common): s/u_int64_t/guint64/
 | 
			
		||||
 | 
			
		||||
2003-10-20  Bastien Nocera  <hadess@hadess.net>
 | 
			
		||||
 | 
			
		||||
	* backend-common.h: fixed compilation
 | 
			
		||||
 | 
			
		||||
2000-11-26  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* glibtop-backend-private.h: Removed.
 | 
			
		||||
 | 
			
		||||
	* backend-common.h: New files.
 | 
			
		||||
 | 
			
		||||
	* backend-common.c (_open_common): Don't overwrite
 | 
			
		||||
	`backend->_priv'.
 | 
			
		||||
 | 
			
		||||
2000-11-22  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* Makefile.am: Link libgtop_backend_common.la against
 | 
			
		||||
	$(top_builddir)/sysdeps/common/libgtop_common.la and
 | 
			
		||||
	$(top_builddir)/lib/libgtop_server.la.
 | 
			
		||||
 | 
			
		||||
2000-02-22  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* backend-sysdeps.c (LibGTopBackendInfo): Call this
 | 
			
		||||
	`LibGTopBackendInfo_Common' when we don't use gmodule.
 | 
			
		||||
 | 
			
		||||
2000-02-22  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* Makefile.am: Only install the libs in $(LIBGTOP_BACKEND_DIR)
 | 
			
		||||
	when we LIBGTOP_USE_GMODULE and in $(libdir) otherwise.
 | 
			
		||||
 | 
			
		||||
2000-01-12  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* Makefile.am: Install everything in $(LIBGTOP_BACKEND_DIR).
 | 
			
		||||
 | 
			
		||||
	* libgtop-common.backend: New file.
 | 
			
		||||
 | 
			
		||||
	* backend-common.c (glibtop_backend_common): Renamed to
 | 
			
		||||
	`LibGTopBackendInfo'.
 | 
			
		||||
 | 
			
		||||
2000-01-12  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	Initial version of the "glibtop-backend-common" backend.
 | 
			
		||||
 | 
			
		||||
	* backend-common.c: New file.
 | 
			
		||||
	* glibtop-backend-private.h: New file.
 | 
			
		||||
	* marshal.pl: New file. Automatically creates `marshal.c'.
 | 
			
		||||
 | 
			
		||||
@@ -1,47 +0,0 @@
 | 
			
		||||
LINK		= $(LIBTOOL) --mode=link $(CC) $(CFLAGS) $(LDFLAGS) -o $@
 | 
			
		||||
 | 
			
		||||
INCLUDES	= @INCLUDES@
 | 
			
		||||
 | 
			
		||||
backenddir	= @LIBGTOP_BACKEND_DIR@
 | 
			
		||||
 | 
			
		||||
if LIBGTOP_USE_GMODULE
 | 
			
		||||
backendlibdir	= $(backenddir)
 | 
			
		||||
else
 | 
			
		||||
backendlibdir	= $(libdir)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
dynamic_ldflags	= @libgtop_dynamic_ldflags@
 | 
			
		||||
 | 
			
		||||
backend_DATA = \
 | 
			
		||||
	libgtop-common.backend
 | 
			
		||||
 | 
			
		||||
noinst_HEADERS = \
 | 
			
		||||
	backend-common.h
 | 
			
		||||
 | 
			
		||||
backendlib_LTLIBRARIES = \
 | 
			
		||||
	libgtop_backend_common.la
 | 
			
		||||
 | 
			
		||||
libgtop_backend_common_la_SOURCES = \
 | 
			
		||||
	backend-common.c		\
 | 
			
		||||
	marshal.c
 | 
			
		||||
 | 
			
		||||
libgtop_backend_common_la_LDFLAGS = \
 | 
			
		||||
	$(LT_VERSION_INFO) $(dynamic_ldflags)
 | 
			
		||||
 | 
			
		||||
libgtop_backend_common_la_LIBADD = \
 | 
			
		||||
	$(top_builddir)/sysdeps/common/libgtop_common.la	\
 | 
			
		||||
	$(top_builddir)/lib/libgtop_server.la
 | 
			
		||||
 | 
			
		||||
BUILT_SOURCES = \
 | 
			
		||||
	marshal.c
 | 
			
		||||
 | 
			
		||||
EXTRA_DIST = \
 | 
			
		||||
	marshal.pl	\
 | 
			
		||||
	libgtop-common.backend
 | 
			
		||||
 | 
			
		||||
CLEANFILES = $(BUILT_SOURCES)
 | 
			
		||||
 | 
			
		||||
marshal.c: marshal.pl $(top_builddir)/config.h $(top_srcdir)/features.def $(top_srcdir)/scripts/c_types.pl
 | 
			
		||||
	$(PERL) -I $(top_srcdir)/scripts $(srcdir)/marshal.pl < $(top_srcdir)/features.def > tmp-t
 | 
			
		||||
	mv tmp-t marshal.c
 | 
			
		||||
 | 
			
		||||
@@ -1,61 +0,0 @@
 | 
			
		||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
 | 
			
		||||
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright (C) 1998-99 Martin Baulig
 | 
			
		||||
   This file is part of LibGTop 1.0.
 | 
			
		||||
 | 
			
		||||
   Contributed by Martin Baulig <martin@home-of-linux.org>, 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 <backend-common.h>
 | 
			
		||||
 | 
			
		||||
static int
 | 
			
		||||
_open_common (glibtop_server *, glibtop_backend *, guint64, const char **);
 | 
			
		||||
 | 
			
		||||
static int
 | 
			
		||||
_close_common (glibtop_server *, glibtop_backend *, void *closure);
 | 
			
		||||
 | 
			
		||||
extern glibtop_call_vector glibtop_backend_common_call_vector;
 | 
			
		||||
 | 
			
		||||
#ifdef LIBGTOP_USE_GMODULE
 | 
			
		||||
glibtop_backend_info LibGTopBackendInfo = {
 | 
			
		||||
    "glibtop-backend-common", _open_common, _close_common,
 | 
			
		||||
    &glibtop_backend_common_call_vector
 | 
			
		||||
};
 | 
			
		||||
#else
 | 
			
		||||
glibtop_backend_info LibGTopBackendInfo_Common = {
 | 
			
		||||
    "glibtop-backend-common", _open_common, _close_common,
 | 
			
		||||
    &glibtop_backend_common_call_vector
 | 
			
		||||
};
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
static int
 | 
			
		||||
_open_common (glibtop_server *server, glibtop_backend *backend,
 | 
			
		||||
	      guint64 features, const char **backend_args)
 | 
			
		||||
{
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int
 | 
			
		||||
_close_common (glibtop_server *server, glibtop_backend *backend,
 | 
			
		||||
	       void *closure)
 | 
			
		||||
{
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -1,36 +0,0 @@
 | 
			
		||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
 | 
			
		||||
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright (C) 1998-99 Martin Baulig
 | 
			
		||||
   This file is part of LibGTop 1.0.
 | 
			
		||||
 | 
			
		||||
   Contributed by Martin Baulig <martin@home-of-linux.org>, 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.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#ifndef __GLIBTOP_BACKEND_COMMON_H__
 | 
			
		||||
#define __GLIBTOP_BACKEND_COMMON_H__
 | 
			
		||||
 | 
			
		||||
#include <glibtop.h>
 | 
			
		||||
#include <glibtop/global.h>
 | 
			
		||||
 | 
			
		||||
#include <glibtop/open.h>
 | 
			
		||||
#include <glibtop/glibtop-backend.h>
 | 
			
		||||
#include <glibtop/glibtop-backend-info.h>
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
@@ -1,13 +0,0 @@
 | 
			
		||||
<?xml version="1.0"?> <!-- -*-xml-*- -->
 | 
			
		||||
<!DOCTYPE libgtop:backends SYSTEM 'libgtop-backends.dtd'>
 | 
			
		||||
<libgtop:Backends xmlns:libgtop="http://www.home-of-linux.org/libgtop/1.1">
 | 
			
		||||
 | 
			
		||||
  <libgtop:Backend>
 | 
			
		||||
    <libgtop:Name>glibtop-backend-common</libgtop:Name>
 | 
			
		||||
    <libgtop:Location>
 | 
			
		||||
      <libgtop:LibtoolName>libgtop_backend_common.la</libgtop:LibtoolName>
 | 
			
		||||
      <libgtop:ShlibName>libgtop_backend_common.so</libgtop:ShlibName>
 | 
			
		||||
    </libgtop:Location>
 | 
			
		||||
  </libgtop:Backend>
 | 
			
		||||
 | 
			
		||||
</libgtop:Backends>
 | 
			
		||||
@@ -1,175 +0,0 @@
 | 
			
		||||
#!/usr/bin/perl
 | 
			
		||||
 | 
			
		||||
require 'c_types.pl';
 | 
			
		||||
 | 
			
		||||
$[ = 1;			# set array base to 1
 | 
			
		||||
$, = ' ';		# set output field separator
 | 
			
		||||
$\ = "\n";		# set output record separator
 | 
			
		||||
 | 
			
		||||
$always_use_temp_storage = 1;
 | 
			
		||||
 | 
			
		||||
sub toupper {
 | 
			
		||||
    local($_) = @_;
 | 
			
		||||
    tr/a-z/A-Z/;
 | 
			
		||||
    return $_;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub tolower {
 | 
			
		||||
    local($_) = @_;
 | 
			
		||||
    tr/A-Z/a-z/;
 | 
			
		||||
    return $_;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
print '/* marshal.c */';
 | 
			
		||||
print "/* This is a generated file.  Please modify `marshal.pl' */";
 | 
			
		||||
print '';
 | 
			
		||||
 | 
			
		||||
print '#include <backend-common.h>';
 | 
			
		||||
print '';
 | 
			
		||||
print '#include <glibtop/sysdeps.h>';
 | 
			
		||||
print '#include <glibtop/union.h>';
 | 
			
		||||
print '';
 | 
			
		||||
print '#include <glibtop/call-vector.h>';
 | 
			
		||||
print '';
 | 
			
		||||
 | 
			
		||||
$feature_count = 0;
 | 
			
		||||
 | 
			
		||||
while (<>) {
 | 
			
		||||
    chop;	# strip record separator
 | 
			
		||||
 | 
			
		||||
    if (/^[^#]/) {
 | 
			
		||||
	&output($_);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub output {
 | 
			
		||||
    local($line) = @_;
 | 
			
		||||
    @line_fields = split(/\|/, $line, 9999);
 | 
			
		||||
    $retval = $line_fields[1];
 | 
			
		||||
    $feature = $line_fields[2];
 | 
			
		||||
    $param_def = $line_fields[4];
 | 
			
		||||
 | 
			
		||||
    $orig = $feature;
 | 
			
		||||
    $feature =~ s/^@//;
 | 
			
		||||
    $space = $feature;
 | 
			
		||||
    $space =~ s/./ /g;
 | 
			
		||||
 | 
			
		||||
    $features{++$feature_count} = $orig;
 | 
			
		||||
 | 
			
		||||
    return unless $orig =~ /^@/;
 | 
			
		||||
 | 
			
		||||
    if ($retval eq 'retval') {
 | 
			
		||||
      $retval_param = '&retval';
 | 
			
		||||
      $call_prefix = '';
 | 
			
		||||
      $call_prefix_space = '';
 | 
			
		||||
      $prefix = 'retval = ';
 | 
			
		||||
      $prefix_space = '         ';
 | 
			
		||||
      $retval = 'int';
 | 
			
		||||
    }
 | 
			
		||||
    elsif ($retval !~ /^void$/) {
 | 
			
		||||
      $retval_param = 'NULL';
 | 
			
		||||
      $prefix = 'retval = ';
 | 
			
		||||
      $prefix_space = '         ';
 | 
			
		||||
      $call_prefix = 'retval = ';
 | 
			
		||||
      $call_prefix_space = '         ';
 | 
			
		||||
    }
 | 
			
		||||
    else {
 | 
			
		||||
      $retval_param = 'NULL';
 | 
			
		||||
      $call_prefix = '';
 | 
			
		||||
      $call_prefix_space = '';
 | 
			
		||||
      $prefix = '';
 | 
			
		||||
      $prefix_space = '';
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if ($retval =~ /^(array|pointer)\((.*)\)$/) {
 | 
			
		||||
      $retval = ($2 eq 'string') ? 'char **' : "$2 *";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    $need_temp_storage = $always_use_temp_storage;
 | 
			
		||||
    $first_param_name = '';
 | 
			
		||||
 | 
			
		||||
    $call_param = '';
 | 
			
		||||
    $param_decl = '';
 | 
			
		||||
    $need_temp_len = 0;
 | 
			
		||||
    $nr_params = (@params = split(/:/, $param_def, 9999));
 | 
			
		||||
    for ($param = 1; $param <= $nr_params; $param++) {
 | 
			
		||||
      $list = $params[$param];
 | 
			
		||||
      $type = $params[$param];
 | 
			
		||||
      $type =~ s/\(.*//;
 | 
			
		||||
      $list =~ s/^.*\(//;
 | 
			
		||||
      $list =~ s/\)$//;
 | 
			
		||||
      $count = (@fields = split(/,/, $list, 9999));
 | 
			
		||||
      for ($field = 1; $field <= $count; $field++) {
 | 
			
		||||
	my $c_type = $typeinfo->{$type}->[1];
 | 
			
		||||
 | 
			
		||||
	if ($first_param_name eq '') {
 | 
			
		||||
	  $first_param_name = $fields[$field];
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if ($typeinfo->{$type}->[2]) {
 | 
			
		||||
	  $need_temp_storage = 1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if ($param_decl eq '') {
 | 
			
		||||
	  $param_decl = ",\n             " . $space . '    ';
 | 
			
		||||
	}
 | 
			
		||||
	else {
 | 
			
		||||
	  $param_decl = $param_decl . ', ';
 | 
			
		||||
	}
 | 
			
		||||
	$param_decl = $param_decl . $c_type . ' ' . $fields[$field];
 | 
			
		||||
	$call_param = $call_param . ', ' . $fields[$field];
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if ($line_fields[3] eq '') {
 | 
			
		||||
      $total_code = sprintf
 | 
			
		||||
	("\treturn glibtop_get_%s_s (server%s);\n", $feature, $call_param);
 | 
			
		||||
    } elsif ($line_fields[3] eq 'array') {
 | 
			
		||||
      $total_code = sprintf
 | 
			
		||||
	("\treturn glibtop_get_%s_s (server, array%s);\n", $feature, $call_param);
 | 
			
		||||
    } elsif ($line_fields[3] =~ /^array/) {
 | 
			
		||||
      $total_code = sprintf
 | 
			
		||||
	("\treturn glibtop_get_%s_s (server, array, buf%s);\n", $feature, $call_param);
 | 
			
		||||
    } else {
 | 
			
		||||
      $total_code = sprintf
 | 
			
		||||
	("\treturn glibtop_get_%s_s (server, buf%s);\n", $feature, $call_param);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    $func_decl = 'static '.$retval."\n";
 | 
			
		||||
    if ($line_fields[3] eq '') {
 | 
			
		||||
      $func_decl .= sprintf ("_glibtop_get_%s_c (glibtop_server *server, void *closure%s)\n",
 | 
			
		||||
			     $feature, $param_decl);
 | 
			
		||||
    } elsif ($line_fields[3] eq 'array') {
 | 
			
		||||
      $func_decl .= sprintf ("_glibtop_get_%s_c (glibtop_server *server, void *closure, glibtop_array *array%s)\n",
 | 
			
		||||
			     $feature, $param_decl);
 | 
			
		||||
    } elsif ($line_fields[3] =~ /^array/) {
 | 
			
		||||
      $func_decl .= sprintf ("_glibtop_get_%s_c (glibtop_server *server, void *closure, glibtop_array *array, %s *buf%s)\n",
 | 
			
		||||
			     $feature, 'glibtop_'.$feature, $param_decl);
 | 
			
		||||
    } else {
 | 
			
		||||
      $func_decl .= sprintf ("_glibtop_get_%s_c (glibtop_server *server, void *closure, %s *buf%s)\n",
 | 
			
		||||
			     $feature, 'glibtop_'.$feature, $param_decl);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    $total_code = sprintf ("%s{\n%s\n%s}\n", $func_decl, $total_code);
 | 
			
		||||
 | 
			
		||||
    print $total_code;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
$call_vector_code = '';
 | 
			
		||||
for ($nr = 1; $nr <= $feature_count; $nr++) {
 | 
			
		||||
  $feature = $features{$nr};
 | 
			
		||||
 | 
			
		||||
  if ($feature =~ /^@/) {
 | 
			
		||||
    $feature =~ s/^@//;
 | 
			
		||||
 | 
			
		||||
    $call_vector_code .= sprintf (qq[\t_glibtop_get_%s_c,\n], $feature);
 | 
			
		||||
  } else {
 | 
			
		||||
    $call_vector_code .= sprintf (qq[\tNULL,\n]);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
print 'glibtop_call_vector glibtop_backend_common_call_vector = {';
 | 
			
		||||
print $call_vector_code;
 | 
			
		||||
print '};';
 | 
			
		||||
print '';
 | 
			
		||||
 | 
			
		||||
@@ -1,10 +0,0 @@
 | 
			
		||||
.deps
 | 
			
		||||
.libs
 | 
			
		||||
Makefile
 | 
			
		||||
Makefile.in
 | 
			
		||||
*.lo
 | 
			
		||||
*.la
 | 
			
		||||
marshal.c
 | 
			
		||||
demarshal.c
 | 
			
		||||
libgtop_server
 | 
			
		||||
command.h
 | 
			
		||||
@@ -1,125 +0,0 @@
 | 
			
		||||
2004-08-22  Benoît Dejean  <tazforever@dlfp.org>
 | 
			
		||||
 | 
			
		||||
	* server.c: (handle_slave_connection): Replaced //comment by /*C89*/. 
 | 
			
		||||
 | 
			
		||||
2004-03-09  Bastien Nocera  <hadess@hadess.net>
 | 
			
		||||
 | 
			
		||||
	* command.c: (glibtop_call_i):
 | 
			
		||||
	* demarshal.pl:
 | 
			
		||||
	* marshal.pl:
 | 
			
		||||
	* read_data.c: (glibtop_read_data_i):
 | 
			
		||||
	* server.c: (handle_slave_connection): fix g_malloc usage on non-Linux
 | 
			
		||||
	platforms (patch by Benoît Dejean <bnet@ifrance.com>)
 | 
			
		||||
 | 
			
		||||
2003-10-20  Bastien Nocera  <hadess@hadess.net>
 | 
			
		||||
 | 
			
		||||
	* backend-server.c: (_open_server):
 | 
			
		||||
	* backend-server.h:
 | 
			
		||||
	* command.h.in: s/u_int64_t/guint64/
 | 
			
		||||
 | 
			
		||||
2003-10-20  Bastien Nocera  <hadess@hadess.net>
 | 
			
		||||
 | 
			
		||||
	* backend-server.h:
 | 
			
		||||
	* command.h.in:
 | 
			
		||||
	* demarshal.pl:
 | 
			
		||||
	* server.h: fixed compilation
 | 
			
		||||
 | 
			
		||||
2003-10-20  Bastien Nocera  <hadess@hadess.net>
 | 
			
		||||
 | 
			
		||||
	* backend-server.c: (_open_server):
 | 
			
		||||
	* command.c: (glibtop_call_i):
 | 
			
		||||
	* demarshal.pl:
 | 
			
		||||
	* marshal.pl:
 | 
			
		||||
	* read_data.c: (glibtop_read_data_i):
 | 
			
		||||
	* server.c: (main), (handle_slave_connection):
 | 
			
		||||
	replace all the xmalloc crap by glib memory management functions
 | 
			
		||||
 | 
			
		||||
2003-10-20  Bastien Nocera  <hadess@hadess.net>
 | 
			
		||||
 | 
			
		||||
	* Makefile.am: removed traces of guile, intllibs and libgnomesupport
 | 
			
		||||
 | 
			
		||||
2000-11-27  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* backend-server.c (backend_server_quark): New global variable.
 | 
			
		||||
	(_open_server, _close_server): Use the quark.
 | 
			
		||||
	* commands.c: Likewise.
 | 
			
		||||
 | 
			
		||||
2000-11-26  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* backend-server.h: New file.
 | 
			
		||||
	(backend_server_private): New struct, formerly known
 | 
			
		||||
	as glibtop_backend_private.
 | 
			
		||||
 | 
			
		||||
	* glibtop-backend-private.h: Removed.
 | 
			
		||||
 | 
			
		||||
	* backend-server.c: (_open_server): Use g_object_set_data()
 | 
			
		||||
	to set add the backend_server_private data to the glibtop_backend,
 | 
			
		||||
	don't override `backend->_priv'.
 | 
			
		||||
	(_close_server): Use g_object_get_data() to get the data.
 | 
			
		||||
	[FIXME: Use quarks directly.]
 | 
			
		||||
 | 
			
		||||
	* read.c: (glibtop_read_i): Replaced the glibtop_server and
 | 
			
		||||
	glibtop_backend arguments with backend_server_private.
 | 
			
		||||
	* read_data.c: (glibtop_read_data_i): Likewise.
 | 
			
		||||
	* write.c: (glibtop_write_i): Likewise.
 | 
			
		||||
 | 
			
		||||
2000-02-22  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* backend-sysdeps.c (LibGTopBackendInfo): Call this
 | 
			
		||||
	`LibGTopBackendInfo_Server' when we don't use gmodule.
 | 
			
		||||
 | 
			
		||||
2000-02-22  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* Makefile.am: Only install the libs in $(LIBGTOP_BACKEND_DIR)
 | 
			
		||||
	when we LIBGTOP_USE_GMODULE and in $(libdir) otherwise.
 | 
			
		||||
 | 
			
		||||
2000-01-18  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* demarshal.pl: Only emit code for functions which are
 | 
			
		||||
	really suid/sgid.
 | 
			
		||||
 | 
			
		||||
2000-01-13  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* write.c (glibtop_write_i): The buffer which we write is
 | 
			
		||||
	now a `const'.
 | 
			
		||||
 | 
			
		||||
2000-01-12  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* Makefile.am: Install everything except the server binary
 | 
			
		||||
	in $(LIBGTOP_BACKEND_DIR).
 | 
			
		||||
 | 
			
		||||
	* libgtop-server.backend: New file.
 | 
			
		||||
 | 
			
		||||
	* backend-server.c (glibtop_backend_server): Renamed to
 | 
			
		||||
	`LibGTopBackendInfo'.
 | 
			
		||||
 | 
			
		||||
2000-01-08  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* command.h.in (glibtop_response): New structure.
 | 
			
		||||
 | 
			
		||||
2000-01-02  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* command.pl: New file. Creates `command.h' from `command.h.in'.
 | 
			
		||||
	* command.h.in: New file. Template file for `command.h'.
 | 
			
		||||
 | 
			
		||||
	* io.c, version.c: New files. Copied here from `src/daemon'.
 | 
			
		||||
 | 
			
		||||
	* demarshal.pl: New file. Automatically creates `demarshal.c'.
 | 
			
		||||
	* demarshal.c: This automatically created file handles the
 | 
			
		||||
	demarshalling in the libgtop_server.
 | 
			
		||||
 | 
			
		||||
	* Makefile.am: Build the `libgtop_server' here.
 | 
			
		||||
	* server.c, server.h: New files. Copied here from `src/daemon'.
 | 
			
		||||
 | 
			
		||||
2000-01-01  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	Initial version of the "glibtop-backend-server" backend.
 | 
			
		||||
 | 
			
		||||
	* command.c, read.c, read_data.c, write.c: New files. Moved here
 | 
			
		||||
	from the `lib' directory.
 | 
			
		||||
 | 
			
		||||
	* backend-server.c: New file.
 | 
			
		||||
	* glibtop-backend-private.h: New file.
 | 
			
		||||
 | 
			
		||||
	* marshal.pl: New file. Automatically creates `marshal.c'.
 | 
			
		||||
 | 
			
		||||
@@ -1,84 +0,0 @@
 | 
			
		||||
LINK		= $(LIBTOOL) --mode=link $(CC) $(CFLAGS) $(LDFLAGS) -o $@
 | 
			
		||||
 | 
			
		||||
INCLUDES	= @INCLUDES@ -D_BSD \
 | 
			
		||||
		  -DLIBGTOP_COMPILE_SYSTEM=\"`uname -s`\" \
 | 
			
		||||
		  -DLIBGTOP_COMPILE_RELEASE=\"`uname -r`\" \
 | 
			
		||||
		  -DLIBGTOP_COMPILE_MACHINE=\"`uname -m`\"
 | 
			
		||||
 | 
			
		||||
backenddir	= @LIBGTOP_BACKEND_DIR@
 | 
			
		||||
 | 
			
		||||
if LIBGTOP_USE_GMODULE
 | 
			
		||||
backendlibdir	= $(backenddir)
 | 
			
		||||
else
 | 
			
		||||
backendlibdir	= $(libdir)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
dynamic_ldflags	= @libgtop_dynamic_ldflags@
 | 
			
		||||
 | 
			
		||||
backend_DATA = \
 | 
			
		||||
	libgtop-server.backend
 | 
			
		||||
 | 
			
		||||
noinst_HEADERS = \
 | 
			
		||||
	backend-server.h
 | 
			
		||||
 | 
			
		||||
backendlib_LTLIBRARIES = \
 | 
			
		||||
	libgtop_backend_server.la
 | 
			
		||||
 | 
			
		||||
bin_PROGRAMS = \
 | 
			
		||||
	@server_programs@
 | 
			
		||||
 | 
			
		||||
EXTRA_PROGRAMS = \
 | 
			
		||||
	libgtop_server
 | 
			
		||||
 | 
			
		||||
libgtop_backend_server_la_SOURCES = \
 | 
			
		||||
	backend-server.c		\
 | 
			
		||||
	marshal.c			\
 | 
			
		||||
	command.c			\
 | 
			
		||||
	read.c				\
 | 
			
		||||
	read_data.c			\
 | 
			
		||||
	write.c
 | 
			
		||||
 | 
			
		||||
libgtop_backend_server_la_LDFLAGS = \
 | 
			
		||||
	$(LT_VERSION_INFO) $(dynamic_ldflags)
 | 
			
		||||
 | 
			
		||||
libgtop_server_SOURCES = \
 | 
			
		||||
	server.c		\
 | 
			
		||||
	server.h		\
 | 
			
		||||
	demarshal.c		\
 | 
			
		||||
	version.c		\
 | 
			
		||||
	io.c
 | 
			
		||||
 | 
			
		||||
libgtop_server_LDADD = \
 | 
			
		||||
	$(top_builddir)/sysdeps/@sysdeps_dir@/libgtop_sysdeps_suid.la \
 | 
			
		||||
	$(top_builddir)/sysdeps/common/libgtop_suid_common.la
 | 
			
		||||
 | 
			
		||||
if ENABLE_STATIC
 | 
			
		||||
libgtop_server_LDFLAGS = -static
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
BUILT_SOURCES = \
 | 
			
		||||
	marshal.c		\
 | 
			
		||||
	demarshal.c		\
 | 
			
		||||
	command.h
 | 
			
		||||
 | 
			
		||||
EXTRA_DIST = \
 | 
			
		||||
	marshal.pl		\
 | 
			
		||||
	demarshal.pl		\
 | 
			
		||||
	command.pl		\
 | 
			
		||||
	command.h.in		\
 | 
			
		||||
	libgtop-server.backend
 | 
			
		||||
 | 
			
		||||
CLEANFILES = $(BUILT_SOURCES)
 | 
			
		||||
 | 
			
		||||
marshal.c: marshal.pl $(top_builddir)/config.h $(top_srcdir)/features.def $(top_srcdir)/scripts/c_types.pl
 | 
			
		||||
	$(PERL) -I $(top_srcdir)/scripts $(srcdir)/marshal.pl < $(top_srcdir)/features.def > tmp-t
 | 
			
		||||
	mv tmp-t marshal.c
 | 
			
		||||
 | 
			
		||||
demarshal.c: demarshal.pl $(top_builddir)/config.h $(top_srcdir)/features.def $(top_srcdir)/scripts/c_types.pl
 | 
			
		||||
	$(PERL) -I $(top_srcdir)/scripts $(srcdir)/demarshal.pl < $(top_srcdir)/features.def > tmp-t
 | 
			
		||||
	mv tmp-t demarshal.c
 | 
			
		||||
 | 
			
		||||
command.h: command.pl command.h.in $(top_builddir)/config.h $(top_srcdir)/features.def $(top_srcdir)/scripts/c_types.pl
 | 
			
		||||
	$(PERL) -I $(top_srcdir)/scripts $(srcdir)/command.pl $(top_srcdir)/features.def $(srcdir)/command.h.in > tmp-t
 | 
			
		||||
	mv tmp-t command.h
 | 
			
		||||
 | 
			
		||||
@@ -1,113 +0,0 @@
 | 
			
		||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
 | 
			
		||||
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright (C) 1998-99 Martin Baulig
 | 
			
		||||
   This file is part of LibGTop 1.0.
 | 
			
		||||
 | 
			
		||||
   Contributed by Martin Baulig <martin@home-of-linux.org>, 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 <backend-server.h>
 | 
			
		||||
 | 
			
		||||
static int
 | 
			
		||||
_open_server (glibtop_server *, glibtop_backend *, guint64, const char **);
 | 
			
		||||
 | 
			
		||||
static int
 | 
			
		||||
_close_server (glibtop_server *, glibtop_backend *, void *);
 | 
			
		||||
 | 
			
		||||
extern glibtop_call_vector glibtop_backend_server_call_vector;
 | 
			
		||||
 | 
			
		||||
#ifdef LIBGTOP_USE_GMODULE
 | 
			
		||||
glibtop_backend_info LibGTopBackendInfo = {
 | 
			
		||||
    "glibtop-backend-server", _open_server, _close_server,
 | 
			
		||||
    &glibtop_backend_server_call_vector
 | 
			
		||||
};
 | 
			
		||||
#else
 | 
			
		||||
glibtop_backend_info LibGTopBackendInfo_Server = {
 | 
			
		||||
    "glibtop-backend-server", _open_server, _close_server,
 | 
			
		||||
    &glibtop_backend_server_call_vector
 | 
			
		||||
};
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
static int
 | 
			
		||||
_open_server (glibtop_server *server, glibtop_backend *backend,
 | 
			
		||||
	      guint64 features, const char **backend_args)
 | 
			
		||||
{
 | 
			
		||||
    backend_server_private *priv;
 | 
			
		||||
 | 
			
		||||
    priv = g_malloc (sizeof (backend_server_private));
 | 
			
		||||
 | 
			
		||||
    glibtop_backend_set_closure_data (backend, priv);
 | 
			
		||||
 | 
			
		||||
#ifdef DEBUG
 | 
			
		||||
    fprintf (stderr, "open_server - %p, %p, %p\n", server, backend, priv);
 | 
			
		||||
 | 
			
		||||
    fprintf (stderr, "Opening pipe to server (%s).\n", LIBGTOP_SERVER);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    if (pipe (priv->input) || pipe (priv->output)) {
 | 
			
		||||
	glibtop_warn_io_r (server, "cannot make a pipe");
 | 
			
		||||
	return -1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    priv->pid  = fork ();
 | 
			
		||||
 | 
			
		||||
    if (priv->pid < 0) {
 | 
			
		||||
	glibtop_warn_io_r (server, "fork failed");
 | 
			
		||||
	return -1;
 | 
			
		||||
    } else if (priv->pid == 0) {
 | 
			
		||||
	close (0); close (1);
 | 
			
		||||
	close (priv->input [0]);
 | 
			
		||||
	close (priv->output [1]);
 | 
			
		||||
	dup2 (priv->input [1], 1);
 | 
			
		||||
	dup2 (priv->output [0], 0);
 | 
			
		||||
	execl (LIBGTOP_SERVER, "libgtop-server", NULL);
 | 
			
		||||
	glibtop_error_io_r (server, "execl (%s)",
 | 
			
		||||
			    LIBGTOP_SERVER);
 | 
			
		||||
	_exit (2);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    close (priv->input [1]);
 | 
			
		||||
    close (priv->output [0]);
 | 
			
		||||
 | 
			
		||||
    glibtop_server_ref (server);
 | 
			
		||||
    priv->server = server;
 | 
			
		||||
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int
 | 
			
		||||
_close_server (glibtop_server *server, glibtop_backend *backend,
 | 
			
		||||
	       void *closure)
 | 
			
		||||
{
 | 
			
		||||
    backend_server_private *priv = closure;
 | 
			
		||||
 | 
			
		||||
    kill (priv->pid, SIGKILL);
 | 
			
		||||
    close (priv->input [0]);
 | 
			
		||||
    close (priv->output [1]);
 | 
			
		||||
 | 
			
		||||
    glibtop_server_unref (priv->server);
 | 
			
		||||
 | 
			
		||||
    priv->pid = 0;
 | 
			
		||||
 | 
			
		||||
    g_free (priv);
 | 
			
		||||
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -1,65 +0,0 @@
 | 
			
		||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
 | 
			
		||||
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright (C) 1998-99 Martin Baulig
 | 
			
		||||
   This file is part of LibGTop 1.0.
 | 
			
		||||
 | 
			
		||||
   Contributed by Martin Baulig <martin@home-of-linux.org>, 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.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#ifndef __GLIBTOP_BACKEND_COMMON_H__
 | 
			
		||||
#define __GLIBTOP_BACKEND_COMMON_H__
 | 
			
		||||
 | 
			
		||||
#include <glibtop.h>
 | 
			
		||||
#include <glibtop/global.h>
 | 
			
		||||
 | 
			
		||||
#include <glibtop/open.h>
 | 
			
		||||
#include <glibtop/glibtop-backend.h>
 | 
			
		||||
#include <glibtop/glibtop-backend-info.h>
 | 
			
		||||
 | 
			
		||||
typedef struct _backend_server_private backend_server_private;
 | 
			
		||||
 | 
			
		||||
struct _backend_server_private
 | 
			
		||||
{
 | 
			
		||||
    guint64 flags;
 | 
			
		||||
    int input [2];		/* Pipe client <- server */
 | 
			
		||||
    int output [2];		/* Pipe client -> server */
 | 
			
		||||
    pid_t pid;			/* PID of the server */
 | 
			
		||||
 | 
			
		||||
    glibtop_server *server;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
void *
 | 
			
		||||
glibtop_call_i (glibtop_server *server, backend_server_private *priv,
 | 
			
		||||
		unsigned command, size_t send_size, const void *send_ptr,
 | 
			
		||||
		size_t data_size, const void *data_ptr,
 | 
			
		||||
		size_t recv_size, void *recv_ptr,
 | 
			
		||||
		int *retval_ptr);
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
glibtop_read_i (backend_server_private *priv, size_t size, void *buf);
 | 
			
		||||
 | 
			
		||||
void *
 | 
			
		||||
glibtop_read_data_i (backend_server_private *priv);
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
glibtop_write_i (backend_server_private *priv, size_t size, const void *buf);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
@@ -1,94 +0,0 @@
 | 
			
		||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
 | 
			
		||||
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright (C) 1998-99 Martin Baulig
 | 
			
		||||
   This file is part of LibGTop 1.0.
 | 
			
		||||
 | 
			
		||||
   Contributed by Martin Baulig <martin@home-of-linux.org>, 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 <backend-server.h>
 | 
			
		||||
 | 
			
		||||
#include "command.h"
 | 
			
		||||
 | 
			
		||||
void *
 | 
			
		||||
glibtop_call_i (glibtop_server *server, backend_server_private *priv,
 | 
			
		||||
		unsigned command, size_t send_size, const void *send_buf,
 | 
			
		||||
		size_t data_size, const void *data_buf,
 | 
			
		||||
		size_t recv_size, void *recv_ptr,
 | 
			
		||||
		int *retval_ptr)
 | 
			
		||||
{
 | 
			
		||||
    glibtop_command cmnd = {0};
 | 
			
		||||
    glibtop_response resp = {0};
 | 
			
		||||
 | 
			
		||||
    cmnd.command = command;
 | 
			
		||||
 | 
			
		||||
    /* If send_size is less than _GLIBTOP_PARAM_SIZE (normally 16 Bytes), we
 | 
			
		||||
     * send it together with command, so we only need one system call instead
 | 
			
		||||
     * of two. */
 | 
			
		||||
 | 
			
		||||
    if (send_size <= _GLIBTOP_PARAM_SIZE) {
 | 
			
		||||
	memcpy (cmnd.parameter, send_buf, send_size);
 | 
			
		||||
	cmnd.param_size = send_size;
 | 
			
		||||
    } else {
 | 
			
		||||
	cmnd.send_size = send_size;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    cmnd.data_size = data_size;
 | 
			
		||||
 | 
			
		||||
    glibtop_write_i (priv, sizeof (glibtop_command), &cmnd);
 | 
			
		||||
 | 
			
		||||
    if (data_size) {
 | 
			
		||||
#ifdef SLAVE_DEBUG
 | 
			
		||||
	fprintf (stderr, "SENDING %d bytes of DATA.\n", data_size);
 | 
			
		||||
#endif
 | 
			
		||||
	glibtop_write_i (priv, data_size, data_buf);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    glibtop_read_i (priv, sizeof (glibtop_response), &resp);
 | 
			
		||||
 | 
			
		||||
#ifdef SLAVE_DEBUG
 | 
			
		||||
    fprintf (stderr, "RESPONSE: %d - %d - %ld - %ld - %p - %ld\n",
 | 
			
		||||
	     resp.retval, resp.glibtop_errno,
 | 
			
		||||
	     (long) resp.recv_size, (long) resp.data_size,
 | 
			
		||||
	     recv_ptr, (long) recv_size);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    if (retval_ptr)
 | 
			
		||||
	*retval_ptr = resp.glibtop_errno;
 | 
			
		||||
 | 
			
		||||
    if (resp.recv_size != recv_size) {
 | 
			
		||||
	glibtop_warn_r (server, "Expected %ld bytes, but got %ld.",
 | 
			
		||||
			(long) recv_size, (long) resp.recv_size);
 | 
			
		||||
	return NULL;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (recv_ptr)
 | 
			
		||||
	glibtop_read_i (priv, recv_size, recv_ptr);
 | 
			
		||||
 | 
			
		||||
    if (resp.data_size) {
 | 
			
		||||
	void *ptr = g_malloc (resp.data_size);
 | 
			
		||||
 | 
			
		||||
	glibtop_read_i (priv, resp.data_size, ptr);
 | 
			
		||||
 | 
			
		||||
	return ptr;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return NULL;
 | 
			
		||||
}
 | 
			
		||||
@@ -1,59 +0,0 @@
 | 
			
		||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
 | 
			
		||||
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
@@AUTOGEN_COMMENT@@
 | 
			
		||||
 | 
			
		||||
/* Copyright (C) 1998-99 Martin Baulig
 | 
			
		||||
   This file is part of LibGTop 1.0.
 | 
			
		||||
 | 
			
		||||
   Contributed by Martin Baulig <martin@home-of-linux.org>, 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.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#ifndef __GLIBTOP_COMMAND_H__
 | 
			
		||||
#define __GLIBTOP_COMMAND_H__
 | 
			
		||||
 | 
			
		||||
#include <glibtop.h>
 | 
			
		||||
#include <glibtop/union.h>
 | 
			
		||||
 | 
			
		||||
G_BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
@@GLIBTOP_COMMAND_CONSTANTS@@
 | 
			
		||||
 | 
			
		||||
#define _GLIBTOP_PARAM_SIZE		16
 | 
			
		||||
 | 
			
		||||
typedef struct _glibtop_command		glibtop_command;
 | 
			
		||||
typedef struct _glibtop_response	glibtop_response;
 | 
			
		||||
 | 
			
		||||
struct _glibtop_command
 | 
			
		||||
{
 | 
			
		||||
    guint64	command;
 | 
			
		||||
    guint64	param_size, send_size, data_size;
 | 
			
		||||
    char	parameter [_GLIBTOP_PARAM_SIZE];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct _glibtop_response
 | 
			
		||||
{
 | 
			
		||||
    int retval;
 | 
			
		||||
    int glibtop_errno;
 | 
			
		||||
    guint64 recv_size, data_size;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
G_END_DECLS
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
@@ -1,76 +0,0 @@
 | 
			
		||||
#!/usr/bin/perl
 | 
			
		||||
 | 
			
		||||
require 'c_types.pl';
 | 
			
		||||
 | 
			
		||||
die "Usage: $0 features.def command.h.in" unless $#ARGV == 1;
 | 
			
		||||
 | 
			
		||||
$[ = 1;			# set array base to 1
 | 
			
		||||
$, = ' ';		# set output field separator
 | 
			
		||||
$\ = "\n";		# set output record separator
 | 
			
		||||
 | 
			
		||||
sub toupper {
 | 
			
		||||
    local($_) = @_;
 | 
			
		||||
    tr/a-z/A-Z/;
 | 
			
		||||
    return $_;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub tolower {
 | 
			
		||||
    local($_) = @_;
 | 
			
		||||
    tr/A-Z/a-z/;
 | 
			
		||||
    return $_;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
$constants_decl_code = '';
 | 
			
		||||
 | 
			
		||||
open FEATURESDEF, $ARGV[1] or
 | 
			
		||||
  die "open ($ARGV[1]): $!";
 | 
			
		||||
 | 
			
		||||
while (<FEATURESDEF>) {
 | 
			
		||||
  chop;				# strip record separator
 | 
			
		||||
  
 | 
			
		||||
  if (/^[^\#]/) {
 | 
			
		||||
    &parse_features_def ($_);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
close FEATURESDEF;
 | 
			
		||||
 | 
			
		||||
sub parse_features_def {
 | 
			
		||||
  local($line) = @_;
 | 
			
		||||
  @line_fields = split(/\|/, $line, 9999);
 | 
			
		||||
  $retval = $line_fields[1];
 | 
			
		||||
  $element_def = $line_fields[3];
 | 
			
		||||
  $feature = $line_fields[2];
 | 
			
		||||
  $param_def = $line_fields[4];
 | 
			
		||||
 | 
			
		||||
  $orig = $feature;
 | 
			
		||||
  $feature =~ s/^@//;
 | 
			
		||||
  $space = $feature;
 | 
			
		||||
  $space =~ s/./ /g;
 | 
			
		||||
 | 
			
		||||
  $constants_decl_code .= sprintf
 | 
			
		||||
    (qq[\#define %-40s %d\n], 'GLIBTOP_CMND_'.&toupper($feature),
 | 
			
		||||
     ++$feature_count);
 | 
			
		||||
 | 
			
		||||
  $features{$feature_count} = $feature;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
chop $constants_decl_code;
 | 
			
		||||
 | 
			
		||||
$auto_gen_comment = sprintf
 | 
			
		||||
  (qq[/*\n * This file is automatically generated.\n * Please modify `command.pl' and `command.h.in'.\n */]);
 | 
			
		||||
 | 
			
		||||
open COMMAND, $ARGV[2] or
 | 
			
		||||
  die "open ($ARGV[2]): $!";
 | 
			
		||||
 | 
			
		||||
while (<COMMAND>) {
 | 
			
		||||
  chop;
 | 
			
		||||
 | 
			
		||||
  s/^\s*\@\@GLIBTOP_COMMAND_CONSTANTS\@\@\s*$/$constants_decl_code/;
 | 
			
		||||
 | 
			
		||||
  s/^\s*\@\@AUTOGEN_COMMENT\@\@\s*$/$auto_gen_comment/;
 | 
			
		||||
} continue {
 | 
			
		||||
  print $_;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
close COMMAND;
 | 
			
		||||
@@ -1,385 +0,0 @@
 | 
			
		||||
#!/usr/bin/perl
 | 
			
		||||
 | 
			
		||||
require 'c_types.pl';
 | 
			
		||||
 | 
			
		||||
$[ = 1;			# set array base to 1
 | 
			
		||||
$, = ' ';		# set output field separator
 | 
			
		||||
$\ = "\n";		# set output record separator
 | 
			
		||||
 | 
			
		||||
$always_use_temp_storage = 0;
 | 
			
		||||
 | 
			
		||||
sub toupper {
 | 
			
		||||
    local($_) = @_;
 | 
			
		||||
    tr/a-z/A-Z/;
 | 
			
		||||
    return $_;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub tolower {
 | 
			
		||||
    local($_) = @_;
 | 
			
		||||
    tr/A-Z/a-z/;
 | 
			
		||||
    return $_;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
print '/* demarshal.c */';
 | 
			
		||||
print "/* This is a generated file.  Please modify `demarshal.pl' */";
 | 
			
		||||
print '';
 | 
			
		||||
 | 
			
		||||
print '#include <glibtop.h>';
 | 
			
		||||
print '#include <glibtop/open.h>';
 | 
			
		||||
print '';
 | 
			
		||||
print '#include <glibtop/sysdeps.h>';
 | 
			
		||||
print '#include <glibtop/union.h>';
 | 
			
		||||
print '';
 | 
			
		||||
print '#include <glibtop/backend.h>';
 | 
			
		||||
print '';
 | 
			
		||||
print '#include <glibtop-backend-private.h>';
 | 
			
		||||
print '#include "server.h"';
 | 
			
		||||
print '';
 | 
			
		||||
 | 
			
		||||
$feature_count = 0;
 | 
			
		||||
 | 
			
		||||
while (<>) {
 | 
			
		||||
  chop;	# strip record separator
 | 
			
		||||
 | 
			
		||||
  if (/^[^\#]/) {
 | 
			
		||||
    &output($_);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub output {
 | 
			
		||||
  local($line) = @_;
 | 
			
		||||
  @line_fields = split(/\|/, $line, 9999);
 | 
			
		||||
  $retval = $line_fields[1];
 | 
			
		||||
  $element_def = $line_fields[3];
 | 
			
		||||
  $feature = $line_fields[2];
 | 
			
		||||
  $param_def = $line_fields[4];
 | 
			
		||||
 | 
			
		||||
  return if $feature =~ /^@/;
 | 
			
		||||
  $name = 'glibtop_'.$feature;
 | 
			
		||||
  
 | 
			
		||||
  $orig = $feature;
 | 
			
		||||
  $feature =~ s/^@//;
 | 
			
		||||
  $space = $feature;
 | 
			
		||||
  $space =~ s/./ /g;
 | 
			
		||||
  
 | 
			
		||||
  $features{++$feature_count} = $feature;
 | 
			
		||||
 | 
			
		||||
  $orig_retval = $retval;
 | 
			
		||||
  
 | 
			
		||||
  if ($retval eq 'retval') {
 | 
			
		||||
    $retval_param = '&retval';
 | 
			
		||||
    $call_prefix = '';
 | 
			
		||||
    $call_prefix_space = '';
 | 
			
		||||
    $prefix = 'retval = ';
 | 
			
		||||
    $prefix_space = '         ';
 | 
			
		||||
    $retval = 'int';
 | 
			
		||||
  } elsif ($retval !~ /^void$/) {
 | 
			
		||||
    $retval_param = 'NULL';
 | 
			
		||||
    $prefix = 'retval = ';
 | 
			
		||||
    $prefix_space = '         ';
 | 
			
		||||
    $call_prefix = 'retval = ';
 | 
			
		||||
    $call_prefix_space = '         ';
 | 
			
		||||
  } else {
 | 
			
		||||
    $retval_param = 'NULL';
 | 
			
		||||
    $call_prefix = '';
 | 
			
		||||
    $call_prefix_space = '';
 | 
			
		||||
    $prefix = '';
 | 
			
		||||
    $prefix_space = '';
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  if ($retval =~ /^(array|pointer)\((.*)\)$/) {
 | 
			
		||||
    $retval = ($2 eq 'string') ? 'char **' : "$2 *";
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  $need_temp_storage = $always_use_temp_storage;
 | 
			
		||||
  $first_param_name = '';
 | 
			
		||||
  $size_code = "\t/* send size */\n";
 | 
			
		||||
  $size_code .= "\t_LIBGTOP_SEND_len = 0;\n";
 | 
			
		||||
  
 | 
			
		||||
  $local_var_decl_code = '';
 | 
			
		||||
  $local_var_decl_code .= "\tsize_t _LIBGTOP_SEND_len, _LIBGTOP_RECV_len;\n";
 | 
			
		||||
  $local_var_decl_code .= "\toff_t _LIBGTOP_SEND_offset;\n";
 | 
			
		||||
  $local_var_decl_code .= "\tchar *_LIBGTOP_RECV_buf, *_LIBGTOP_RECV_ptr;\n";
 | 
			
		||||
  $local_var_decl_code .= "\tconst char *_LIBGTOP_SEND_ptr;\n";
 | 
			
		||||
  $local_var_decl_code .= sprintf
 | 
			
		||||
    (qq[\tglibtop_%s %s;\n], $feature, $feature);
 | 
			
		||||
  if ($retval !~ /^void$/) {
 | 
			
		||||
    $local_var_decl_code .= sprintf ("\t%s retval = (%s) 0;\n",
 | 
			
		||||
				     $retval, $retval);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  $init_local_var_code = "\t/* variable initialization */\n";
 | 
			
		||||
  $init_local_var_code .= sprintf
 | 
			
		||||
    (qq[\tmemset (&%s, 0, sizeof (glibtop_%s));\n], $feature, $feature);
 | 
			
		||||
  $init_local_var_code .= "\t_LIBGTOP_SEND_offset = 0;\n";
 | 
			
		||||
  $init_local_var_code .= "\t_LIBGTOP_SEND_ptr = ".
 | 
			
		||||
    "(char *) send_ptr;\n";
 | 
			
		||||
 | 
			
		||||
  $demarshal_code = '';
 | 
			
		||||
 | 
			
		||||
  $call_param = '';
 | 
			
		||||
  $param_decl = '';
 | 
			
		||||
  $need_temp_len = 0;
 | 
			
		||||
  $nr_params = (@params = split(/:/, $param_def, 9999));
 | 
			
		||||
  for ($param = 1; $param <= $nr_params; $param++) {
 | 
			
		||||
    $list = $params[$param];
 | 
			
		||||
    $type = $params[$param];
 | 
			
		||||
    $type =~ s/\(.*//;
 | 
			
		||||
    $list =~ s/^.*\(//;
 | 
			
		||||
    $list =~ s/\)$//;
 | 
			
		||||
    $count = (@fields = split(/,/, $list, 9999));
 | 
			
		||||
    for ($field = 1; $field <= $count; $field++) {
 | 
			
		||||
      my $c_type = $typeinfo->{$type}->[1];
 | 
			
		||||
      
 | 
			
		||||
      if ($first_param_name eq '') {
 | 
			
		||||
	$first_param_name = $fields[$field];
 | 
			
		||||
      }
 | 
			
		||||
      
 | 
			
		||||
      if ($typeinfo->{$type}->[2]) {
 | 
			
		||||
	$need_temp_storage = 1;
 | 
			
		||||
      }
 | 
			
		||||
      
 | 
			
		||||
      if ($param_decl eq '') {
 | 
			
		||||
	$param_decl = ",\n            " . $space . '    ';
 | 
			
		||||
      } else {
 | 
			
		||||
	$param_decl = $param_decl . ', ';
 | 
			
		||||
      }
 | 
			
		||||
      $param_decl = $param_decl . $c_type . ' ' . $fields[$field];
 | 
			
		||||
      $call_param = $call_param . ', _LIBGTOP_demarshal_' . $fields[$field];
 | 
			
		||||
 | 
			
		||||
      $size_code .= "\t_LIBGTOP_SEND_len += ";
 | 
			
		||||
      if ($typeinfo->{$type}->[2]) {
 | 
			
		||||
	$size_code .= sprintf ("sizeof (size_t)");
 | 
			
		||||
      } else {
 | 
			
		||||
	$size_code .= sprintf ("sizeof (%s)", $c_type);
 | 
			
		||||
      }
 | 
			
		||||
      $size_code .= ";\n";
 | 
			
		||||
 | 
			
		||||
      $local_var_decl_code .= sprintf
 | 
			
		||||
	(qq[\t%s _LIBGTOP_demarshal_%s;\n], $c_type, $fields[$field]);
 | 
			
		||||
      $init_local_var_code .= sprintf
 | 
			
		||||
	(qq[\tmemset (&_LIBGTOP_demarshal_%s, 0, sizeof (%s));\n],
 | 
			
		||||
	 $fields[$field], $c_type);
 | 
			
		||||
 | 
			
		||||
      $demarshal_code .= "\t_LIBGTOP_SEND_ptr = ".
 | 
			
		||||
	"(char *) send_ptr + _LIBGTOP_SEND_offset;\n";
 | 
			
		||||
 | 
			
		||||
      if ($typeinfo->{$type}->[2]) {
 | 
			
		||||
	$demarshal_code .= sprintf ("\tmemcpy (&_LIBGTOP_TEMP_len, _LIBGTOP_SEND_ptr, sizeof (size_t));\n");
 | 
			
		||||
	$demarshal_code .= sprintf
 | 
			
		||||
	  (qq[\t_LIBGTOP_DATA_len += _LIBGTOP_TEMP_len;\n]);
 | 
			
		||||
	$demarshal_code .= sprintf
 | 
			
		||||
	  (qq[\tif (_LIBGTOP_DATA_len > data_size)\n\t\treturn -GLIBTOP_ERROR_DEMARSHAL_ERROR;\n]);
 | 
			
		||||
	$demarshal_code .= sprintf
 | 
			
		||||
	  (qq[\t_LIBGTOP_DATA_offset += _LIBGTOP_TEMP_len;\n]);
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      if (defined $demarshal_funcs->{$type}) {
 | 
			
		||||
	$demarshal_code .= $demarshal_funcs->{$type}->($c_type, $fields[$field], "\t");
 | 
			
		||||
      } else {
 | 
			
		||||
	$demarshal_code .= sprintf ("\tmemcpy (&_LIBGTOP_demarshal_%s, _LIBGTOP_SEND_ptr, %s);\n",
 | 
			
		||||
				    $fields[$field], "sizeof ($c_type)");
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      $demarshal_code .= "\t_LIBGTOP_SEND_offset += ";
 | 
			
		||||
      if ($typeinfo->{$type}->[2]) {
 | 
			
		||||
	$demarshal_code .= sprintf ("sizeof (size_t)");
 | 
			
		||||
      } else {
 | 
			
		||||
	$demarshal_code .= sprintf ("sizeof (%s)", $c_type);
 | 
			
		||||
      }
 | 
			
		||||
      $demarshal_code .= ";\n";
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (!($demarshal_code eq '')) {
 | 
			
		||||
    $demarshal_code = sprintf (qq[\t/* demarshal start */\n%s\n],
 | 
			
		||||
			       $demarshal_code);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if ($line_fields[3] eq '') {
 | 
			
		||||
    $call_code = sprintf
 | 
			
		||||
      ("\tretval = glibtop_get_%s_p (server%s);\n",
 | 
			
		||||
       $feature, $call_param);
 | 
			
		||||
  } elsif ($line_fields[3] eq 'array') {
 | 
			
		||||
    $call_code = sprintf
 | 
			
		||||
      ("\tretval = glibtop_get_%s_p (server, &array%s);\n",
 | 
			
		||||
       $feature, $call_param);
 | 
			
		||||
    $local_var_decl_code .= sprintf (qq[\tglibtop_array array;\n]);
 | 
			
		||||
  } elsif ($line_fields[3] =~ /^array/) {
 | 
			
		||||
    $call_code = sprintf
 | 
			
		||||
      ("\tretval = glibtop_get_%s_p (server, &array, &%s%s);\n",
 | 
			
		||||
       $feature, $feature, $call_param);
 | 
			
		||||
    $local_var_decl_code .= sprintf (qq[\tglibtop_array array;\n]);
 | 
			
		||||
  } else {
 | 
			
		||||
    $call_code = sprintf
 | 
			
		||||
      ("\tretval = glibtop_get_%s_p (server, &%s%s);\n",
 | 
			
		||||
       $feature, $feature, $call_param);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if ($orig_retval eq 'retval') {
 | 
			
		||||
    $call_code .= sprintf
 | 
			
		||||
      (qq[\tif (retval_ptr)\n\t\t*retval_ptr = retval;\n]);
 | 
			
		||||
  } else {
 | 
			
		||||
    $call_code .= sprintf
 | 
			
		||||
      (qq[\tif (retval_ptr)\n\t\t*retval_ptr = server->glibtop_errno;\n]);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  $size_code .= sprintf
 | 
			
		||||
    (qq[\tif (_LIBGTOP_SEND_len != send_size)\n\t\treturn -GLIBTOP_ERROR_DEMARSHAL_ERROR;\n\n]);
 | 
			
		||||
 | 
			
		||||
  $size_code .= "\t/* recv size */\n";
 | 
			
		||||
  $size_code .= "\t_LIBGTOP_RECV_len = 0;\n";
 | 
			
		||||
  if ($line_fields[3] eq '') {
 | 
			
		||||
  } elsif ($line_fields[3] eq 'array') {
 | 
			
		||||
    $size_code .= "\t_LIBGTOP_RECV_len += sizeof (glibtop_array);\n";
 | 
			
		||||
  } elsif ($line_fields[3] =~ /^array/) {
 | 
			
		||||
    $size_code .= "\t_LIBGTOP_RECV_len += sizeof (glibtop_array);\n";
 | 
			
		||||
    $size_code .= sprintf
 | 
			
		||||
      (qq[\t_LIBGTOP_RECV_len += sizeof (glibtop_%s);\n], $feature);
 | 
			
		||||
  } else {
 | 
			
		||||
    $size_code .= sprintf
 | 
			
		||||
      (qq[\t_LIBGTOP_RECV_len += sizeof (glibtop_%s);\n], $feature);
 | 
			
		||||
  }
 | 
			
		||||
  $size_code .= "\n";
 | 
			
		||||
 | 
			
		||||
  $size_code .= "\t/* recv buffer */\n";
 | 
			
		||||
  if ($line_fields[3] eq '') {
 | 
			
		||||
    $size_code .= "\t_LIBGTOP_RECV_buf = NULL;\n";
 | 
			
		||||
  } else {
 | 
			
		||||
    $size_code .= "\t_LIBGTOP_RECV_buf = g_malloc (_LIBGTOP_RECV_len);\n";
 | 
			
		||||
  }
 | 
			
		||||
  $size_code .= "\t_LIBGTOP_RECV_ptr = _LIBGTOP_RECV_buf;\n\n";
 | 
			
		||||
 | 
			
		||||
  $recv_buf_code = '';
 | 
			
		||||
  if ($line_fields[3] eq '') {
 | 
			
		||||
  } elsif ($line_fields[3] eq 'array') {
 | 
			
		||||
    $recv_buf_code = "\t/* write recv buffer */\n";
 | 
			
		||||
    $recv_buf_code .= sprintf
 | 
			
		||||
      (qq[\tmemcpy (_LIBGTOP_RECV_ptr, &array, sizeof (glibtop_array));\n]);
 | 
			
		||||
    $recv_buf_code .= sprintf
 | 
			
		||||
      (qq[\t_LIBGTOP_RECV_ptr += sizeof (glibtop_array);\n]);
 | 
			
		||||
  } elsif ($line_fields[3] =~ /^array/) {
 | 
			
		||||
    $recv_buf_code = "\t/* write recv buffer */\n";
 | 
			
		||||
    $recv_buf_code .= sprintf
 | 
			
		||||
      (qq[\tmemcpy (_LIBGTOP_RECV_ptr, &array, sizeof (glibtop_array));\n]);
 | 
			
		||||
    $recv_buf_code .= sprintf
 | 
			
		||||
      (qq[\t_LIBGTOP_RECV_ptr += sizeof (glibtop_array);\n]);
 | 
			
		||||
    $recv_buf_code .= sprintf
 | 
			
		||||
      (qq[\tmemcpy (_LIBGTOP_RECV_ptr, &%s, sizeof (glibtop_%s));\n],
 | 
			
		||||
       $feature, $feature);
 | 
			
		||||
    $recv_buf_code .= sprintf
 | 
			
		||||
      (qq[\t_LIBGTOP_RECV_ptr += sizeof (glibtop_%s);\n], $feature);
 | 
			
		||||
  } else {
 | 
			
		||||
    $recv_buf_code = "\t/* write recv buffer */\n";
 | 
			
		||||
    $recv_buf_code .= sprintf
 | 
			
		||||
      (qq[\tmemcpy (_LIBGTOP_RECV_ptr, &%s, sizeof (glibtop_%s));\n],
 | 
			
		||||
       $feature, $feature);
 | 
			
		||||
    $recv_buf_code .= sprintf
 | 
			
		||||
      (qq[\t_LIBGTOP_RECV_ptr += sizeof (glibtop_%s);\n], $feature);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  $recv_buf_code .= "\n";
 | 
			
		||||
  $recv_buf_code .= "\t*recv_buf_ptr = _LIBGTOP_RECV_buf;\n";
 | 
			
		||||
  $recv_buf_code .= "\t*recv_size_ptr = _LIBGTOP_RECV_len;\n";
 | 
			
		||||
 | 
			
		||||
  if ($orig_retval eq 'pointer(string)') {
 | 
			
		||||
    $need_temp_storage = 1;
 | 
			
		||||
    $local_var_decl_code .= "\tchar **_LIBGTOP_TEMP_ptr;\n";
 | 
			
		||||
    $local_var_decl_code .= "\tchar *_LIBGTOP_ARRAY_ptr;\n";
 | 
			
		||||
    $local_var_decl_code .= "\tchar *_LIBGTOP_ARRAY_base;\n";
 | 
			
		||||
    $local_var_decl_code .= "\toff_t _LIBGTOP_ARRAY_offset;\n";
 | 
			
		||||
    $local_var_decl_code .= "\toff_t *_LIBGTOP_ARRAY_off_ptr;\n";
 | 
			
		||||
 | 
			
		||||
    $recv_buf_code .= "\n";
 | 
			
		||||
    $recv_buf_code .= "\t_LIBGTOP_TEMP_len = 0;\n";
 | 
			
		||||
    $recv_buf_code .= "\t_LIBGTOP_TEMP_ptr = retval;\n";
 | 
			
		||||
    $recv_buf_code .= "\tfor (_LIBGTOP_TEMP_ptr = retval; _LIBGTOP_TEMP_ptr && *_LIBGTOP_TEMP_ptr; _LIBGTOP_TEMP_ptr++)\n";
 | 
			
		||||
    $recv_buf_code .= "\t\t_LIBGTOP_TEMP_len += strlen (*_LIBGTOP_TEMP_ptr)+1;\n";
 | 
			
		||||
    $recv_buf_code .= "\n";
 | 
			
		||||
    $recv_buf_code .= "\t_LIBGTOP_TEMP_len += sizeof (off_t) + 1;\n";
 | 
			
		||||
    $recv_buf_code .= "\t_LIBGTOP_TEMP_len += array.number * sizeof (off_t);\n";
 | 
			
		||||
    $recv_buf_code .= "\t_LIBGTOP_ARRAY_base = g_malloc (_LIBGTOP_TEMP_len);";
 | 
			
		||||
    $recv_buf_code .= "\t_LIBGTOP_ARRAY_ptr = _LIBGTOP_ARRAY_base;\n";
 | 
			
		||||
    $recv_buf_code .= "\t_LIBGTOP_ARRAY_offset = array.number * sizeof (off_t);\n";
 | 
			
		||||
    $recv_buf_code .= "\t_LIBGTOP_ARRAY_offset += sizeof (off_t);\n";
 | 
			
		||||
    $recv_buf_code .= "\t_LIBGTOP_ARRAY_off_ptr = (off_t *) _LIBGTOP_ARRAY_ptr;\n";
 | 
			
		||||
    $recv_buf_code .= "\n";
 | 
			
		||||
    $recv_buf_code .= "\t*_LIBGTOP_ARRAY_off_ptr++ = _LIBGTOP_ARRAY_offset;\n";
 | 
			
		||||
    $recv_buf_code .= "\tfor (_LIBGTOP_TEMP_ptr = retval; _LIBGTOP_TEMP_ptr && *_LIBGTOP_TEMP_ptr; _LIBGTOP_TEMP_ptr++) {\n";
 | 
			
		||||
    $recv_buf_code .= "\t\t*_LIBGTOP_ARRAY_off_ptr++ = _LIBGTOP_ARRAY_offset;\n";
 | 
			
		||||
    $recv_buf_code .= "\t\t_LIBGTOP_ARRAY_offset += strlen (*_LIBGTOP_TEMP_ptr)+1;\n";
 | 
			
		||||
    $recv_buf_code .= "\t}\n\n";
 | 
			
		||||
    $recv_buf_code .= "\t_LIBGTOP_ARRAY_ptr = (char *) _LIBGTOP_ARRAY_off_ptr;\n";
 | 
			
		||||
    $recv_buf_code .= "\tfor (_LIBGTOP_TEMP_ptr = retval; _LIBGTOP_TEMP_ptr && *_LIBGTOP_TEMP_ptr; _LIBGTOP_TEMP_ptr++) {\n";
 | 
			
		||||
    $recv_buf_code .= "\t\tstrcpy (_LIBGTOP_ARRAY_ptr, *_LIBGTOP_TEMP_ptr);\n";
 | 
			
		||||
    $recv_buf_code .= "\t\t_LIBGTOP_ARRAY_ptr += strlen (*_LIBGTOP_TEMP_ptr)+1;\n";
 | 
			
		||||
    $recv_buf_code .= "\t}\n\n";
 | 
			
		||||
    $recv_buf_code .= "\tif (recv_data_ptr) {\n";
 | 
			
		||||
    $recv_buf_code .= "\t\t*recv_data_ptr = _LIBGTOP_ARRAY_base;\n";
 | 
			
		||||
    $recv_buf_code .= "\t\t*recv_data_size_ptr = _LIBGTOP_TEMP_len;\n";
 | 
			
		||||
    $recv_buf_code .= "\t}\n";
 | 
			
		||||
 | 
			
		||||
  } elsif ($line_fields[3] =~ /^array/) {
 | 
			
		||||
    $recv_buf_code .= "\n";
 | 
			
		||||
    $recv_buf_code .= "\tif (recv_data_ptr) {\n";
 | 
			
		||||
    $recv_buf_code .= "\t\t*recv_data_ptr = retval;\n";
 | 
			
		||||
    $recv_buf_code .= "\t\t*recv_data_size_ptr = array.total;\n";
 | 
			
		||||
    $recv_buf_code .= "\t}\n";
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if ($need_temp_storage) {
 | 
			
		||||
    $local_var_decl_code .= "\tsize_t _LIBGTOP_TEMP_len;\n";
 | 
			
		||||
    $local_var_decl_code .= "\tsize_t _LIBGTOP_DATA_len;\n";
 | 
			
		||||
    $local_var_decl_code .= "\toff_t _LIBGTOP_DATA_offset;\n";
 | 
			
		||||
    $local_var_decl_code .= "\tchar *_LIBGTOP_DATA_ptr;\n";
 | 
			
		||||
 | 
			
		||||
    $init_local_var_code .= "\t_LIBGTOP_DATA_len = 0;\n";
 | 
			
		||||
    $init_local_var_code .= "\t_LIBGTOP_DATA_offset = 0;\n";
 | 
			
		||||
    $init_local_var_code .= "\t_LIBGTOP_DATA_ptr = ".
 | 
			
		||||
      "(char *) data_ptr;\n";
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  $func_decl_code = sprintf
 | 
			
		||||
    (qq[static int\n_glibtop_demarshal_%s_i (glibtop *server, glibtop_backend *backend, const void *send_ptr, size_t send_size, void *data_ptr, size_t data_size, void **recv_buf_ptr, size_t *recv_size_ptr, void **recv_data_ptr, size_t *recv_data_size_ptr, int *retval_ptr)\n], $feature);
 | 
			
		||||
 | 
			
		||||
  if (!($call_code eq '')) {
 | 
			
		||||
    $call_code .= "\n";
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  $func_body_code = sprintf
 | 
			
		||||
    (qq[%s%s%s%s], $size_code, $demarshal_code, $call_code, $recv_buf_code);
 | 
			
		||||
  
 | 
			
		||||
  $total_code = sprintf
 | 
			
		||||
    (qq[%s{\n%s\n%s\n%s\n\treturn 0;\n}\n],
 | 
			
		||||
     $func_decl_code, $local_var_decl_code, $init_local_var_code,
 | 
			
		||||
     $func_body_code);
 | 
			
		||||
  
 | 
			
		||||
  $total_code = sprintf ("#if GLIBTOP_SUID_%s\n\n%s\n#endif /* GLIBTOP_SUID_%s */\n\n",
 | 
			
		||||
			 &toupper($feature), $total_code,
 | 
			
		||||
			 &toupper($feature));
 | 
			
		||||
 | 
			
		||||
  print $total_code;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
$func_decl_code = sprintf
 | 
			
		||||
  (qq[int\nglibtop_demarshal_func_i (glibtop *server, glibtop_backend *backend, unsigned command, const void *send_ptr, size_t send_size, void *data_ptr, size_t data_size, void **recv_buf_ptr, size_t *recv_size_ptr, void **recv_data_ptr, size_t *recv_data_size_ptr, int *retval_ptr)]);
 | 
			
		||||
 | 
			
		||||
$switch_body_code = '';
 | 
			
		||||
 | 
			
		||||
for ($nr = 1; $nr <= $feature_count; $nr++) {
 | 
			
		||||
  $feature = $features{$nr};
 | 
			
		||||
 | 
			
		||||
  $switch_body_code .= sprintf
 | 
			
		||||
    (qq[#if GLIBTOP_SUID_%s\n\tcase GLIBTOP_CMND_%s:\n\t\treturn _glibtop_demarshal_%s_i\n\t\t\t(server, backend, send_ptr, send_size,\n\t\t\t data_ptr, data_size,\n\t\t\t recv_buf_ptr, recv_size_ptr,\n\t\t\t recv_data_ptr, recv_data_size_ptr, retval_ptr);\n#endif /* GLIBTOP_SUID_%s */\n],
 | 
			
		||||
     &toupper ($feature), &toupper ($feature), $feature, &toupper ($feature));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
$switch_code = sprintf
 | 
			
		||||
  (qq[\tswitch (command) {\n%s\tdefault:\n\t\treturn -GLIBTOP_ERROR_INVALID_ARGUMENT;\n\t}\n], $switch_body_code);
 | 
			
		||||
 | 
			
		||||
$total_code = sprintf
 | 
			
		||||
  (qq[%s\n{\n%s}\n\n], $func_decl_code, $switch_code);
 | 
			
		||||
 | 
			
		||||
print $total_code;
 | 
			
		||||
 | 
			
		||||
1;
 | 
			
		||||
@@ -1,114 +0,0 @@
 | 
			
		||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
 | 
			
		||||
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright (C) 1998-99 Martin Baulig
 | 
			
		||||
   This file is part of LibGTop 1.0.
 | 
			
		||||
 | 
			
		||||
   Contributed by Martin Baulig <martin@home-of-linux.org>, 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 "server.h"
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
do_output (int s, glibtop_response *resp, const void *recv_ptr,
 | 
			
		||||
	   const void *data_ptr)
 | 
			
		||||
{
 | 
			
		||||
#ifdef DEBUG
 | 
			
		||||
    fprintf (stderr, "Really writing %d bytes.\n",
 | 
			
		||||
	     sizeof (glibtop_response));
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    if (s == 0) {
 | 
			
		||||
	if (write (1, (const void *) resp, sizeof (glibtop_response)) < 0)
 | 
			
		||||
	    glibtop_warn_io ("write");
 | 
			
		||||
    } else {
 | 
			
		||||
	if (send (s, (const void *) resp, sizeof (glibtop_response), 0) < 0)
 | 
			
		||||
	    glibtop_warn_io ("send");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (resp->recv_size) {
 | 
			
		||||
#ifdef DEBUG
 | 
			
		||||
	fprintf (stderr, "Writing %ld bytes of data.\n",
 | 
			
		||||
		 (long) resp->recv_size);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	if (s == 0) {
 | 
			
		||||
	    if (write (1, recv_ptr, resp->recv_size) < 0)
 | 
			
		||||
		glibtop_warn_io ("write");
 | 
			
		||||
	} else {
 | 
			
		||||
	    if (send (s, recv_ptr, resp->recv_size, 0) < 0)
 | 
			
		||||
		glibtop_warn_io ("send");
 | 
			
		||||
	}
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (resp->data_size) {
 | 
			
		||||
#ifdef DEBUG
 | 
			
		||||
	fprintf (stderr, "Writing %ld bytes of extra data.\n",
 | 
			
		||||
		 (long) resp->data_size);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	if (s == 0) {
 | 
			
		||||
	    if (write (1, data_ptr, resp->data_size) < 0)
 | 
			
		||||
		glibtop_warn_io ("write");
 | 
			
		||||
	} else {
 | 
			
		||||
	    if (send (s, data_ptr, resp->data_size, 0) < 0)
 | 
			
		||||
		glibtop_warn_io ("send");
 | 
			
		||||
	}
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int
 | 
			
		||||
do_read (int s, void *ptr, size_t total_size)
 | 
			
		||||
{
 | 
			
		||||
    int nread;
 | 
			
		||||
    char *tmp_ptr;
 | 
			
		||||
    size_t already_read = 0, remaining = total_size;
 | 
			
		||||
 | 
			
		||||
    while (already_read < total_size) {
 | 
			
		||||
	if (s)
 | 
			
		||||
	    nread = recv (s, ptr, remaining, 0);
 | 
			
		||||
	else
 | 
			
		||||
	    nread = read (0, ptr, remaining);
 | 
			
		||||
 | 
			
		||||
	if ((already_read == 0) && (nread == 0)) {
 | 
			
		||||
	    glibtop_warn ("pid %d received eof.", getpid ());
 | 
			
		||||
	    return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (nread <= 0) {
 | 
			
		||||
	    glibtop_warn_io ("recv");
 | 
			
		||||
	    return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	already_read += nread;
 | 
			
		||||
	remaining -= nread;
 | 
			
		||||
	/* (char *) ptr += nread; */
 | 
			
		||||
	tmp_ptr = ptr;
 | 
			
		||||
	tmp_ptr += nread;
 | 
			
		||||
	ptr = tmp_ptr;
 | 
			
		||||
 | 
			
		||||
#ifdef DEBUG
 | 
			
		||||
	fprintf (stderr, "READ (%d): %d - %d - %d\n",
 | 
			
		||||
		 nread, already_read, remaining, total_size);
 | 
			
		||||
#endif
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return already_read;
 | 
			
		||||
}
 | 
			
		||||
@@ -1,13 +0,0 @@
 | 
			
		||||
<?xml version="1.0"?> <!-- -*-xml-*- -->
 | 
			
		||||
<!DOCTYPE libgtop:backends SYSTEM 'libgtop-backends.dtd'>
 | 
			
		||||
<libgtop:Backends xmlns:libgtop="http://www.home-of-linux.org/libgtop/1.1">
 | 
			
		||||
 | 
			
		||||
  <libgtop:Backend>
 | 
			
		||||
    <libgtop:Name>glibtop-backend-server</libgtop:Name>
 | 
			
		||||
    <libgtop:Location>
 | 
			
		||||
      <libgtop:LibtoolName>libgtop_backend_server.la</libgtop:LibtoolName>
 | 
			
		||||
      <libgtop:ShlibName>libgtop_backend_server.so</libgtop:ShlibName>
 | 
			
		||||
    </libgtop:Location>
 | 
			
		||||
  </libgtop:Backend>
 | 
			
		||||
 | 
			
		||||
</libgtop:Backends>
 | 
			
		||||
@@ -1,305 +0,0 @@
 | 
			
		||||
#!/usr/bin/perl
 | 
			
		||||
 | 
			
		||||
require 'c_types.pl';
 | 
			
		||||
 | 
			
		||||
$[ = 1;			# set array base to 1
 | 
			
		||||
$, = ' ';		# set output field separator
 | 
			
		||||
$\ = "\n";		# set output record separator
 | 
			
		||||
 | 
			
		||||
$always_use_temp_storage = 1;
 | 
			
		||||
 | 
			
		||||
sub toupper {
 | 
			
		||||
    local($_) = @_;
 | 
			
		||||
    tr/a-z/A-Z/;
 | 
			
		||||
    return $_;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub tolower {
 | 
			
		||||
    local($_) = @_;
 | 
			
		||||
    tr/A-Z/a-z/;
 | 
			
		||||
    return $_;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
print '/* marshal.c */';
 | 
			
		||||
print "/* This is a generated file.  Please modify `marshal.pl' */";
 | 
			
		||||
print '';
 | 
			
		||||
 | 
			
		||||
print '#include <backend-server.h>';
 | 
			
		||||
print '';
 | 
			
		||||
print '#include <glibtop/sysdeps.h>';
 | 
			
		||||
print '#include <glibtop/union.h>';
 | 
			
		||||
print '';
 | 
			
		||||
print '#include "command.h"';
 | 
			
		||||
print '#include <glibtop/call-vector.h>';
 | 
			
		||||
print '';
 | 
			
		||||
 | 
			
		||||
$feature_count = 0;
 | 
			
		||||
 | 
			
		||||
while (<>) {
 | 
			
		||||
    chop;	# strip record separator
 | 
			
		||||
 | 
			
		||||
    if (/^[^#]/) {
 | 
			
		||||
	&output($_);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub output {
 | 
			
		||||
    local($line) = @_;
 | 
			
		||||
    @line_fields = split(/\|/, $line, 9999);
 | 
			
		||||
    $retval = $line_fields[1];
 | 
			
		||||
    $feature = $line_fields[2];
 | 
			
		||||
    $param_def = $line_fields[4];
 | 
			
		||||
 | 
			
		||||
    $orig = $feature;
 | 
			
		||||
    $feature =~ s/^@//;
 | 
			
		||||
    $space = $feature;
 | 
			
		||||
    $space =~ s/./ /g;
 | 
			
		||||
 | 
			
		||||
    $features{++$feature_count} = $orig;
 | 
			
		||||
    return if $orig =~ /^@/;
 | 
			
		||||
 | 
			
		||||
    $orig_retval = $retval;
 | 
			
		||||
    if ($retval eq 'retval') {
 | 
			
		||||
      $retval_param = '&retval';
 | 
			
		||||
      $call_prefix = '';
 | 
			
		||||
      $call_prefix_space = '';
 | 
			
		||||
      $prefix = 'retval = ';
 | 
			
		||||
      $prefix_space = '         ';
 | 
			
		||||
      $retval = 'int';
 | 
			
		||||
    }
 | 
			
		||||
    elsif ($retval !~ /^void$/) {
 | 
			
		||||
      $retval_param = 'NULL';
 | 
			
		||||
      $prefix = 'retval = ';
 | 
			
		||||
      $prefix_space = '         ';
 | 
			
		||||
      $call_prefix = 'retval = ';
 | 
			
		||||
      $call_prefix_space = '         ';
 | 
			
		||||
    }
 | 
			
		||||
    else {
 | 
			
		||||
      $retval_param = 'NULL';
 | 
			
		||||
      $call_prefix = '';
 | 
			
		||||
      $call_prefix_space = '';
 | 
			
		||||
      $prefix = '';
 | 
			
		||||
      $prefix_space = '';
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if ($retval =~ /^(array|pointer)\((.*)\)$/) {
 | 
			
		||||
      $retval = ($2 eq 'string') ? 'char **' : "$2 *";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    $need_temp_storage = $always_use_temp_storage;
 | 
			
		||||
    $local_var_init_code = "\t/* variable initialization */\n";
 | 
			
		||||
    $local_var_init_code .= "\t_LIBGTOP_SEND_len = 0;\n";
 | 
			
		||||
    $local_var_init_code .= "\t_LIBGTOP_DATA_len = 0;\n";
 | 
			
		||||
    $local_var_init_code .= "\t_LIBGTOP_SEND_offset = 0;\n";
 | 
			
		||||
    $local_var_init_code  .= "\t_LIBGTOP_SEND_ptr = ".
 | 
			
		||||
	  "(char *) _LIBGTOP_SEND_buf;\n";
 | 
			
		||||
    $marshal_code = "\t/* marshal start */\n";
 | 
			
		||||
    $marshal_code .= "\tmemset (_LIBGTOP_SEND_buf, 0, _LIBGTOP_SEND_len);\n";
 | 
			
		||||
    $first_param_name = '';
 | 
			
		||||
    $size_code = '';
 | 
			
		||||
 | 
			
		||||
    $call_param = '';
 | 
			
		||||
    $param_decl = '';
 | 
			
		||||
    $need_temp_len = 0;
 | 
			
		||||
    $nr_params = (@params = split(/:/, $param_def, 9999));
 | 
			
		||||
    for ($param = 1; $param <= $nr_params; $param++) {
 | 
			
		||||
      $list = $params[$param];
 | 
			
		||||
      $type = $params[$param];
 | 
			
		||||
      $type =~ s/\(.*//;
 | 
			
		||||
      $list =~ s/^.*\(//;
 | 
			
		||||
      $list =~ s/\)$//;
 | 
			
		||||
      $count = (@fields = split(/,/, $list, 9999));
 | 
			
		||||
      for ($field = 1; $field <= $count; $field++) {
 | 
			
		||||
	my $c_type = $typeinfo->{$type}->[1];
 | 
			
		||||
 | 
			
		||||
	if ($first_param_name eq '') {
 | 
			
		||||
	  $first_param_name = $fields[$field];
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if ($typeinfo->{$type}->[2]) {
 | 
			
		||||
	  $need_temp_storage = 1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if ($param_decl eq '') {
 | 
			
		||||
	  $param_decl = ",\n            " . $space . '    ';
 | 
			
		||||
	}
 | 
			
		||||
	else {
 | 
			
		||||
	  $param_decl = $param_decl . ', ';
 | 
			
		||||
	}
 | 
			
		||||
	$param_decl = $param_decl . $c_type . ' ' . $fields[$field];
 | 
			
		||||
	$call_param = $call_param . ', ' . $fields[$field];
 | 
			
		||||
 | 
			
		||||
	$size_code .= "\t_LIBGTOP_SEND_len += ";
 | 
			
		||||
	if ($typeinfo->{$type}->[2]) {
 | 
			
		||||
	  $size_code .= sprintf ("sizeof (size_t)");
 | 
			
		||||
	} else {
 | 
			
		||||
	  $size_code .= sprintf ("sizeof (%s)", $c_type);
 | 
			
		||||
	}
 | 
			
		||||
	$size_code .= ";\n";
 | 
			
		||||
 | 
			
		||||
	if (defined $sizeof_funcs->{$type}) {
 | 
			
		||||
	  $size_code .= "\t_LIBGTOP_DATA_len += ";
 | 
			
		||||
	  $size_code .= $sizeof_funcs->{$type}->($fields[$field]);
 | 
			
		||||
	  $size_code .= ";\n";
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	$marshal_code .= "\t_LIBGTOP_SEND_ptr = ".
 | 
			
		||||
	  "(char *) _LIBGTOP_SEND_buf + _LIBGTOP_SEND_offset;\n";
 | 
			
		||||
 | 
			
		||||
	if (defined $marshal_funcs->{$type}) {
 | 
			
		||||
	  $marshal_code .= $marshal_funcs->{$type}->($c_type, $fields[$field], "\t");
 | 
			
		||||
	} else {
 | 
			
		||||
	  $marshal_code .= sprintf ("\tmemcpy (_LIBGTOP_SEND_ptr, %s, %s);\n",
 | 
			
		||||
				    '&'.$fields[$field], "sizeof ($c_type)");
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	$marshal_code .= "\t_LIBGTOP_SEND_offset += ";
 | 
			
		||||
	if ($typeinfo->{$type}->[2]) {
 | 
			
		||||
	  $marshal_code .= sprintf ("sizeof (size_t)");
 | 
			
		||||
	} else {
 | 
			
		||||
	  $marshal_code .= sprintf ("sizeof (%s)", $c_type);
 | 
			
		||||
	}
 | 
			
		||||
	$marshal_code .= ";\n";
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    $local_var_code = "";
 | 
			
		||||
    $local_var_code .= "\tunsigned _LIBGTOP_SEND_offset, _LIBGTOP_SEND_len;\n";
 | 
			
		||||
    $local_var_code .= "\tunsigned _LIBGTOP_DATA_len;\n";
 | 
			
		||||
    if ($need_temp_len) {
 | 
			
		||||
      $local_var_code .= "\tunsigned _LIBGTOP_SEND_temp_len;\n";
 | 
			
		||||
    }
 | 
			
		||||
    $local_var_code .= "\tvoid *_LIBGTOP_SEND_buf, *_LIBGTOP_DATA_buf;\n";
 | 
			
		||||
    $local_var_code .= "\tchar *_LIBGTOP_SEND_ptr, *_LIBGTOP_DATA_ptr;\n";
 | 
			
		||||
    if ($retval !~ /^void$/) {
 | 
			
		||||
      $local_var_code .= sprintf ("\t%s retval = (%s) 0;\n",
 | 
			
		||||
				  $retval, $retval);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    $total_code = '';
 | 
			
		||||
 | 
			
		||||
    $send_buf_code = "\t/* send buffer */\n";
 | 
			
		||||
    $send_buf_code .= "\t_LIBGTOP_SEND_buf = ";
 | 
			
		||||
    if ($need_temp_storage) {
 | 
			
		||||
      $send_buf_code .= "g_malloc (_LIBGTOP_SEND_len+1)";
 | 
			
		||||
    } else {
 | 
			
		||||
      $send_buf_code .= '(void *) &'.$first_param_name;
 | 
			
		||||
    }
 | 
			
		||||
    $send_buf_code .= ";\n\n";
 | 
			
		||||
 | 
			
		||||
    $send_buf_code .= "\t/* data buffer */\n";
 | 
			
		||||
    $send_buf_code .= "\t_LIBGTOP_DATA_buf = ";
 | 
			
		||||
    if ($need_temp_storage) {
 | 
			
		||||
      $send_buf_code .= "g_malloc (_LIBGTOP_DATA_len+1)";
 | 
			
		||||
    } else {
 | 
			
		||||
      $send_buf_code .= 'NULL';
 | 
			
		||||
    }
 | 
			
		||||
    $send_buf_code .= ";\n";
 | 
			
		||||
    $send_buf_code .= "\t_LIBGTOP_DATA_ptr = _LIBGTOP_DATA_buf;\n";
 | 
			
		||||
 | 
			
		||||
    $call_code = '';
 | 
			
		||||
    $call_code .= sprintf ("\t%sglibtop_call_i (server, closure, GLIBTOP_CMND_%s,\n",
 | 
			
		||||
			   $call_prefix, &toupper($feature));
 | 
			
		||||
    $call_code .= sprintf ("\t\t\t%s%s, %s,\n", $call_prefix_space,
 | 
			
		||||
			   "_LIBGTOP_SEND_len", "_LIBGTOP_SEND_buf");
 | 
			
		||||
    $call_code .= sprintf ("\t\t\t%s%s, %s,\n", $call_prefix_space,
 | 
			
		||||
			   "_LIBGTOP_DATA_len", "_LIBGTOP_DATA_buf");
 | 
			
		||||
    if ($line_fields[3] eq '') {
 | 
			
		||||
      $call_code .= sprintf ("\t\t\t%s0, NULL,\n", $call_prefix_space);
 | 
			
		||||
    } elsif ($line_fields[3] eq  'array') {
 | 
			
		||||
      $call_code .= sprintf ("\t\t\t%ssizeof (glibtop_array), array,\n",
 | 
			
		||||
			     $call_prefix_space);
 | 
			
		||||
    } else {
 | 
			
		||||
      $call_code .= sprintf ("\t\t\t%ssizeof (glibtop_%s), buf,\n",
 | 
			
		||||
			     $call_prefix_space, $feature);
 | 
			
		||||
    }
 | 
			
		||||
    $call_code .= sprintf ("\t\t\t%s%s);\n", $call_prefix_space, $retval_param);
 | 
			
		||||
 | 
			
		||||
    if ($need_temp_storage) {
 | 
			
		||||
      $send_buf_free_code = "\tg_free (_LIBGTOP_SEND_buf);\n";
 | 
			
		||||
      $send_buf_free_code .= "\tg_free (_LIBGTOP_DATA_buf);\n";
 | 
			
		||||
    } else {
 | 
			
		||||
      $send_buf_free_code = "";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (!($size_code eq '')) {
 | 
			
		||||
      $size_code = sprintf (qq[\t/* send size */\n%s\n], $size_code);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if ($orig_retval eq 'pointer(string)') {
 | 
			
		||||
      $call_code .= "\n";
 | 
			
		||||
      $local_var_code .= "\tchar *_LIBGTOP_ARRAY_ptr, **ptrlist;\n";
 | 
			
		||||
      $local_var_code .= "\toff_t *_LIBGTOP_ARRAY_off_ptr;\n";
 | 
			
		||||
      $local_var_code .= "\tint i;\n";
 | 
			
		||||
      $call_code .= "\tptrlist = g_malloc (array->number+1 * sizeof (char *));\n";
 | 
			
		||||
      $call_code .= "\t_LIBGTOP_ARRAY_off_ptr = (off_t *) retval;\n";
 | 
			
		||||
      $call_code .= "\t_LIBGTOP_ARRAY_ptr = (char *) retval;\n";
 | 
			
		||||
      $call_code .= "\t_LIBGTOP_ARRAY_off_ptr++;\n\n";
 | 
			
		||||
      $call_code .= "\tfor (i = 0; i < array->number; i++)\n";
 | 
			
		||||
      $call_code .= "\t\tptrlist [i] = g_strdup (_LIBGTOP_ARRAY_ptr + *_LIBGTOP_ARRAY_off_ptr++);\n";
 | 
			
		||||
      $call_code .= "\tptrlist [array->number] = NULL;\n\n";
 | 
			
		||||
      $call_code .= "\tg_free (retval);\n";
 | 
			
		||||
      $call_code .= "\tretval = ptrlist;\n";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    $total_code .= sprintf ("%s%s\n%s\n%s\n%s\n",
 | 
			
		||||
			    $size_code, $send_buf_code, $marshal_code,
 | 
			
		||||
			    $call_code, $send_buf_free_code);
 | 
			
		||||
 | 
			
		||||
    $return_code = '';
 | 
			
		||||
    if ($retval !~ /^void$/) {
 | 
			
		||||
      $return_code .= "\treturn retval;\n";
 | 
			
		||||
    } else {
 | 
			
		||||
      $return_code .= "\treturn;\n";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    $total_code .= $return_code;
 | 
			
		||||
 | 
			
		||||
    $func_decl = 'static '.$retval."\n";
 | 
			
		||||
    if ($line_fields[3] eq '') {
 | 
			
		||||
      $func_decl .= sprintf ("_glibtop_get_%s_c (glibtop_server *server, void *closure%s)\n",
 | 
			
		||||
			     $feature, $param_decl);
 | 
			
		||||
    } elsif ($line_fields[3] eq 'array') {
 | 
			
		||||
      $func_decl .= sprintf ("_glibtop_get_%s_c (glibtop_server *server, void *closure, glibtop_array *array%s)\n",
 | 
			
		||||
			     $feature, $param_decl);
 | 
			
		||||
    } elsif ($line_fields[3] =~ /^array/) {
 | 
			
		||||
      $func_decl .= sprintf ("_glibtop_get_%s_c (glibtop_server *server, void *closure, glibtop_array *array, %s *buf%s)\n",
 | 
			
		||||
			     $feature, 'glibtop_'.$feature, $param_decl);
 | 
			
		||||
    } else {
 | 
			
		||||
      $func_decl .= sprintf ("_glibtop_get_%s_c (glibtop_server *server, void *closure, %s *buf%s)\n",
 | 
			
		||||
			     $feature, 'glibtop_'.$feature, $param_decl);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    $total_code = sprintf ("%s{\n%s\n%s\n%s\n%s}\n", $func_decl,
 | 
			
		||||
			   $local_var_code, $local_var_init_code,
 | 
			
		||||
			   $total_code);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    $total_code = sprintf ("#if GLIBTOP_SUID_%s\n\n%s\n#endif /* GLIBTOP_SUID_%s */\n\n",
 | 
			
		||||
			   &toupper($feature), $total_code,
 | 
			
		||||
			   &toupper($feature));
 | 
			
		||||
 | 
			
		||||
    print $total_code;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
$call_vector_code = '';
 | 
			
		||||
for ($nr = 1; $nr <= $feature_count; $nr++) {
 | 
			
		||||
  $feature = $features{$nr};
 | 
			
		||||
 | 
			
		||||
  $orig = $feature;
 | 
			
		||||
  $feature =~ s/^@//;
 | 
			
		||||
 | 
			
		||||
  if ($orig =~ /^@/) {
 | 
			
		||||
    $call_vector_code .= sprintf (qq[\tNULL,\n]);
 | 
			
		||||
  } else {
 | 
			
		||||
    $call_vector_code .= sprintf
 | 
			
		||||
      (qq[\#if GLIBTOP_SUID_%s\n\t_glibtop_get_%s_c,\n\#else\n\tNULL,\n\#endif\n],
 | 
			
		||||
       &toupper($feature), $feature);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
print 'glibtop_call_vector glibtop_backend_server_call_vector = {';
 | 
			
		||||
print $call_vector_code;
 | 
			
		||||
print '};';
 | 
			
		||||
print '';
 | 
			
		||||
 | 
			
		||||
@@ -1,46 +0,0 @@
 | 
			
		||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
 | 
			
		||||
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright (C) 1998-99 Martin Baulig
 | 
			
		||||
   This file is part of LibGTop 1.0.
 | 
			
		||||
 | 
			
		||||
   Contributed by Martin Baulig <martin@home-of-linux.org>, 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 <backend-server.h>
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
glibtop_read_i (backend_server_private *priv, size_t size, void *buf)
 | 
			
		||||
{
 | 
			
		||||
    int ret = 0;
 | 
			
		||||
 | 
			
		||||
#ifdef DEBUG
 | 
			
		||||
    fprintf (stderr, "LIBRARY: really reading %d bytes from %d.\n",
 | 
			
		||||
	     size, priv->input [0]);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    ret = read (priv->input [0], buf, size);
 | 
			
		||||
 | 
			
		||||
#ifdef DEBUG
 | 
			
		||||
    fprintf (stderr, "LIBRARY: read %d bytes.\n", ret);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    if (ret < 0)
 | 
			
		||||
	glibtop_error_io_r (priv->server, "read %d bytes", size);
 | 
			
		||||
}
 | 
			
		||||
@@ -1,58 +0,0 @@
 | 
			
		||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
 | 
			
		||||
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright (C) 1998-99 Martin Baulig
 | 
			
		||||
   This file is part of LibGTop 1.0.
 | 
			
		||||
 | 
			
		||||
   Contributed by Martin Baulig <martin@home-of-linux.org>, 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 <backend-server.h>
 | 
			
		||||
 | 
			
		||||
void *
 | 
			
		||||
glibtop_read_data_i (backend_server_private *priv)
 | 
			
		||||
{
 | 
			
		||||
    size_t size;
 | 
			
		||||
    void *ptr;
 | 
			
		||||
    int ret;
 | 
			
		||||
 | 
			
		||||
#ifdef DEBUG
 | 
			
		||||
    fprintf (stderr, "LIBRARY: reading %d data bytes.\n", sizeof (size_t));
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    ret = read (priv->input [0], (void *)&size, sizeof (size_t));
 | 
			
		||||
 | 
			
		||||
    if (ret < 0)
 | 
			
		||||
	glibtop_error_io_r (priv->server, "read data size");
 | 
			
		||||
 | 
			
		||||
#ifdef DEBUG
 | 
			
		||||
    fprintf (stderr, "LIBRARY: really reading %d data bytes (ret = %d).\n", size, ret);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    if (!size) return NULL;
 | 
			
		||||
 | 
			
		||||
    ptr = g_malloc (size);
 | 
			
		||||
 | 
			
		||||
    ret = read (priv->input [0], ptr, size);
 | 
			
		||||
 | 
			
		||||
    if (ret < 0)
 | 
			
		||||
	glibtop_error_io_r (priv->server, "read data %d bytes");
 | 
			
		||||
 | 
			
		||||
    return ptr;
 | 
			
		||||
}
 | 
			
		||||
@@ -1,189 +0,0 @@
 | 
			
		||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
 | 
			
		||||
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright (C) 1998-99 Martin Baulig
 | 
			
		||||
   This file is part of LibGTop 1.0.
 | 
			
		||||
 | 
			
		||||
   Contributed by Martin Baulig <martin@home-of-linux.org>, 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 "server.h"
 | 
			
		||||
 | 
			
		||||
static glibtop _glibtop_global_server;
 | 
			
		||||
glibtop *glibtop_global_server = &_glibtop_global_server;
 | 
			
		||||
 | 
			
		||||
#include <glibtop.h>
 | 
			
		||||
#include <glibtop/union.h>
 | 
			
		||||
#include <glibtop/sysdeps.h>
 | 
			
		||||
 | 
			
		||||
#include <sys/utsname.h>
 | 
			
		||||
 | 
			
		||||
const unsigned long glibtop_server_features =
 | 
			
		||||
GLIBTOP_SUID_CPU +
 | 
			
		||||
GLIBTOP_SUID_MEM +
 | 
			
		||||
GLIBTOP_SUID_SWAP +
 | 
			
		||||
GLIBTOP_SUID_UPTIME +
 | 
			
		||||
GLIBTOP_SUID_LOADAVG +
 | 
			
		||||
GLIBTOP_SUID_SHM_LIMITS +
 | 
			
		||||
GLIBTOP_SUID_MSG_LIMITS +
 | 
			
		||||
GLIBTOP_SUID_SEM_LIMITS +
 | 
			
		||||
GLIBTOP_SUID_PROCLIST +
 | 
			
		||||
GLIBTOP_SUID_PROC_STATE +
 | 
			
		||||
GLIBTOP_SUID_PROC_UID +
 | 
			
		||||
GLIBTOP_SUID_PROC_MEM +
 | 
			
		||||
GLIBTOP_SUID_PROC_TIME +
 | 
			
		||||
GLIBTOP_SUID_PROC_SIGNAL +
 | 
			
		||||
GLIBTOP_SUID_PROC_KERNEL +
 | 
			
		||||
GLIBTOP_SUID_PROC_SEGMENT +
 | 
			
		||||
GLIBTOP_SUID_PROC_ARGS +
 | 
			
		||||
GLIBTOP_SUID_PROC_MAP +
 | 
			
		||||
GLIBTOP_SUID_NETINFO +
 | 
			
		||||
GLIBTOP_SUID_NETLOAD +
 | 
			
		||||
GLIBTOP_SUID_INTERFACE_NAMES +
 | 
			
		||||
GLIBTOP_SUID_PPP;
 | 
			
		||||
 | 
			
		||||
#include <fcntl.h>
 | 
			
		||||
#include <locale.h>
 | 
			
		||||
 | 
			
		||||
int
 | 
			
		||||
main(int argc, char *argv[])
 | 
			
		||||
{
 | 
			
		||||
    struct utsname uts;
 | 
			
		||||
    int uid, euid, gid, egid;
 | 
			
		||||
    glibtop *server;
 | 
			
		||||
 | 
			
		||||
    /* !!! WE ARE ROOT HERE - CHANGE WITH CAUTION !!! */
 | 
			
		||||
 | 
			
		||||
    uid = getuid (); euid = geteuid ();
 | 
			
		||||
    gid = getgid (); egid = getegid ();
 | 
			
		||||
 | 
			
		||||
    if (uname (&uts) < 0) _exit (1);
 | 
			
		||||
 | 
			
		||||
    if (strcmp (uts.sysname, LIBGTOP_COMPILE_SYSTEM) ||
 | 
			
		||||
	strcmp (uts.release, LIBGTOP_COMPILE_RELEASE) ||
 | 
			
		||||
	strcmp (uts.machine, LIBGTOP_COMPILE_MACHINE)) {
 | 
			
		||||
	fprintf (stderr, "Can only run on %s %s %s\n",
 | 
			
		||||
		 LIBGTOP_COMPILE_SYSTEM,
 | 
			
		||||
		 LIBGTOP_COMPILE_RELEASE,
 | 
			
		||||
		 LIBGTOP_COMPILE_MACHINE);
 | 
			
		||||
	_exit (1);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    server = glibtop_global_server;
 | 
			
		||||
 | 
			
		||||
    if (!server->_priv)
 | 
			
		||||
	server->_priv = g_malloc (sizeof (glibtop_server_private));
 | 
			
		||||
 | 
			
		||||
    glibtop_init_p (server, 0, 0);
 | 
			
		||||
 | 
			
		||||
    if (setreuid (euid, uid)) _exit (1);
 | 
			
		||||
 | 
			
		||||
    if (setregid (egid, gid)) _exit (1);
 | 
			
		||||
 | 
			
		||||
    /* !!! END OF SUID ROOT PART !!! */
 | 
			
		||||
 | 
			
		||||
    handle_slave_connection (0, 0);
 | 
			
		||||
 | 
			
		||||
    _exit (0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
handle_slave_connection (int input, int output)
 | 
			
		||||
{
 | 
			
		||||
    glibtop_command _cmnd, *cmnd = &_cmnd;
 | 
			
		||||
    glibtop *server = glibtop_global_server;
 | 
			
		||||
 | 
			
		||||
    /* glibtop_send_version_i (glibtop_global_server, output); */
 | 
			
		||||
 | 
			
		||||
    while (do_read (input, cmnd, sizeof (glibtop_command))) {
 | 
			
		||||
	size_t recv_size = 0, send_size = 0, recv_data_size = 0;
 | 
			
		||||
	void *recv_ptr = NULL, *recv_data_ptr = NULL, *data_ptr = NULL;
 | 
			
		||||
	char parameter [BUFSIZ];
 | 
			
		||||
	int retval, func_retval;
 | 
			
		||||
	glibtop_response resp;
 | 
			
		||||
 | 
			
		||||
#ifdef DEBUG
 | 
			
		||||
	fprintf (stderr, "Slave %d received command "
 | 
			
		||||
		 "%ld from client.\n", getpid (), (long) cmnd->command);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	if (cmnd->send_size >= BUFSIZ)
 | 
			
		||||
	    glibtop_error ("Client sent %d bytes, but buffer is %d",
 | 
			
		||||
			   cmnd->send_size, BUFSIZ);
 | 
			
		||||
	else if (cmnd->param_size >= BUFSIZ)
 | 
			
		||||
	    glibtop_error ("Client sent %d bytes, but buffer is %d",
 | 
			
		||||
			   cmnd->param_size, BUFSIZ);
 | 
			
		||||
 | 
			
		||||
	memset (parameter, 0, sizeof (parameter));
 | 
			
		||||
 | 
			
		||||
	if (cmnd->send_size) {
 | 
			
		||||
#ifdef DEBUG
 | 
			
		||||
	    fprintf (stderr, "Client has %d bytes of data.\n",
 | 
			
		||||
		     cmnd->send_size);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	    send_size = cmnd->send_size;
 | 
			
		||||
	    do_read (input, parameter, send_size);
 | 
			
		||||
	} else if (cmnd->param_size) {
 | 
			
		||||
#ifdef DEBUG
 | 
			
		||||
	    fprintf (stderr, "Client has %d bytes of parameter data.\n",
 | 
			
		||||
		     cmnd->param_size);
 | 
			
		||||
#endif
 | 
			
		||||
	    send_size = cmnd->param_size;
 | 
			
		||||
	    memcpy (parameter, cmnd->parameter, send_size);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (cmnd->data_size) {
 | 
			
		||||
#ifdef DEBUG
 | 
			
		||||
	    fprintf (stderr, "CLIENT has %d bytes of extra data for us.\n",
 | 
			
		||||
		     cmnd->data_size);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	    data_ptr = g_malloc (cmnd->data_size);
 | 
			
		||||
	    do_read (input, data_ptr, cmnd->data_size);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	retval = glibtop_demarshal_func_i (server, NULL,
 | 
			
		||||
					   cmnd->command,
 | 
			
		||||
					   parameter, send_size,
 | 
			
		||||
					   data_ptr, cmnd->data_size,
 | 
			
		||||
					   &recv_ptr, &recv_size,
 | 
			
		||||
					   &recv_data_ptr, &recv_data_size,
 | 
			
		||||
					   &func_retval);
 | 
			
		||||
 | 
			
		||||
#ifdef DEBUG
 | 
			
		||||
	fprintf (stderr, "Retval %d / %d - %p - %d\n",
 | 
			
		||||
		 retval, func_retval, recv_ptr, recv_size);
 | 
			
		||||
 | 
			
		||||
	if (recv_data_size) {
 | 
			
		||||
	    fprintf (stderr, "Returning %d bytes of data from %p.\n",
 | 
			
		||||
		     recv_data_size, recv_data_ptr);
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	memset (&resp, 0, sizeof (glibtop_response));
 | 
			
		||||
 | 
			
		||||
	resp.retval = retval;
 | 
			
		||||
	resp.glibtop_errno = func_retval;
 | 
			
		||||
	resp.recv_size = recv_size;
 | 
			
		||||
	resp.data_size = recv_data_size;
 | 
			
		||||
 | 
			
		||||
	do_output (output, &resp, recv_ptr, recv_data_ptr);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,83 +0,0 @@
 | 
			
		||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
 | 
			
		||||
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright (C) 1998-99 Martin Baulig
 | 
			
		||||
   This file is part of LibGTop 1.0.
 | 
			
		||||
 | 
			
		||||
   Contributed by Martin Baulig <martin@home-of-linux.org>, 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.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#ifndef __GLIBTOP_DAEMON_H__
 | 
			
		||||
#define __GLIBTOP_DAEMON_H__
 | 
			
		||||
 | 
			
		||||
#include <glibtop.h>
 | 
			
		||||
 | 
			
		||||
#include <glibtop/open.h>
 | 
			
		||||
#include <glibtop/union.h>
 | 
			
		||||
#include <glibtop/parameter.h>
 | 
			
		||||
 | 
			
		||||
#include <fcntl.h>
 | 
			
		||||
#include <sys/wait.h>
 | 
			
		||||
#include <sys/socket.h>
 | 
			
		||||
#include <syslog.h>
 | 
			
		||||
 | 
			
		||||
#include <glibtop/backend.h>
 | 
			
		||||
#include <glibtop-backend-private.h>
 | 
			
		||||
 | 
			
		||||
#include "command.h"
 | 
			
		||||
 | 
			
		||||
G_BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
/* Some don't have LOG_PERROR */
 | 
			
		||||
#ifndef LOG_PERROR
 | 
			
		||||
#define LOG_PERROR 0
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define LIBGTOP_VERSION_STRING "Libgtop %s server version %s (%u,%u,%u,%u)."
 | 
			
		||||
 | 
			
		||||
#if defined(HAVE_GETDTABLESIZE)
 | 
			
		||||
#define GET_MAX_FDS() getdtablesize()
 | 
			
		||||
#else
 | 
			
		||||
/* Fallthrough case - please add other #elif cases above
 | 
			
		||||
   for different OS's as necessary */
 | 
			
		||||
#define GET_MAX_FDS() 256
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
do_output (int s, glibtop_response *resp, const void *recv_ptr,
 | 
			
		||||
	   const void *data_ptr);
 | 
			
		||||
 | 
			
		||||
int
 | 
			
		||||
do_read (int s, void *ptr, size_t total_size);
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
handle_slave_connection (int input, int output);
 | 
			
		||||
 | 
			
		||||
int
 | 
			
		||||
glibtop_demarshal_func_i (glibtop *server, glibtop_backend *backend, unsigned command, const void *send_ptr, size_t send_size, void *data_ptr, size_t data_size, void **recv_buf_ptr, size_t *recv_size_ptr, void **recv_data_ptr, size_t *recv_data_size_ptr, int *retval_ptr);
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
glibtop_send_version_i (glibtop *server, int fd);
 | 
			
		||||
 | 
			
		||||
extern int enable_debug;
 | 
			
		||||
extern int verbose_output;
 | 
			
		||||
 | 
			
		||||
G_END_DECLS
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
@@ -1,62 +0,0 @@
 | 
			
		||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
 | 
			
		||||
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright (C) 1998-99 Martin Baulig
 | 
			
		||||
   This file is part of LibGTop 1.0.
 | 
			
		||||
 | 
			
		||||
   Contributed by Martin Baulig <martin@home-of-linux.org>, 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 "server.h"
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
glibtop_send_version_i (glibtop *server, int fd)
 | 
			
		||||
{
 | 
			
		||||
    char buffer [BUFSIZ];
 | 
			
		||||
    size_t size;
 | 
			
		||||
 | 
			
		||||
    sprintf (buffer, LIBGTOP_VERSION_STRING,
 | 
			
		||||
	     LIBGTOP_VERSION, LIBGTOP_SERVER_VERSION,
 | 
			
		||||
	     sizeof (glibtop_command),
 | 
			
		||||
	     sizeof (glibtop_response),
 | 
			
		||||
	     sizeof (glibtop_union),
 | 
			
		||||
	     sizeof (glibtop_sysdeps));
 | 
			
		||||
 | 
			
		||||
    size = strlen (buffer) + 1;
 | 
			
		||||
 | 
			
		||||
#ifdef DEBUG
 | 
			
		||||
    fprintf (stderr, "SERVER ID: |%s|\n", buffer);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    if (fd == 0) {
 | 
			
		||||
	if (write (1, (const void *) &size, sizeof (size)) < 0)
 | 
			
		||||
	    glibtop_warn_io_r (server, "write");
 | 
			
		||||
    } else {
 | 
			
		||||
	if (send (fd, (const void *) &size, sizeof (size), 0) < 0)
 | 
			
		||||
	    glibtop_warn_io_r (server, "send");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (fd == 0) {
 | 
			
		||||
	if (write (1, (const void *) buffer, size) < 0)
 | 
			
		||||
	    glibtop_warn_io_r (server, "write");
 | 
			
		||||
    } else {
 | 
			
		||||
	if (send (fd, (const void *) buffer, size, 0) < 0)
 | 
			
		||||
	    glibtop_warn_io_r (server, "send");
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,43 +0,0 @@
 | 
			
		||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
 | 
			
		||||
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright (C) 1998-99 Martin Baulig
 | 
			
		||||
   This file is part of LibGTop 1.0.
 | 
			
		||||
 | 
			
		||||
   Contributed by Martin Baulig <martin@home-of-linux.org>, 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 <backend-server.h>
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
glibtop_write_i (backend_server_private *priv, size_t size, const void *buf)
 | 
			
		||||
{
 | 
			
		||||
    int ret;
 | 
			
		||||
 | 
			
		||||
    if (size == 0) return;
 | 
			
		||||
 | 
			
		||||
#ifdef DEBUG
 | 
			
		||||
    fprintf (stderr, "LIBRARY: really writing %d bytes.\n", size);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    ret = write (priv->output [1], buf, size);
 | 
			
		||||
 | 
			
		||||
    if (ret < 0)
 | 
			
		||||
	glibtop_error_io_r (priv->server, "write %d bytes", size);
 | 
			
		||||
}
 | 
			
		||||
@@ -1,7 +0,0 @@
 | 
			
		||||
.deps
 | 
			
		||||
.libs
 | 
			
		||||
Makefile
 | 
			
		||||
Makefile.in
 | 
			
		||||
*.lo
 | 
			
		||||
*.la
 | 
			
		||||
marshal.c
 | 
			
		||||
@@ -1,68 +0,0 @@
 | 
			
		||||
2003-10-20  Bastien Nocera  <hadess@hadess.net>
 | 
			
		||||
 | 
			
		||||
	* backend-sysdeps.c: (_open_sysdeps): s/u_int64_t/guint64/
 | 
			
		||||
 | 
			
		||||
2003-10-20  Bastien Nocera  <hadess@hadess.net>
 | 
			
		||||
 | 
			
		||||
	* backend-sysdeps.h: fixed compilation
 | 
			
		||||
 | 
			
		||||
2000-11-26  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* glibtop-backend-private.h: Removed.
 | 
			
		||||
 | 
			
		||||
	* backend-sysdeps.h: New files.
 | 
			
		||||
 | 
			
		||||
	* backend-sysdeps.c (_open_sysdeps): Don't overwrite
 | 
			
		||||
	`backend->_priv'.
 | 
			
		||||
 | 
			
		||||
2000-11-22  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* Makefile.am: Link libgtop_backend_sysdeps.la against
 | 
			
		||||
	$(top_builddir)/sysdeps/$(sysdeps_dir)/libgtop_sysdeps.la and
 | 
			
		||||
	$(top_builddir)/lib/libgtop_server.la.
 | 
			
		||||
 | 
			
		||||
	* libgtop-sysdeps.backend: Removed the ExtraLibs section.
 | 
			
		||||
 | 
			
		||||
2000-02-22  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* backend-sysdeps.c (LibGTopBackendInfo): Call this
 | 
			
		||||
	`LibGTopBackendInfo_Sysdeps' when we don't use gmodule.
 | 
			
		||||
 | 
			
		||||
2000-02-22  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* Makefile.am: Only install the libs in $(LIBGTOP_BACKEND_DIR)
 | 
			
		||||
	when we LIBGTOP_USE_GMODULE and in $(libdir) otherwise.
 | 
			
		||||
 | 
			
		||||
2000-01-22  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* libgtop-sysdeps.backend: Added "ExtraLibs" section to
 | 
			
		||||
	load `-lgtop_sysdeps'.
 | 
			
		||||
 | 
			
		||||
2000-01-12  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* Makefile.am: Install everything in $(LIBGTOP_BACKEND_DIR).
 | 
			
		||||
 | 
			
		||||
	* libgtop-sysdeps.backend: New file.
 | 
			
		||||
 | 
			
		||||
	* backend-sysdeps.c (glibtop_backend_sysdeps): Renamed to
 | 
			
		||||
	`LibGTopBackendInfo'.
 | 
			
		||||
 | 
			
		||||
2000-01-12  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* marshal.pl: Create the `_glibtop_init_hook_s' as well.
 | 
			
		||||
 | 
			
		||||
	* marshal.pl: Don't create code for things which are now
 | 
			
		||||
	in the new `glibtop-backend-common' backend.
 | 
			
		||||
 | 
			
		||||
2000-01-02  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* marshal.pl: New file. Automatically creates `marshal.c'.
 | 
			
		||||
	* call-vector.c: Removed.
 | 
			
		||||
 | 
			
		||||
2000-01-01  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	Initial version of the "glibtop-backend-sysdeps" backend.
 | 
			
		||||
 | 
			
		||||
	* backend-sysdeps.c: New file.
 | 
			
		||||
	* glibtop-backend-private.h: New file.
 | 
			
		||||
 | 
			
		||||
@@ -1,47 +0,0 @@
 | 
			
		||||
LINK		= $(LIBTOOL) --mode=link $(CC) $(CFLAGS) $(LDFLAGS) -o $@
 | 
			
		||||
 | 
			
		||||
INCLUDES	= @INCLUDES@
 | 
			
		||||
 | 
			
		||||
backenddir	= @LIBGTOP_BACKEND_DIR@
 | 
			
		||||
 | 
			
		||||
if LIBGTOP_USE_GMODULE
 | 
			
		||||
backendlibdir	= $(backenddir)
 | 
			
		||||
else
 | 
			
		||||
backendlibdir	= $(libdir)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
dynamic_ldflags	= @libgtop_dynamic_ldflags@
 | 
			
		||||
 | 
			
		||||
backend_DATA = \
 | 
			
		||||
	libgtop-sysdeps.backend
 | 
			
		||||
 | 
			
		||||
noinst_HEADERS = \
 | 
			
		||||
	backend-sysdeps.h
 | 
			
		||||
 | 
			
		||||
backendlib_LTLIBRARIES = \
 | 
			
		||||
	libgtop_backend_sysdeps.la
 | 
			
		||||
 | 
			
		||||
libgtop_backend_sysdeps_la_SOURCES = \
 | 
			
		||||
	backend-sysdeps.c		\
 | 
			
		||||
	marshal.c
 | 
			
		||||
 | 
			
		||||
libgtop_backend_sysdeps_la_LDFLAGS = \
 | 
			
		||||
	$(LT_VERSION_INFO) $(dynamic_ldflags)
 | 
			
		||||
 | 
			
		||||
libgtop_backend_sysdeps_la_LIBADD = \
 | 
			
		||||
	$(top_builddir)/sysdeps/$(sysdeps_dir)/libgtop_sysdeps.la
 | 
			
		||||
	$(top_builddir)/lib/libgtop_server.la
 | 
			
		||||
 | 
			
		||||
BUILT_SOURCES = \
 | 
			
		||||
	marshal.c
 | 
			
		||||
 | 
			
		||||
EXTRA_DIST = \
 | 
			
		||||
	marshal.pl	\
 | 
			
		||||
	libgtop-sysdeps.backend
 | 
			
		||||
 | 
			
		||||
CLEANFILES = $(BUILT_SOURCES)
 | 
			
		||||
 | 
			
		||||
marshal.c: marshal.pl $(top_builddir)/config.h $(top_srcdir)/features.def $(top_srcdir)/scripts/c_types.pl
 | 
			
		||||
	$(PERL) -I $(top_srcdir)/scripts $(srcdir)/marshal.pl < $(top_srcdir)/features.def > tmp-t
 | 
			
		||||
	mv tmp-t marshal.c
 | 
			
		||||
 | 
			
		||||
@@ -1,76 +0,0 @@
 | 
			
		||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
 | 
			
		||||
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright (C) 1998-99 Martin Baulig
 | 
			
		||||
   This file is part of LibGTop 1.0.
 | 
			
		||||
 | 
			
		||||
   Contributed by Martin Baulig <martin@home-of-linux.org>, 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 <backend-sysdeps.h>
 | 
			
		||||
 | 
			
		||||
static int
 | 
			
		||||
_open_sysdeps (glibtop_server *, glibtop_backend *, guint64, const char **);
 | 
			
		||||
 | 
			
		||||
static int
 | 
			
		||||
_close_sysdeps (glibtop_server *, glibtop_backend *, void *);
 | 
			
		||||
 | 
			
		||||
extern glibtop_call_vector glibtop_backend_sysdeps_call_vector;
 | 
			
		||||
 | 
			
		||||
#ifdef LIBGTOP_USE_GMODULE
 | 
			
		||||
glibtop_backend_info LibGTopBackendInfo = {
 | 
			
		||||
    "glibtop-backend-sysdeps", _open_sysdeps, _close_sysdeps,
 | 
			
		||||
    &glibtop_backend_sysdeps_call_vector
 | 
			
		||||
};
 | 
			
		||||
#else
 | 
			
		||||
glibtop_backend_info LibGTopBackendInfo_Sysdeps = {
 | 
			
		||||
    "glibtop-backend-sysdeps", _open_sysdeps, _close_sysdeps,
 | 
			
		||||
    &glibtop_backend_sysdeps_call_vector
 | 
			
		||||
};
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
static int
 | 
			
		||||
_open_sysdeps (glibtop_server *server, glibtop_backend *backend,
 | 
			
		||||
	       guint64 features, const char **backend_args)
 | 
			
		||||
{
 | 
			
		||||
    glibtop_init_func_t *init_fkt;
 | 
			
		||||
 | 
			
		||||
    /* Do the initialization, but only if not already initialized. */
 | 
			
		||||
 | 
			
		||||
    if ((server->flags & _GLIBTOP_INIT_STATE_SYSDEPS) == 0) {
 | 
			
		||||
	glibtop_open_s (server, "glibtop", features, 0);
 | 
			
		||||
 | 
			
		||||
	for (init_fkt = _glibtop_init_hook_s; *init_fkt; init_fkt++)
 | 
			
		||||
	    (*init_fkt) (server);
 | 
			
		||||
 | 
			
		||||
	server->info->sysdeps.pointer_size = sizeof (void*)*8;
 | 
			
		||||
 | 
			
		||||
	server->flags |= _GLIBTOP_INIT_STATE_SYSDEPS;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int
 | 
			
		||||
_close_sysdeps (glibtop_server *server, glibtop_backend *backend,
 | 
			
		||||
		void *closure)
 | 
			
		||||
{
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -1,36 +0,0 @@
 | 
			
		||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */
 | 
			
		||||
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright (C) 1998-99 Martin Baulig
 | 
			
		||||
   This file is part of LibGTop 1.0.
 | 
			
		||||
 | 
			
		||||
   Contributed by Martin Baulig <martin@home-of-linux.org>, 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.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#ifndef __GLIBTOP_BACKEND_SYSDEPS_H__
 | 
			
		||||
#define __GLIBTOP_BACKEND_SYSDEPS_H__
 | 
			
		||||
 | 
			
		||||
#include <glibtop.h>
 | 
			
		||||
#include <glibtop/global.h>
 | 
			
		||||
 | 
			
		||||
#include <glibtop/open.h>
 | 
			
		||||
#include <glibtop/glibtop-backend.h>
 | 
			
		||||
#include <glibtop/glibtop-backend-info.h>
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
@@ -1,13 +0,0 @@
 | 
			
		||||
<?xml version="1.0"?> <!-- -*-xml-*- -->
 | 
			
		||||
<!DOCTYPE libgtop:backends SYSTEM 'libgtop-backends.dtd'>
 | 
			
		||||
<libgtop:Backends xmlns:libgtop="http://www.home-of-linux.org/libgtop/1.1">
 | 
			
		||||
 | 
			
		||||
  <libgtop:Backend>
 | 
			
		||||
    <libgtop:Name>glibtop-backend-sysdeps</libgtop:Name>
 | 
			
		||||
    <libgtop:Location>
 | 
			
		||||
      <libgtop:LibtoolName>libgtop_backend_sysdeps.la</libgtop:LibtoolName>
 | 
			
		||||
      <libgtop:ShlibName>libgtop_backend_sysdeps.so</libgtop:ShlibName>
 | 
			
		||||
    </libgtop:Location>
 | 
			
		||||
  </libgtop:Backend>
 | 
			
		||||
 | 
			
		||||
</libgtop:Backends>
 | 
			
		||||
@@ -1,195 +0,0 @@
 | 
			
		||||
#!/usr/bin/perl
 | 
			
		||||
 | 
			
		||||
require 'c_types.pl';
 | 
			
		||||
 | 
			
		||||
$[ = 1;			# set array base to 1
 | 
			
		||||
$, = ' ';		# set output field separator
 | 
			
		||||
$\ = "\n";		# set output record separator
 | 
			
		||||
 | 
			
		||||
$always_use_temp_storage = 1;
 | 
			
		||||
 | 
			
		||||
sub toupper {
 | 
			
		||||
    local($_) = @_;
 | 
			
		||||
    tr/a-z/A-Z/;
 | 
			
		||||
    return $_;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub tolower {
 | 
			
		||||
    local($_) = @_;
 | 
			
		||||
    tr/A-Z/a-z/;
 | 
			
		||||
    return $_;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
print '/* marshal.c */';
 | 
			
		||||
print "/* This is a generated file.  Please modify `marshal.pl' */";
 | 
			
		||||
print '';
 | 
			
		||||
 | 
			
		||||
print '#include <backend-sysdeps.h>';
 | 
			
		||||
print '';
 | 
			
		||||
print '#include <glibtop/sysdeps.h>';
 | 
			
		||||
print '#include <glibtop/union.h>';
 | 
			
		||||
print '';
 | 
			
		||||
print '#include <glibtop/call-vector.h>';
 | 
			
		||||
print '';
 | 
			
		||||
 | 
			
		||||
$feature_count = 0;
 | 
			
		||||
 | 
			
		||||
while (<>) {
 | 
			
		||||
    chop;	# strip record separator
 | 
			
		||||
 | 
			
		||||
    if (/^[^#]/) {
 | 
			
		||||
	&output($_);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub output {
 | 
			
		||||
    local($line) = @_;
 | 
			
		||||
    @line_fields = split(/\|/, $line, 9999);
 | 
			
		||||
    $retval = $line_fields[1];
 | 
			
		||||
    $feature = $line_fields[2];
 | 
			
		||||
    $param_def = $line_fields[4];
 | 
			
		||||
 | 
			
		||||
    $orig = $feature;
 | 
			
		||||
    $feature =~ s/^@//;
 | 
			
		||||
    $space = $feature;
 | 
			
		||||
    $space =~ s/./ /g;
 | 
			
		||||
 | 
			
		||||
    $features{++$feature_count} = $orig;
 | 
			
		||||
 | 
			
		||||
    return if $orig =~ /^@/;
 | 
			
		||||
 | 
			
		||||
    if ($retval eq 'retval') {
 | 
			
		||||
      $retval_param = '&retval';
 | 
			
		||||
      $call_prefix = '';
 | 
			
		||||
      $call_prefix_space = '';
 | 
			
		||||
      $prefix = 'retval = ';
 | 
			
		||||
      $prefix_space = '         ';
 | 
			
		||||
      $retval = 'int';
 | 
			
		||||
    }
 | 
			
		||||
    elsif ($retval !~ /^void$/) {
 | 
			
		||||
      $retval_param = 'NULL';
 | 
			
		||||
      $prefix = 'retval = ';
 | 
			
		||||
      $prefix_space = '         ';
 | 
			
		||||
      $call_prefix = 'retval = ';
 | 
			
		||||
      $call_prefix_space = '         ';
 | 
			
		||||
    }
 | 
			
		||||
    else {
 | 
			
		||||
      $retval_param = 'NULL';
 | 
			
		||||
      $call_prefix = '';
 | 
			
		||||
      $call_prefix_space = '';
 | 
			
		||||
      $prefix = '';
 | 
			
		||||
      $prefix_space = '';
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if ($retval =~ /^(array|pointer)\((.*)\)$/) {
 | 
			
		||||
      $retval = ($2 eq 'string') ? 'char **' : "$2 *";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    $need_temp_storage = $always_use_temp_storage;
 | 
			
		||||
    $first_param_name = '';
 | 
			
		||||
 | 
			
		||||
    $call_param = '';
 | 
			
		||||
    $param_decl = '';
 | 
			
		||||
    $need_temp_len = 0;
 | 
			
		||||
    $nr_params = (@params = split(/:/, $param_def, 9999));
 | 
			
		||||
    for ($param = 1; $param <= $nr_params; $param++) {
 | 
			
		||||
      $list = $params[$param];
 | 
			
		||||
      $type = $params[$param];
 | 
			
		||||
      $type =~ s/\(.*//;
 | 
			
		||||
      $list =~ s/^.*\(//;
 | 
			
		||||
      $list =~ s/\)$//;
 | 
			
		||||
      $count = (@fields = split(/,/, $list, 9999));
 | 
			
		||||
      for ($field = 1; $field <= $count; $field++) {
 | 
			
		||||
	my $c_type = $typeinfo->{$type}->[1];
 | 
			
		||||
 | 
			
		||||
	if ($first_param_name eq '') {
 | 
			
		||||
	  $first_param_name = $fields[$field];
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if ($typeinfo->{$type}->[2]) {
 | 
			
		||||
	  $need_temp_storage = 1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if ($param_decl eq '') {
 | 
			
		||||
	  $param_decl = ",\n             " . $space . '    ';
 | 
			
		||||
	}
 | 
			
		||||
	else {
 | 
			
		||||
	  $param_decl = $param_decl . ', ';
 | 
			
		||||
	}
 | 
			
		||||
	$param_decl = $param_decl . $c_type . ' ' . $fields[$field];
 | 
			
		||||
	$call_param = $call_param . ', ' . $fields[$field];
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if ($line_fields[3] eq '') {
 | 
			
		||||
      $total_code = sprintf
 | 
			
		||||
	("\treturn glibtop_get_%s_s (server%s);\n", $feature, $call_param);
 | 
			
		||||
    } elsif ($line_fields[3] eq 'array') {
 | 
			
		||||
      $total_code = sprintf
 | 
			
		||||
	("\treturn glibtop_get_%s_s (server, array%s);\n", $feature, $call_param);
 | 
			
		||||
    } elsif ($line_fields[3] =~ /^array/) {
 | 
			
		||||
      $total_code = sprintf
 | 
			
		||||
	("\treturn glibtop_get_%s_s (server, array, buf%s);\n", $feature, $call_param);
 | 
			
		||||
    } else {
 | 
			
		||||
      $total_code = sprintf
 | 
			
		||||
	("\treturn glibtop_get_%s_s (server, buf%s);\n", $feature, $call_param);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    $func_decl = 'static '.$retval."\n";
 | 
			
		||||
    if ($line_fields[3] eq '') {
 | 
			
		||||
      $func_decl .= sprintf ("_glibtop_get_%s_c (glibtop_server *server, void *closure%s)\n",
 | 
			
		||||
			     $feature, $param_decl);
 | 
			
		||||
    } elsif ($line_fields[3] eq 'array') {
 | 
			
		||||
      $func_decl .= sprintf ("_glibtop_get_%s_c (glibtop_server *server, void *closure, glibtop_array *array%s)\n",
 | 
			
		||||
			     $feature, $param_decl);
 | 
			
		||||
    } elsif ($line_fields[3] =~ /^array/) {
 | 
			
		||||
      $func_decl .= sprintf ("_glibtop_get_%s_c (glibtop_server *server, void *closure, glibtop_array *array, %s *buf%s)\n",
 | 
			
		||||
			     $feature, 'glibtop_'.$feature, $param_decl);
 | 
			
		||||
    } else {
 | 
			
		||||
      $func_decl .= sprintf ("_glibtop_get_%s_c (glibtop_server *server, void *closure, %s *buf%s)\n",
 | 
			
		||||
			     $feature, 'glibtop_'.$feature, $param_decl);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    $total_code = sprintf ("%s{\n%s\n%s}\n", $func_decl, $total_code);
 | 
			
		||||
 | 
			
		||||
    $total_code = sprintf ("#if (!GLIBTOP_SUID_%s)\n\n%s\n#endif /* not GLIBTOP_SUID_%s */\n\n",
 | 
			
		||||
			   &toupper($feature), $total_code,
 | 
			
		||||
			   &toupper($feature));
 | 
			
		||||
 | 
			
		||||
    print $total_code;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
$init_hook_code = '';
 | 
			
		||||
$call_vector_code = '';
 | 
			
		||||
for ($nr = 1; $nr <= $feature_count; $nr++) {
 | 
			
		||||
  $feature = $features{$nr};
 | 
			
		||||
 | 
			
		||||
  if ($feature =~ /^@/) {
 | 
			
		||||
    $call_vector_code .= sprintf (qq[\tNULL,\n]);
 | 
			
		||||
  } else {
 | 
			
		||||
    $call_vector_code .= sprintf
 | 
			
		||||
      (qq[\#if GLIBTOP_SUID_%s\n\tNULL,\n\#else\n\t_glibtop_get_%s_c,\n\#endif\n],
 | 
			
		||||
       &toupper($feature), $feature);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (!($feature =~ /^@/)) {
 | 
			
		||||
    $init_hook_code .= sprintf
 | 
			
		||||
      (qq[\#if !GLIBTOP_SUID_%s\n\tglibtop_init_%s_s,\n\#endif\n],
 | 
			
		||||
       &toupper($feature), $feature);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
$init_hook_code .= sprintf (qq[\tNULL\n]);
 | 
			
		||||
 | 
			
		||||
chop $init_hook_code;
 | 
			
		||||
chop $call_vector_code;
 | 
			
		||||
 | 
			
		||||
print 'glibtop_call_vector glibtop_backend_sysdeps_call_vector = {';
 | 
			
		||||
print $call_vector_code;
 | 
			
		||||
print '};';
 | 
			
		||||
print '';
 | 
			
		||||
 | 
			
		||||
print 'glibtop_init_func_t _glibtop_init_hook_s [] = {';
 | 
			
		||||
print $init_hook_code;
 | 
			
		||||
print '};';
 | 
			
		||||
print '';
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										55
									
								
								configure.in
									
									
									
									
									
								
							
							
						
						
									
										55
									
								
								configure.in
									
									
									
									
									
								
							@@ -7,13 +7,13 @@ AM_CONFIG_HEADER(config.h)
 | 
			
		||||
AC_CANONICAL_SYSTEM
 | 
			
		||||
 | 
			
		||||
LIBGTOP_MAJOR_VERSION=2
 | 
			
		||||
LIBGTOP_MINOR_VERSION=10
 | 
			
		||||
LIBGTOP_MICRO_VERSION=2
 | 
			
		||||
LIBGTOP_MINOR_VERSION=11
 | 
			
		||||
LIBGTOP_MICRO_VERSION=90
 | 
			
		||||
LIBGTOP_VERSION=$LIBGTOP_MAJOR_VERSION.$LIBGTOP_MINOR_VERSION.$LIBGTOP_MICRO_VERSION
 | 
			
		||||
AM_INIT_AUTOMAKE(libgtop, $LIBGTOP_VERSION)
 | 
			
		||||
 | 
			
		||||
dnl  increment if the interface has additions, changes, removals.
 | 
			
		||||
LIBGTOP_CURRENT=5
 | 
			
		||||
LIBGTOP_CURRENT=6
 | 
			
		||||
 | 
			
		||||
dnl  increment any time the source changes; set to
 | 
			
		||||
dnl  0 if you increment CURRENT
 | 
			
		||||
@@ -22,7 +22,7 @@ LIBGTOP_REVISION=0
 | 
			
		||||
dnl  increment if any interfaces have been added; set to 0
 | 
			
		||||
dnl  if any interfaces have been removed. removal has
 | 
			
		||||
dnl  precedence over adding, so set to 0 if both happened.
 | 
			
		||||
LIBGTOP_AGE=0
 | 
			
		||||
LIBGTOP_AGE=1
 | 
			
		||||
 | 
			
		||||
# you can set this to `-snap' for instance to create
 | 
			
		||||
# a `libgtop-1.x.y-snap.tar.gz' tarball.
 | 
			
		||||
@@ -195,28 +195,33 @@ AH_TEMPLATE(HAVE_VMGETINFO, [Define to 1 if you have the 'vmgetinfo' function in
 | 
			
		||||
AC_CHECK_LIB(perfstat, vmgetinfo, AC_DEFINE(HAVE_VMGETINFO))
 | 
			
		||||
 | 
			
		||||
dnl Solaris
 | 
			
		||||
AC_CHECK_LIB(kstat, kstat_open)
 | 
			
		||||
AC_CHECK_FUNCS(getloadavg swapctl)
 | 
			
		||||
AC_CHECK_HEADERS(procfs.h sys/procfs.h, break)
 | 
			
		||||
case "$host_os" in
 | 
			
		||||
     solaris*)
 | 
			
		||||
     AC_CHECK_LIB(kstat, kstat_open)
 | 
			
		||||
     AC_CHECK_FUNCS(getloadavg swapctl)
 | 
			
		||||
     AC_CHECK_HEADERS(procfs.h sys/procfs.h, break)
 | 
			
		||||
 | 
			
		||||
dnl Some versions of Solaris require -lelf for -lkvm
 | 
			
		||||
AC_CHECK_LIB(kvm, kvm_open,[
 | 
			
		||||
  LIBS="-lkvm $LIBS"
 | 
			
		||||
],[AC_MSG_CHECKING(for kvm_open in -lkvm with -lelf)
 | 
			
		||||
   AC_CACHE_VAL(ac_cv_lib_kvm_with_elf,
 | 
			
		||||
   [ac_save_LIBS="$LIBS"
 | 
			
		||||
    LIBS="-lkvm -lelf $LIBS"
 | 
			
		||||
    AC_TRY_LINK([char kvm_open();], [kvm_open()],
 | 
			
		||||
                ac_cv_lib_kvm_with_elf=yes, ac_cv_lib_kvm_with_elf=no)
 | 
			
		||||
    LIBS="$ac_save_LIBS"
 | 
			
		||||
   ])
 | 
			
		||||
   if test "$ac_cv_lib_kvm_with_elf" = "yes"; then
 | 
			
		||||
     AC_MSG_RESULT(yes)
 | 
			
		||||
     LIBS="-lkvm -lelf $LIBS"
 | 
			
		||||
   else
 | 
			
		||||
     AC_MSG_RESULT(no)
 | 
			
		||||
   fi
 | 
			
		||||
])
 | 
			
		||||
 | 
			
		||||
    dnl Some versions of Solaris require -lelf for -lkvm
 | 
			
		||||
    AC_CHECK_LIB(kvm, kvm_open,[
 | 
			
		||||
      LIBS="-lkvm $LIBS"
 | 
			
		||||
    ],[AC_MSG_CHECKING(for kvm_open in -lkvm with -lelf)
 | 
			
		||||
       AC_CACHE_VAL(ac_cv_lib_kvm_with_elf,
 | 
			
		||||
       [ac_save_LIBS="$LIBS"
 | 
			
		||||
        LIBS="-lkvm -lelf $LIBS"
 | 
			
		||||
        AC_TRY_LINK([char kvm_open();], [kvm_open()],
 | 
			
		||||
                    ac_cv_lib_kvm_with_elf=yes, ac_cv_lib_kvm_with_elf=no)
 | 
			
		||||
        LIBS="$ac_save_LIBS"
 | 
			
		||||
       ])
 | 
			
		||||
       if test "$ac_cv_lib_kvm_with_elf" = "yes"; then
 | 
			
		||||
         AC_MSG_RESULT(yes)
 | 
			
		||||
         LIBS="-lkvm -lelf $LIBS"
 | 
			
		||||
       else
 | 
			
		||||
         AC_MSG_RESULT(no)
 | 
			
		||||
       fi
 | 
			
		||||
    ])
 | 
			
		||||
     ;;
 | 
			
		||||
esac
 | 
			
		||||
 | 
			
		||||
dnl For DEC OSF1
 | 
			
		||||
AC_CHECK_LIB(mach, vm_statistics)
 | 
			
		||||
 
 | 
			
		||||
@@ -1,2 +0,0 @@
 | 
			
		||||
Makefile.in
 | 
			
		||||
Makefile
 | 
			
		||||
@@ -1,9 +0,0 @@
 | 
			
		||||
backenddir	= @LIBGTOP_BACKEND_DIR@
 | 
			
		||||
 | 
			
		||||
backend_DATA	= \
 | 
			
		||||
	libgtop-backends.dtd	\
 | 
			
		||||
	libgtop-backend-info.dtd
 | 
			
		||||
 | 
			
		||||
EXTRA_DIST	= |
 | 
			
		||||
	$(backend_DATA)
 | 
			
		||||
 | 
			
		||||
@@ -1,23 +0,0 @@
 | 
			
		||||
<!ELEMENT BackendInfo (name,description?,comments?,authors,legalnotice)>
 | 
			
		||||
<!ELEMENT name (short_name,long_name?)>
 | 
			
		||||
<!ELEMENT short_name (#PCDATA)>
 | 
			
		||||
<!ELEMENT long_name (#PCDATA)>
 | 
			
		||||
 | 
			
		||||
<!ELEMENT description (#PCDATA)>
 | 
			
		||||
 | 
			
		||||
<!ELEMENT authors (author)+>
 | 
			
		||||
<!ELEMENT author (author_name,author_email?)>
 | 
			
		||||
<!ELEMENT author_name (#PCDATA)>
 | 
			
		||||
<!ELEMENT author_email (#PCDATA)>
 | 
			
		||||
 | 
			
		||||
<!ELEMENT legalnotice (license,copyright?)>
 | 
			
		||||
<!ELEMENT license (#PCDATA)>
 | 
			
		||||
 | 
			
		||||
<!ELEMENT copyright (holder)+>
 | 
			
		||||
<!ELEMENT holder (holder_year?,holder_name,holder_email?)>
 | 
			
		||||
<!ELEMENT holder_year (#PCDATA)>
 | 
			
		||||
<!ELEMENT holder_name (#PCDATA)>
 | 
			
		||||
<!ELEMENT holder_email (#PCDATA)>
 | 
			
		||||
 | 
			
		||||
<!ELEMENT comments (comment)+>
 | 
			
		||||
<!ELEMENT comment (#PCDATA)>
 | 
			
		||||
@@ -1,11 +0,0 @@
 | 
			
		||||
<!ELEMENT Backends (Backend)+>
 | 
			
		||||
 | 
			
		||||
<!ELEMENT Backend (Name,Location)>
 | 
			
		||||
<!ELEMENT Name (#PCDATA)>
 | 
			
		||||
 | 
			
		||||
<!ELEMENT Location (LibtoolName?,ShlibName,ExtraLibs?)>
 | 
			
		||||
<!ELEMENT LibtoolName (#PCDATA)>
 | 
			
		||||
<!ELEMENT ShlibName (#PCDATA)>
 | 
			
		||||
 | 
			
		||||
<!ELEMENT ExtraLibs (ExtraLib)+>
 | 
			
		||||
<!ELEMENT ExtraLib (LibtoolName?,ShlibName)>
 | 
			
		||||
@@ -31,8 +31,6 @@
 | 
			
		||||
#include <glibtop.h>
 | 
			
		||||
#include <glibtop/cpu.h>
 | 
			
		||||
 | 
			
		||||
#include "libgtop-i18n.h"
 | 
			
		||||
 | 
			
		||||
int
 | 
			
		||||
main (int argc, char *argv [])
 | 
			
		||||
{
 | 
			
		||||
@@ -44,10 +42,6 @@ main (int argc, char *argv [])
 | 
			
		||||
	char separator [BUFSIZ], buffer [BUFSIZ];
 | 
			
		||||
	int ncpu, i;
 | 
			
		||||
 | 
			
		||||
	setlocale (LC_ALL, "");
 | 
			
		||||
	bindtextdomain (GETTEXT_PACKAGE, GTOPLOCALEDIR);
 | 
			
		||||
	textdomain (GETTEXT_PACKAGE);
 | 
			
		||||
 | 
			
		||||
	glibtop_init();
 | 
			
		||||
 | 
			
		||||
	glibtop_get_cpu (&cpu);
 | 
			
		||||
@@ -73,16 +67,16 @@ main (int argc, char *argv [])
 | 
			
		||||
	memset (separator, '-', 91);
 | 
			
		||||
	separator [92] = '\0';
 | 
			
		||||
 | 
			
		||||
	sprintf (buffer, _("Ticks (%ld per second):"), frequency);
 | 
			
		||||
	sprintf (buffer, "Ticks (%ld per second):", frequency);
 | 
			
		||||
 | 
			
		||||
	printf ("\n\n%-26s %12s %12s %12s %12s %12s\n%s\n", buffer,
 | 
			
		||||
		_("Total"), _("User"), _("Nice"), _("Sys"), _("Idle"), separator);
 | 
			
		||||
		"Total", "User", "Nice", "Sys", "Idle", separator);
 | 
			
		||||
 | 
			
		||||
	printf (_("CPU          (0x%08lx): %12.0f %12.0f %12.0f %12.0f %12.0f\n\n"),
 | 
			
		||||
	printf ("CPU          (0x%08lx): %12.0f %12.0f %12.0f %12.0f %12.0f\n\n",
 | 
			
		||||
		(unsigned long) cpu.flags, total, user, nice, sys, idle);
 | 
			
		||||
 | 
			
		||||
	for (i = 0; i < glibtop_global_server->ncpu; i++) {
 | 
			
		||||
		printf (_("CPU %3d      (0x%08lx): %12lu %12lu %12lu %12lu %12lu\n"), i,
 | 
			
		||||
		printf ("CPU %3d      (0x%08lx): %12lu %12lu %12lu %12lu %12lu\n", i,
 | 
			
		||||
			(unsigned long) cpu.flags,
 | 
			
		||||
			(unsigned long) cpu.xcpu_total [i],
 | 
			
		||||
			(unsigned long) cpu.xcpu_user  [i],
 | 
			
		||||
@@ -99,11 +93,11 @@ main (int argc, char *argv [])
 | 
			
		||||
 | 
			
		||||
	printf ("%s\n\n\n", separator);
 | 
			
		||||
 | 
			
		||||
	printf ("%-26s %12s %12s %12s %12s %12s\n%s\n", _("Percent:"),
 | 
			
		||||
		_("Total (%)"), _("User (%)"), _("Nice (%)"), _("Sys (%)"),
 | 
			
		||||
		_("Idle (%)"), separator);
 | 
			
		||||
	printf ("%-26s %12s %12s %12s %12s %12s\n%s\n", "Percent:",
 | 
			
		||||
		"Total (%)", "User (%)", "Nice (%)", "Sys (%)",
 | 
			
		||||
		"Idle (%)", separator);
 | 
			
		||||
 | 
			
		||||
	printf (_("CPU          (0x%08lx): %12.3f %12.3f %12.3f %12.3f %12.3f\n\n"),
 | 
			
		||||
	printf ("CPU          (0x%08lx): %12.3f %12.3f %12.3f %12.3f %12.3f\n\n",
 | 
			
		||||
		(unsigned long) cpu.flags, (double) total * 100.0 / total,
 | 
			
		||||
		(double) user  * 100.0 / total,
 | 
			
		||||
		(double) nice  * 100.0 / total,
 | 
			
		||||
@@ -119,13 +113,13 @@ main (int argc, char *argv [])
 | 
			
		||||
		p_sys   = ((double) cpu.xcpu_sys   [i]) * 100.0 / sys;
 | 
			
		||||
		p_idle  = ((double) cpu.xcpu_idle  [i]) * 100.0 / idle;
 | 
			
		||||
 | 
			
		||||
		printf (_("CPU %3d      (0x%08lx): %12.3f %12.3f %12.3f %12.3f %12.3f\n"),
 | 
			
		||||
		printf ("CPU %3d      (0x%08lx): %12.3f %12.3f %12.3f %12.3f %12.3f\n",
 | 
			
		||||
			i, (unsigned long) cpu.flags, p_total, p_user, p_nice,
 | 
			
		||||
			p_sys, p_idle);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	printf ("%s\n%-26s %12.3f %12.3f %12.3f %12.3f %12.3f\n\n", separator,
 | 
			
		||||
		_("Spin:"), s_total * 100.0 / total, s_user * 100.0 / user,
 | 
			
		||||
		"Spin:", s_total * 100.0 / total, s_user * 100.0 / user,
 | 
			
		||||
		s_nice * 100.0 / nice, s_sys * 100.0 / sys, s_idle * 100.0 / idle);
 | 
			
		||||
 | 
			
		||||
	exit (0);
 | 
			
		||||
 
 | 
			
		||||
@@ -94,9 +94,8 @@ extern glibtop *glibtop_global_server;
 | 
			
		||||
 | 
			
		||||
extern const unsigned long glibtop_server_features;
 | 
			
		||||
 | 
			
		||||
#define glibtop_init()	glibtop_init_r(&glibtop_global_server, 0, 0);
 | 
			
		||||
 | 
			
		||||
#define glibtop_close()	glibtop_close_r(glibtop_global_server);
 | 
			
		||||
glibtop *
 | 
			
		||||
glibtop_init (void);
 | 
			
		||||
 | 
			
		||||
glibtop *
 | 
			
		||||
glibtop_init_r (glibtop **server_ptr,
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,2 @@
 | 
			
		||||
SUBDIRS		= glibtop
 | 
			
		||||
 | 
			
		||||
EXTRA_DIST	= libgtop-i18n.h
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -28,6 +28,8 @@
 | 
			
		||||
 | 
			
		||||
G_BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
void glibtop_close (void);
 | 
			
		||||
 | 
			
		||||
void glibtop_close_r (glibtop *server);
 | 
			
		||||
 | 
			
		||||
void glibtop_close_s (glibtop *server);
 | 
			
		||||
 
 | 
			
		||||
@@ -80,7 +80,7 @@ struct _glibtop_cpu
 | 
			
		||||
		xcpu_flags;	                /* GLIBTOP_XCPU_IDLE		*/
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define glibtop_get_cpu(cpu)	glibtop_get_cpu_l(glibtop_global_server, cpu)
 | 
			
		||||
void glibtop_get_cpu(glibtop_cpu *buf);
 | 
			
		||||
 | 
			
		||||
#if GLIBTOP_SUID_CPU
 | 
			
		||||
#define glibtop_get_cpu_r	glibtop_get_cpu_p
 | 
			
		||||
 
 | 
			
		||||
@@ -53,7 +53,7 @@ struct _glibtop_fsusage
 | 
			
		||||
	guint64 read, write;    /* Total blocks read and written */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define glibtop_get_fsusage(fsusage,disk)	glibtop_get_fsusage_l(glibtop_global_server, fsusage, disk)
 | 
			
		||||
void glibtop_get_fsusage(glibtop_fsusage *buf, const char *mount_dir);
 | 
			
		||||
 | 
			
		||||
#define glibtop_get_fsusage_r		glibtop_get_fsusage_s
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -47,7 +47,7 @@ struct _glibtop_loadavg
 | 
			
		||||
		last_pid;		/* GLIBTOP_LOADAVG_LAST_PID	*/
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define glibtop_get_loadavg(loadavg)	glibtop_get_loadavg_l(glibtop_global_server, loadavg)
 | 
			
		||||
void glibtop_get_loadavg(glibtop_loadavg *buf);
 | 
			
		||||
 | 
			
		||||
#if GLIBTOP_SUID_LOADAVG
 | 
			
		||||
#define glibtop_get_loadavg_r		glibtop_get_loadavg_p
 | 
			
		||||
 
 | 
			
		||||
@@ -55,7 +55,7 @@ struct _glibtop_mem
 | 
			
		||||
		locked;		/* GLIBTOP_MEM_LOCKED	*/
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define glibtop_get_mem(mem)	glibtop_get_mem_l(glibtop_global_server, mem)
 | 
			
		||||
void glibtop_get_mem(glibtop_mem *buf);
 | 
			
		||||
 | 
			
		||||
#if GLIBTOP_SUID_MEM
 | 
			
		||||
#define glibtop_get_mem_r		glibtop_get_mem_p
 | 
			
		||||
 
 | 
			
		||||
@@ -55,7 +55,8 @@ struct _glibtop_mountlist
 | 
			
		||||
		size;			/* GLIBTOP_MOUNTLIST_SIZE	*/
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define glibtop_get_mountlist(mountlist,all_fs)	glibtop_get_mountlist_l(glibtop_global_server, mountlist, all_fs)
 | 
			
		||||
glibtop_mountentry *
 | 
			
		||||
glibtop_get_mountlist(glibtop_mountlist *buf, int all_fs);
 | 
			
		||||
 | 
			
		||||
#define glibtop_get_mountlist_r		glibtop_get_mountlist_s
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -53,7 +53,7 @@ struct _glibtop_msg_limits
 | 
			
		||||
		msgtql;		/* GLIBTOP_IPC_MSGTQL	*/
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define glibtop_get_msg_limits(msg)	glibtop_get_msg_limits_l(glibtop_global_server, msg)
 | 
			
		||||
void glibtop_get_msg_limits(glibtop_msg_limits *buf);
 | 
			
		||||
 | 
			
		||||
#if GLIBTOP_SUID_MSG_LIMITS
 | 
			
		||||
#define glibtop_get_msg_limits_r	glibtop_get_msg_limits_p
 | 
			
		||||
 
 | 
			
		||||
@@ -37,7 +37,7 @@ struct _glibtop_netlist
 | 
			
		||||
	guint32 number;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define glibtop_get_netlist(netlist)	glibtop_get_netlist_l(glibtop_global_server, netlist)
 | 
			
		||||
char** glibtop_get_netlist(glibtop_netlist *buf);
 | 
			
		||||
 | 
			
		||||
#if GLIBTOP_SUID_NETLIST
 | 
			
		||||
#define glibtop_get_netlist_r		glibtop_get_netlist_p
 | 
			
		||||
 
 | 
			
		||||
@@ -107,7 +107,7 @@ struct _glibtop_netload
 | 
			
		||||
	guint8 hwaddress[8];		/* GLIBTOP_NETLOAD_HWADDRESS    */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define glibtop_get_netload(netload,interface)	glibtop_get_netload_l(glibtop_global_server, netload, interface)
 | 
			
		||||
void glibtop_get_netload(glibtop_netload *buf, const char *interface);
 | 
			
		||||
 | 
			
		||||
#if GLIBTOP_SUID_NETLOAD
 | 
			
		||||
#define glibtop_get_netload_r	glibtop_get_netload_p
 | 
			
		||||
 
 | 
			
		||||
@@ -51,7 +51,7 @@ struct _glibtop_ppp
 | 
			
		||||
		bytes_out;		/* GLIBTOP_PPP_BYTES_OUT	*/
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define glibtop_get_ppp(ppp,device)	glibtop_get_ppp_l(glibtop_global_server, ppp, device)
 | 
			
		||||
void glibtop_get_ppp(glibtop_ppp *buf, unsigned short device);
 | 
			
		||||
 | 
			
		||||
#if GLIBTOP_SUID_PPP
 | 
			
		||||
#define glibtop_get_ppp_r	glibtop_get_ppp_p
 | 
			
		||||
 
 | 
			
		||||
@@ -46,9 +46,8 @@ char *
 | 
			
		||||
glibtop_get_proc_args_l (glibtop *server, glibtop_proc_args *buf,
 | 
			
		||||
			 pid_t pid, unsigned max_len);
 | 
			
		||||
 | 
			
		||||
#define glibtop_get_proc_args(proc_args,pid,max_len) glibtop_get_proc_args_l(glibtop_global_server, proc_args, pid, max_len)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
char *
 | 
			
		||||
glibtop_get_proc_args (glibtop_proc_args *buf, pid_t pid, unsigned max_len);
 | 
			
		||||
 | 
			
		||||
#if GLIBTOP_SUID_PROC_ARGS
 | 
			
		||||
 | 
			
		||||
@@ -82,8 +81,8 @@ char **
 | 
			
		||||
glibtop_get_proc_argv_l (glibtop *server, glibtop_proc_args *buf,
 | 
			
		||||
			 pid_t pid, unsigned max_len);
 | 
			
		||||
 | 
			
		||||
#define glibtop_get_proc_argv(proc_args,pid,max_len) glibtop_get_proc_argv_l(glibtop_global_server, proc_args, pid, max_len)
 | 
			
		||||
 | 
			
		||||
char **
 | 
			
		||||
glibtop_get_proc_argv (glibtop_proc_args *buf, pid_t pid, unsigned max_len);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
G_END_DECLS
 | 
			
		||||
 
 | 
			
		||||
@@ -64,7 +64,7 @@ struct _glibtop_proc_kernel
 | 
			
		||||
	char wchan [40];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define glibtop_get_proc_kernel(p1, p2)	glibtop_get_proc_kernel_l(glibtop_global_server, p1, p2)
 | 
			
		||||
void glibtop_get_proc_kernel(glibtop_proc_kernel *buf, pid_t pid);
 | 
			
		||||
 | 
			
		||||
#if GLIBTOP_SUID_PROC_KERNEL
 | 
			
		||||
#define glibtop_get_proc_kernel_r	glibtop_get_proc_kernel_p
 | 
			
		||||
 
 | 
			
		||||
@@ -62,7 +62,8 @@ struct _glibtop_proclist
 | 
			
		||||
		size;			/* GLIBTOP_PROCLIST_SIZE	*/
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define glibtop_get_proclist(proclist,which,arg) glibtop_get_proclist_l(glibtop_global_server, proclist, which, arg)
 | 
			
		||||
unsigned *
 | 
			
		||||
glibtop_get_proclist(glibtop_proclist *buf, gint64 which, gint64 arg);
 | 
			
		||||
 | 
			
		||||
#if GLIBTOP_SUID_PROCLIST
 | 
			
		||||
#define glibtop_get_proclist_r		glibtop_get_proclist_p
 | 
			
		||||
 
 | 
			
		||||
@@ -70,8 +70,9 @@ struct _glibtop_proc_map
 | 
			
		||||
		total,			/* GLIBTOP_PROC_MAP_TOTAL	*/
 | 
			
		||||
		size;			/* GLIBTOP_PROC_MAP_SIZE	*/
 | 
			
		||||
};
 | 
			
		||||
glibtop_map_entry *
 | 
			
		||||
glibtop_get_proc_map(glibtop_proc_map *buf, pid_t pid);
 | 
			
		||||
 | 
			
		||||
#define glibtop_get_proc_map(proc_map,pid) glibtop_get_proc_map_l(glibtop_global_server, proc_map, pid)
 | 
			
		||||
 | 
			
		||||
#if GLIBTOP_SUID_PROC_MAP
 | 
			
		||||
#define glibtop_get_proc_map_r		glibtop_get_proc_map_p
 | 
			
		||||
 
 | 
			
		||||
@@ -55,7 +55,7 @@ struct _glibtop_proc_mem
 | 
			
		||||
				 * of the process; usually 2,147,483,647 */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define glibtop_get_proc_mem(p1, p2)	glibtop_get_proc_mem_l(glibtop_global_server, p1, p2)
 | 
			
		||||
void glibtop_get_proc_mem(glibtop_proc_mem *buf, pid_t pid);
 | 
			
		||||
 | 
			
		||||
#if GLIBTOP_SUID_PROC_MEM
 | 
			
		||||
#define glibtop_get_proc_mem_r		glibtop_get_proc_mem_p
 | 
			
		||||
 
 | 
			
		||||
@@ -94,7 +94,8 @@ struct _glibtop_proc_open_files
 | 
			
		||||
		size;			/* GLIBTOP_PROC_OPEN_FILES_SIZE   */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define glibtop_get_proc_open_files(proc_open_files,pid) glibtop_get_proc_open_files_l(glibtop_global_server, proc_open_files, pid)
 | 
			
		||||
glibtop_open_files_entry *
 | 
			
		||||
glibtop_get_proc_open_files(glibtop_proc_open_files *buf, pid_t pid);
 | 
			
		||||
 | 
			
		||||
#if GLIBTOP_SUID_PROC_FILE
 | 
			
		||||
#define glibtop_get_proc_open_files_r		glibtop_get_proc_open_files_p
 | 
			
		||||
 
 | 
			
		||||
@@ -58,7 +58,7 @@ struct _glibtop_proc_segment
 | 
			
		||||
		start_stack;	/* address of the bottom of stack segment */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define glibtop_get_proc_segment(p1, p2)	glibtop_get_proc_segment_l(glibtop_global_server, p1, p2)
 | 
			
		||||
void glibtop_get_proc_segment(glibtop_proc_segment *buf, pid_t pid);
 | 
			
		||||
 | 
			
		||||
#if GLIBTOP_SUID_PROC_SEGMENT
 | 
			
		||||
#define glibtop_get_proc_segment_r	glibtop_get_proc_segment_p
 | 
			
		||||
 
 | 
			
		||||
@@ -49,7 +49,7 @@ struct _glibtop_proc_signal
 | 
			
		||||
		sigcatch [2];		/* mask of caught  signals */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define glibtop_get_proc_signal(p1, p2)	glibtop_get_proc_signal_l(glibtop_global_server, p1, p2)
 | 
			
		||||
void glibtop_get_proc_signal(glibtop_proc_signal *buf, pid_t pid);
 | 
			
		||||
 | 
			
		||||
#if GLIBTOP_SUID_PROC_SIGNAL
 | 
			
		||||
#define glibtop_get_proc_signal_r	glibtop_get_proc_signal_p
 | 
			
		||||
 
 | 
			
		||||
@@ -74,7 +74,7 @@ struct _glibtop_proc_state
 | 
			
		||||
        last_processor;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define glibtop_get_proc_state(p1, p2)	glibtop_get_proc_state_l(glibtop_global_server, p1, p2)
 | 
			
		||||
void glibtop_get_proc_state(glibtop_proc_state *buf, pid_t pid);
 | 
			
		||||
 | 
			
		||||
#if GLIBTOP_SUID_PROC_STATE
 | 
			
		||||
#define glibtop_get_proc_state_r	glibtop_get_proc_state_p
 | 
			
		||||
 
 | 
			
		||||
@@ -70,7 +70,8 @@ struct _glibtop_proc_time
 | 
			
		||||
		xcpu_stime [GLIBTOP_NCPU];	/* SMP machines. */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define glibtop_get_proc_time(p1, p2)	glibtop_get_proc_time_l(glibtop_global_server, p1, p2)
 | 
			
		||||
 | 
			
		||||
void glibtop_get_proc_time(glibtop_proc_time *buf, pid_t pid);
 | 
			
		||||
 | 
			
		||||
#if GLIBTOP_SUID_PROC_TIME
 | 
			
		||||
#define glibtop_get_proc_time_r	glibtop_get_proc_time_p
 | 
			
		||||
 
 | 
			
		||||
@@ -80,7 +80,7 @@ struct _glibtop_proc_uid
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define glibtop_get_proc_uid(p1, p2)	glibtop_get_proc_uid_l(glibtop_global_server, p1, p2)
 | 
			
		||||
void glibtop_get_proc_uid(glibtop_proc_uid *buf, pid_t pid);
 | 
			
		||||
 | 
			
		||||
#if GLIBTOP_SUID_PROC_UID
 | 
			
		||||
#define glibtop_get_proc_uid_r		glibtop_get_proc_uid_p
 | 
			
		||||
 
 | 
			
		||||
@@ -59,7 +59,7 @@ struct _glibtop_sem_limits
 | 
			
		||||
		semaem;		/* GLIBTOP_IPC_SEMAEM	*/
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define glibtop_get_sem_limits(sem)	glibtop_get_sem_limits_l(glibtop_global_server, sem)
 | 
			
		||||
void glibtop_get_sem_limits(glibtop_sem_limits *buf);
 | 
			
		||||
 | 
			
		||||
#if GLIBTOP_SUID_SEM_LIMITS
 | 
			
		||||
#define glibtop_get_sem_limits_r	glibtop_get_sem_limits_p
 | 
			
		||||
 
 | 
			
		||||
@@ -49,7 +49,7 @@ struct _glibtop_shm_limits
 | 
			
		||||
		shmall;		/* GLIBTOP_IPC_SHMALL	*/
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define glibtop_get_shm_limits(shm)	glibtop_get_shm_limits_l(glibtop_global_server, shm)
 | 
			
		||||
void glibtop_get_shm_limits(glibtop_shm_limits *buf);
 | 
			
		||||
 | 
			
		||||
#if GLIBTOP_SUID_SHM_LIMITS
 | 
			
		||||
#define glibtop_get_shm_limits_r	glibtop_get_shm_limits_p
 | 
			
		||||
 
 | 
			
		||||
@@ -49,7 +49,8 @@ struct _glibtop_swap
 | 
			
		||||
		pageout;	/* GLIBTOP_SWAP_PAGEOUT	*/
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define glibtop_get_swap(swap)	glibtop_get_swap_l(glibtop_global_server, swap)
 | 
			
		||||
void
 | 
			
		||||
glibtop_get_swap(glibtop_swap *buf);
 | 
			
		||||
 | 
			
		||||
#if GLIBTOP_SUID_SWAP
 | 
			
		||||
#define glibtop_get_swap_r		glibtop_get_swap_p
 | 
			
		||||
 
 | 
			
		||||
@@ -94,8 +94,7 @@ struct _glibtop_sysdeps
 | 
			
		||||
		ppp;			/* glibtop_ppp		*/
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define glibtop_get_sysdeps(sysdeps)	glibtop_get_sysdeps_r(glibtop_global_server,sysdeps)
 | 
			
		||||
 | 
			
		||||
void glibtop_get_sysdeps (glibtop_sysdeps *buf);
 | 
			
		||||
void glibtop_get_sysdeps_r (glibtop *server, glibtop_sysdeps *buf);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -54,11 +54,10 @@ struct _glibtop_sysinfo
 | 
			
		||||
	glibtop_entry cpuinfo [GLIBTOP_NCPU];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define glibtop_get_sysinfo()	glibtop_get_sysinfo_s(glibtop_global_server)
 | 
			
		||||
 | 
			
		||||
#define glibtop_get_sysinfo_r	glibtop_get_sysinfo_s
 | 
			
		||||
 | 
			
		||||
const glibtop_sysinfo *glibtop_get_sysinfo_s (glibtop *server);
 | 
			
		||||
const glibtop_sysinfo *glibtop_get_sysinfo (void);
 | 
			
		||||
 | 
			
		||||
G_END_DECLS
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -45,7 +45,7 @@ struct _glibtop_uptime
 | 
			
		||||
	guint64 boot_time;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define glibtop_get_uptime(uptime)	glibtop_get_uptime_l(glibtop_global_server, uptime)
 | 
			
		||||
void glibtop_get_uptime (glibtop_uptime *buf);
 | 
			
		||||
 | 
			
		||||
#if GLIBTOP_SUID_UPTIME
 | 
			
		||||
#define glibtop_get_uptime_r		glibtop_get_uptime_p
 | 
			
		||||
 
 | 
			
		||||
@@ -1,11 +0,0 @@
 | 
			
		||||
 | 
			
		||||
#include <config.h>
 | 
			
		||||
 | 
			
		||||
#include <libintl.h>
 | 
			
		||||
#define _(String) gettext (String)
 | 
			
		||||
#ifdef gettext_noop
 | 
			
		||||
#   define N_(String) gettext_noop (String)
 | 
			
		||||
#else
 | 
			
		||||
#   define N_(String) (String)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
@@ -28,7 +28,7 @@ print '#include <glibtop/open.h>';
 | 
			
		||||
print '';
 | 
			
		||||
print '#include <glibtop/sysdeps.h>';
 | 
			
		||||
print '#include <glibtop/union.h>';
 | 
			
		||||
print '#include "libgtop-i18n.h"';
 | 
			
		||||
print '#include <glib/gi18n-lib.h>';
 | 
			
		||||
print '';
 | 
			
		||||
print '#include <glibtop/command.h>';
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -24,7 +24,7 @@
 | 
			
		||||
#include <config.h>
 | 
			
		||||
#include <glibtop/read.h>
 | 
			
		||||
#include <glibtop/error.h>
 | 
			
		||||
#include "libgtop-i18n.h"
 | 
			
		||||
#include <glib/gi18n-lib.h>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Reads some data from server. */
 | 
			
		||||
 
 | 
			
		||||
@@ -25,7 +25,7 @@
 | 
			
		||||
 | 
			
		||||
#include <glibtop/error.h>
 | 
			
		||||
#include <glibtop/read_data.h>
 | 
			
		||||
#include "libgtop-i18n.h"
 | 
			
		||||
#include <glib/gi18n-lib.h>
 | 
			
		||||
 | 
			
		||||
/* Reads some data from server. */
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -25,7 +25,7 @@
 | 
			
		||||
 | 
			
		||||
#include <glibtop/write.h>
 | 
			
		||||
#include <glibtop/error.h>
 | 
			
		||||
#include "libgtop-i18n.h"
 | 
			
		||||
#include <glib/gi18n-lib.h>
 | 
			
		||||
 | 
			
		||||
/* Writes some data to server. */
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										15
									
								
								po/ChangeLog
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								po/ChangeLog
									
									
									
									
									
								
							@@ -1,14 +1,17 @@
 | 
			
		||||
2005-08-06  Pawan Chitrakar  <pawan@nplinux.org>
 | 
			
		||||
2005-07-04  Hendrik Richter  <hendi@gnome-de.org>
 | 
			
		||||
 | 
			
		||||
	* ne.po: Updated Nepali Translation
 | 
			
		||||
	* de.po: Fixed German translation by
 | 
			
		||||
	Jens Seidel <jensseidel@users.sf.net>.
 | 
			
		||||
 | 
			
		||||
2005-07-01  Clytie Siddall <clytie@riverland.net.au>
 | 
			
		||||
 | 
			
		||||
        * vi.po: Updated Vietnamese translation.
 | 
			
		||||
2005-06-22  Abel Cheung  <maddog@linuxhall.org>
 | 
			
		||||
 | 
			
		||||
	* zh_TW.po: Fix language team reference.
 | 
			
		||||
 | 
			
		||||
2005-06-15  Alexander Shopov  <ash@contact.bg>
 | 
			
		||||
 | 
			
		||||
	* bg.po: Updated Bulgarian translation by
 | 
			
		||||
	Rostislav Raykov <zbrox@i-space.org>
 | 
			
		||||
 | 
			
		||||
2005-06-13  Ignacio Casal Quinteiro  <nacho.resa@gmail.com>
 | 
			
		||||
 | 
			
		||||
	* gl.po: Updated Galician Translation.
 | 
			
		||||
@@ -19,7 +22,7 @@
 | 
			
		||||
 | 
			
		||||
2005-03-31  Steve Murphy  <murf@e-tools.com>
 | 
			
		||||
 | 
			
		||||
        * rw.po: Added Kinyarwanda translation.
 | 
			
		||||
	* rw.po: Added Kinyarwanda translation.
 | 
			
		||||
 | 
			
		||||
2005-03-19  Priit Laes  <plaes@cvs.gnome.org>
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										98
									
								
								po/bg.po
									
									
									
									
									
								
							
							
						
						
									
										98
									
								
								po/bg.po
									
									
									
									
									
								
							@@ -9,8 +9,8 @@ msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: libgtop\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: \n"
 | 
			
		||||
"POT-Creation-Date: 2005-01-27 12:05+0200\n"
 | 
			
		||||
"PO-Revision-Date: 2005-03-05 16:34+0800\n"
 | 
			
		||||
"POT-Creation-Date: 2005-06-15 16:26+0300\n"
 | 
			
		||||
"PO-Revision-Date: 2005-06-15 16:28+0300\n"
 | 
			
		||||
"Last-Translator: Rostislav Raykov <zbrox@i-space.org>\n"
 | 
			
		||||
"Language-Team: Bulgarian <dict@linux.zonebg.com>\n"
 | 
			
		||||
"MIME-Version: 1.0\n"
 | 
			
		||||
@@ -18,64 +18,64 @@ msgstr ""
 | 
			
		||||
"Content-Transfer-Encoding: 8bit\n"
 | 
			
		||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
 | 
			
		||||
 | 
			
		||||
#: lib/read.c:64
 | 
			
		||||
#: ../lib/read.c:65
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "read %d byte"
 | 
			
		||||
msgid_plural "read %d bytes"
 | 
			
		||||
msgstr[0] "прочетен %d байт"
 | 
			
		||||
msgstr[1] "прочетени %d байта"
 | 
			
		||||
 | 
			
		||||
#: lib/read_data.c:52
 | 
			
		||||
#: ../lib/read_data.c:53
 | 
			
		||||
msgid "read data size"
 | 
			
		||||
msgstr "размер прочетени данни"
 | 
			
		||||
 | 
			
		||||
#: lib/read_data.c:71
 | 
			
		||||
#, fuzzy, c-format
 | 
			
		||||
#: ../lib/read_data.c:72
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "read %lu byte of data"
 | 
			
		||||
msgid_plural "read %lu bytes of data"
 | 
			
		||||
msgstr[0] "прочетен %d байт от данните"
 | 
			
		||||
msgstr[1] "прочетени %d байта от данните"
 | 
			
		||||
msgstr[0] "прочетен %d байт данни"
 | 
			
		||||
msgstr[1] "прочетени %d байта данни"
 | 
			
		||||
 | 
			
		||||
#: lib/write.c:51
 | 
			
		||||
#: ../lib/write.c:52
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "wrote %d byte"
 | 
			
		||||
msgid_plural "wrote %d bytes"
 | 
			
		||||
msgstr[0] "записан %d байт"
 | 
			
		||||
msgstr[1] "записани %d байта"
 | 
			
		||||
 | 
			
		||||
#: src/daemon/gnuserv.c:461
 | 
			
		||||
#: ../src/daemon/gnuserv.c:460
 | 
			
		||||
msgid "Enable debugging"
 | 
			
		||||
msgstr "Включване на дебъгване"
 | 
			
		||||
 | 
			
		||||
#: src/daemon/gnuserv.c:461
 | 
			
		||||
#: ../src/daemon/gnuserv.c:460
 | 
			
		||||
msgid "DEBUG"
 | 
			
		||||
msgstr "DEBUG"
 | 
			
		||||
 | 
			
		||||
#: src/daemon/gnuserv.c:463
 | 
			
		||||
#: ../src/daemon/gnuserv.c:462
 | 
			
		||||
msgid "Enable verbose output"
 | 
			
		||||
msgstr "Включен подробен изход"
 | 
			
		||||
 | 
			
		||||
#: src/daemon/gnuserv.c:463
 | 
			
		||||
#: ../src/daemon/gnuserv.c:462
 | 
			
		||||
msgid "VERBOSE"
 | 
			
		||||
msgstr "ПОДРОБЕН"
 | 
			
		||||
 | 
			
		||||
#: src/daemon/gnuserv.c:465
 | 
			
		||||
#: ../src/daemon/gnuserv.c:464
 | 
			
		||||
msgid "Don't fork into background"
 | 
			
		||||
msgstr "Не се поражда процес във фонов режим"
 | 
			
		||||
 | 
			
		||||
#: src/daemon/gnuserv.c:465
 | 
			
		||||
#: ../src/daemon/gnuserv.c:464
 | 
			
		||||
msgid "NO-DAEMON"
 | 
			
		||||
msgstr "БЕЗ-ДЕМОН"
 | 
			
		||||
 | 
			
		||||
#: src/daemon/gnuserv.c:467
 | 
			
		||||
#: ../src/daemon/gnuserv.c:466
 | 
			
		||||
msgid "Invoked from inetd"
 | 
			
		||||
msgstr "Извикан от inetd"
 | 
			
		||||
 | 
			
		||||
#: src/daemon/gnuserv.c:467
 | 
			
		||||
#: ../src/daemon/gnuserv.c:466
 | 
			
		||||
msgid "INETD"
 | 
			
		||||
msgstr "INETD"
 | 
			
		||||
 | 
			
		||||
#: src/daemon/gnuserv.c:501
 | 
			
		||||
#: ../src/daemon/gnuserv.c:500
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid ""
 | 
			
		||||
"Error on option %s: %s.\n"
 | 
			
		||||
@@ -85,126 +85,126 @@ msgstr ""
 | 
			
		||||
"Изпълнете '%s --help' за да видите пълния списък от налични за командата "
 | 
			
		||||
"опции.\n"
 | 
			
		||||
 | 
			
		||||
#: sysdeps/osf1/siglist.c:28 sysdeps/sun4/siglist.c:28
 | 
			
		||||
#: ../sysdeps/osf1/siglist.c:28 ../sysdeps/sun4/siglist.c:28
 | 
			
		||||
msgid "Hangup"
 | 
			
		||||
msgstr "Разпадане"
 | 
			
		||||
 | 
			
		||||
#: sysdeps/osf1/siglist.c:29 sysdeps/sun4/siglist.c:29
 | 
			
		||||
#: ../sysdeps/osf1/siglist.c:29 ../sysdeps/sun4/siglist.c:29
 | 
			
		||||
msgid "Interrupt"
 | 
			
		||||
msgstr "Прекъсване"
 | 
			
		||||
 | 
			
		||||
#: sysdeps/osf1/siglist.c:30 sysdeps/sun4/siglist.c:30
 | 
			
		||||
#: ../sysdeps/osf1/siglist.c:30 ../sysdeps/sun4/siglist.c:30
 | 
			
		||||
msgid "Quit"
 | 
			
		||||
msgstr "Напускане"
 | 
			
		||||
 | 
			
		||||
#: sysdeps/osf1/siglist.c:31 sysdeps/sun4/siglist.c:31
 | 
			
		||||
#: ../sysdeps/osf1/siglist.c:31 ../sysdeps/sun4/siglist.c:31
 | 
			
		||||
msgid "Illegal instruction"
 | 
			
		||||
msgstr "Недопустима инструкция"
 | 
			
		||||
 | 
			
		||||
#: sysdeps/osf1/siglist.c:32 sysdeps/sun4/siglist.c:32
 | 
			
		||||
#: ../sysdeps/osf1/siglist.c:32 ../sysdeps/sun4/siglist.c:32
 | 
			
		||||
msgid "Trace trap"
 | 
			
		||||
msgstr "Точка на прекъсване"
 | 
			
		||||
 | 
			
		||||
#: sysdeps/osf1/siglist.c:33 sysdeps/sun4/siglist.c:33
 | 
			
		||||
#: ../sysdeps/osf1/siglist.c:33 ../sysdeps/sun4/siglist.c:33
 | 
			
		||||
msgid "Abort"
 | 
			
		||||
msgstr "Прекъсване"
 | 
			
		||||
 | 
			
		||||
#: sysdeps/osf1/siglist.c:34 sysdeps/sun4/siglist.c:34
 | 
			
		||||
#: ../sysdeps/osf1/siglist.c:34 ../sysdeps/sun4/siglist.c:34
 | 
			
		||||
msgid "EMT error"
 | 
			
		||||
msgstr "EMT грешка"
 | 
			
		||||
 | 
			
		||||
#: sysdeps/osf1/siglist.c:35 sysdeps/sun4/siglist.c:35
 | 
			
		||||
#: ../sysdeps/osf1/siglist.c:35 ../sysdeps/sun4/siglist.c:35
 | 
			
		||||
msgid "Floating-point exception"
 | 
			
		||||
msgstr "Изключение с плаваща запетая"
 | 
			
		||||
 | 
			
		||||
#: sysdeps/osf1/siglist.c:36 sysdeps/sun4/siglist.c:36
 | 
			
		||||
#: ../sysdeps/osf1/siglist.c:36 ../sysdeps/sun4/siglist.c:36
 | 
			
		||||
msgid "Kill"
 | 
			
		||||
msgstr "Убиване"
 | 
			
		||||
 | 
			
		||||
#: sysdeps/osf1/siglist.c:37 sysdeps/sun4/siglist.c:37
 | 
			
		||||
#: ../sysdeps/osf1/siglist.c:37 ../sysdeps/sun4/siglist.c:37
 | 
			
		||||
msgid "Bus error"
 | 
			
		||||
msgstr "Грешка в шината"
 | 
			
		||||
 | 
			
		||||
#: sysdeps/osf1/siglist.c:38 sysdeps/sun4/siglist.c:38
 | 
			
		||||
#: ../sysdeps/osf1/siglist.c:38 ../sysdeps/sun4/siglist.c:38
 | 
			
		||||
msgid "Segmentation violation"
 | 
			
		||||
msgstr "Сегментация"
 | 
			
		||||
 | 
			
		||||
#: sysdeps/osf1/siglist.c:39 sysdeps/sun4/siglist.c:39
 | 
			
		||||
#: ../sysdeps/osf1/siglist.c:39 ../sysdeps/sun4/siglist.c:39
 | 
			
		||||
msgid "Bad argument to system call"
 | 
			
		||||
msgstr "Грешен аргумент на системно извикване"
 | 
			
		||||
 | 
			
		||||
#: sysdeps/osf1/siglist.c:40 sysdeps/sun4/siglist.c:40
 | 
			
		||||
#: ../sysdeps/osf1/siglist.c:40 ../sysdeps/sun4/siglist.c:40
 | 
			
		||||
msgid "Broken pipe"
 | 
			
		||||
msgstr "Нарушен програмен канал"
 | 
			
		||||
 | 
			
		||||
#: sysdeps/osf1/siglist.c:41 sysdeps/sun4/siglist.c:41
 | 
			
		||||
#: ../sysdeps/osf1/siglist.c:41 ../sysdeps/sun4/siglist.c:41
 | 
			
		||||
msgid "Alarm clock"
 | 
			
		||||
msgstr "Алармен часовник"
 | 
			
		||||
 | 
			
		||||
#: sysdeps/osf1/siglist.c:42 sysdeps/sun4/siglist.c:42
 | 
			
		||||
#: ../sysdeps/osf1/siglist.c:42 ../sysdeps/sun4/siglist.c:42
 | 
			
		||||
msgid "Termination"
 | 
			
		||||
msgstr "Завършване"
 | 
			
		||||
 | 
			
		||||
#: sysdeps/osf1/siglist.c:43 sysdeps/sun4/siglist.c:43
 | 
			
		||||
#: ../sysdeps/osf1/siglist.c:43 ../sysdeps/sun4/siglist.c:43
 | 
			
		||||
msgid "Urgent condition on socket"
 | 
			
		||||
msgstr "Неотложно състояние на socket"
 | 
			
		||||
 | 
			
		||||
#: sysdeps/osf1/siglist.c:44 sysdeps/sun4/siglist.c:44
 | 
			
		||||
#: ../sysdeps/osf1/siglist.c:44 ../sysdeps/sun4/siglist.c:44
 | 
			
		||||
msgid "Stop"
 | 
			
		||||
msgstr "Стоп"
 | 
			
		||||
 | 
			
		||||
#: sysdeps/osf1/siglist.c:45 sysdeps/sun4/siglist.c:45
 | 
			
		||||
#: ../sysdeps/osf1/siglist.c:45 ../sysdeps/sun4/siglist.c:45
 | 
			
		||||
msgid "Keyboard stop"
 | 
			
		||||
msgstr "Стоп от клавиатурата"
 | 
			
		||||
 | 
			
		||||
#: sysdeps/osf1/siglist.c:46 sysdeps/sun4/siglist.c:46
 | 
			
		||||
#: ../sysdeps/osf1/siglist.c:46 ../sysdeps/sun4/siglist.c:46
 | 
			
		||||
msgid "Continue"
 | 
			
		||||
msgstr "Продължаване"
 | 
			
		||||
 | 
			
		||||
#: sysdeps/osf1/siglist.c:47 sysdeps/sun4/siglist.c:47
 | 
			
		||||
#: ../sysdeps/osf1/siglist.c:47 ../sysdeps/sun4/siglist.c:47
 | 
			
		||||
msgid "Child status has changed"
 | 
			
		||||
msgstr "Промяна в състоянието на дъщерни процеси"
 | 
			
		||||
 | 
			
		||||
#: sysdeps/osf1/siglist.c:48 sysdeps/sun4/siglist.c:48
 | 
			
		||||
#: ../sysdeps/osf1/siglist.c:48 ../sysdeps/sun4/siglist.c:48
 | 
			
		||||
msgid "Background read from tty"
 | 
			
		||||
msgstr "Фоново четене от tty"
 | 
			
		||||
 | 
			
		||||
#: sysdeps/osf1/siglist.c:49 sysdeps/sun4/siglist.c:49
 | 
			
		||||
#: ../sysdeps/osf1/siglist.c:49 ../sysdeps/sun4/siglist.c:49
 | 
			
		||||
msgid "Background write to tty"
 | 
			
		||||
msgstr "Фонов запис в tty"
 | 
			
		||||
 | 
			
		||||
#: sysdeps/osf1/siglist.c:50 sysdeps/sun4/siglist.c:50
 | 
			
		||||
#: ../sysdeps/osf1/siglist.c:50 ../sysdeps/sun4/siglist.c:50
 | 
			
		||||
msgid "I/O now possible"
 | 
			
		||||
msgstr "I/O сега е възможно"
 | 
			
		||||
 | 
			
		||||
#: sysdeps/osf1/siglist.c:51 sysdeps/sun4/siglist.c:51
 | 
			
		||||
#: ../sysdeps/osf1/siglist.c:51 ../sysdeps/sun4/siglist.c:51
 | 
			
		||||
msgid "CPU limit exceeded"
 | 
			
		||||
msgstr "Превишено ограничение за CPU"
 | 
			
		||||
 | 
			
		||||
#: sysdeps/osf1/siglist.c:52 sysdeps/sun4/siglist.c:52
 | 
			
		||||
#: ../sysdeps/osf1/siglist.c:52 ../sysdeps/sun4/siglist.c:52
 | 
			
		||||
msgid "File size limit exceeded"
 | 
			
		||||
msgstr "Превишено ограничение за размер на файл"
 | 
			
		||||
 | 
			
		||||
#: sysdeps/osf1/siglist.c:53 sysdeps/sun4/siglist.c:53
 | 
			
		||||
#: ../sysdeps/osf1/siglist.c:53 ../sysdeps/sun4/siglist.c:53
 | 
			
		||||
msgid "Virtual alarm clock"
 | 
			
		||||
msgstr "Виртуален алармен часовник"
 | 
			
		||||
 | 
			
		||||
#: sysdeps/osf1/siglist.c:54 sysdeps/sun4/siglist.c:54
 | 
			
		||||
#: ../sysdeps/osf1/siglist.c:54 ../sysdeps/sun4/siglist.c:54
 | 
			
		||||
msgid "Profiling alarm clock"
 | 
			
		||||
msgstr "Профилиран алармен часовник"
 | 
			
		||||
 | 
			
		||||
#: sysdeps/osf1/siglist.c:55 sysdeps/sun4/siglist.c:55
 | 
			
		||||
#: ../sysdeps/osf1/siglist.c:55 ../sysdeps/sun4/siglist.c:55
 | 
			
		||||
msgid "Window size change"
 | 
			
		||||
msgstr "Променяне размера на прозорец"
 | 
			
		||||
 | 
			
		||||
#: sysdeps/osf1/siglist.c:56 sysdeps/sun4/siglist.c:56
 | 
			
		||||
#: ../sysdeps/osf1/siglist.c:56 ../sysdeps/sun4/siglist.c:56
 | 
			
		||||
msgid "Information request"
 | 
			
		||||
msgstr "Заявка за данни"
 | 
			
		||||
 | 
			
		||||
#: sysdeps/osf1/siglist.c:57 sysdeps/sun4/siglist.c:57
 | 
			
		||||
#: ../sysdeps/osf1/siglist.c:57 ../sysdeps/sun4/siglist.c:57
 | 
			
		||||
msgid "User defined signal 1"
 | 
			
		||||
msgstr "Сигнал на потребител 1"
 | 
			
		||||
 | 
			
		||||
#: sysdeps/osf1/siglist.c:58 sysdeps/sun4/siglist.c:58
 | 
			
		||||
#: ../sysdeps/osf1/siglist.c:58 ../sysdeps/sun4/siglist.c:58
 | 
			
		||||
msgid "User defined signal 2"
 | 
			
		||||
msgstr "Сигнал на потребител 2"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										6
									
								
								po/de.po
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								po/de.po
									
									
									
									
									
								
							@@ -11,8 +11,8 @@ msgstr ""
 | 
			
		||||
"Project-Id-Version: libgtop 2.5.0\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: \n"
 | 
			
		||||
"POT-Creation-Date: 2005-01-16 16:59+0100\n"
 | 
			
		||||
"PO-Revision-Date: 2005-01-16 17:00+0100\n"
 | 
			
		||||
"Last-Translator: Hendrik Richter <hendrik@gnome-de.org>\n"
 | 
			
		||||
"PO-Revision-Date: 2005-07-04 17:11+0200\n"
 | 
			
		||||
"Last-Translator: Hendrik Richter <hendi@gnome-de.org>\n"
 | 
			
		||||
"Language-Team: German <gnome-de@gnome.org>\n"
 | 
			
		||||
"MIME-Version: 1.0\n"
 | 
			
		||||
"Content-Type: text/plain; charset=UTF-8\n"
 | 
			
		||||
@@ -967,7 +967,7 @@ msgstr "Benutzerdefiniertes Signal 2"
 | 
			
		||||
#~ msgstr "Sitzungskennung"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Full device number of controlling terminal"
 | 
			
		||||
#~ msgstr "Volle Gerätenummer des kontrolierenden Terminals"
 | 
			
		||||
#~ msgstr "Volle Gerätenummer des kontrollierenden Terminals"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Terminal process group ID"
 | 
			
		||||
#~ msgstr "Terminalprozessgruppenkennung"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								po/gl.po
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								po/gl.po
									
									
									
									
									
								
							@@ -16,7 +16,7 @@ msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: libgtop.gnome-2-10\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: \n"
 | 
			
		||||
"POT-Creation-Date: 2005-06-13 17:24+0200\n"
 | 
			
		||||
"POT-Creation-Date: 2005-06-13 17:26+0200\n"
 | 
			
		||||
"PO-Revision-Date: 2005-06-13 17:22+0200\n"
 | 
			
		||||
"Last-Translator: Ignacio Casal Quinteiro <nacho.resa@gmail.com>\n"
 | 
			
		||||
"Language-Team: Galego\n"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										535
									
								
								po/ne.po
									
									
									
									
									
								
							
							
						
						
									
										535
									
								
								po/ne.po
									
									
									
									
									
								
							@@ -1,213 +1,322 @@
 | 
			
		||||
# translation of libgtop.HEAD.po to Nepali
 | 
			
		||||
# Nepali Translation Project.
 | 
			
		||||
# This file is distributed under the same license as the libgtop package.
 | 
			
		||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER.
 | 
			
		||||
# Pawan Chitrakar  <pawan@nplinux.org>, 2004.
 | 
			
		||||
# Jaydeep Bhusal <zaydeep@hotmail.com>, 2005.
 | 
			
		||||
#
 | 
			
		||||
msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: libgtop.HEAD\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: \n"
 | 
			
		||||
"POT-Creation-Date: 2005-08-06 18:56+0545\n"
 | 
			
		||||
"PO-Revision-Date: 2005-06-02 10:54+0545\n"
 | 
			
		||||
"Last-Translator: Jaydeep Bhusal <zaydeep@hotmail.com>\n"
 | 
			
		||||
"Language-Team: Nepali <info@mpp.org.np>\n"
 | 
			
		||||
"MIME-Version: 1.0\n"
 | 
			
		||||
"Content-Type: text/plain; charset=UTF-8\n"
 | 
			
		||||
"Content-Transfer-Encoding: 8bit\n"
 | 
			
		||||
"X-Poedit-Language: Nepali\n"
 | 
			
		||||
"X-Poedit-Country: NEPAL\n"
 | 
			
		||||
"X-Poedit-SourceCharset: utf-8\n"
 | 
			
		||||
"X-Generator: KBabel 1.9.1\n"
 | 
			
		||||
"Plural-Forms: nplurals=2;plural=(n!=1)\n"
 | 
			
		||||
 | 
			
		||||
#: ../lib/read.c:65
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "read %d byte"
 | 
			
		||||
msgid_plural "read %d bytes"
 | 
			
		||||
msgstr[0] "%d बाइट पढ्नुहोस"
 | 
			
		||||
msgstr[1] "%d बाइटहरु पढ्नुहोस"
 | 
			
		||||
 | 
			
		||||
#: ../lib/read_data.c:53
 | 
			
		||||
msgid "read data size"
 | 
			
		||||
msgstr "तथ्य आकार पढ"
 | 
			
		||||
 | 
			
		||||
#: ../lib/read_data.c:72
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "read %lu byte of data"
 | 
			
		||||
msgid_plural "read %lu bytes of data"
 | 
			
		||||
msgstr[0] "डाटाको %lu बाइट पढ्नुहोस"
 | 
			
		||||
msgstr[1] "डाटाको %lu बाइटहरु पढ्नुहोस"
 | 
			
		||||
 | 
			
		||||
#: ../lib/write.c:52
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "wrote %d byte"
 | 
			
		||||
msgid_plural "wrote %d bytes"
 | 
			
		||||
msgstr[0] "%d बाइट लेख्यो"
 | 
			
		||||
msgstr[1] "%d बाइटहरु लेख्यो"
 | 
			
		||||
 | 
			
		||||
#: ../src/daemon/gnuserv.c:460
 | 
			
		||||
msgid "Enable debugging"
 | 
			
		||||
msgstr "डिबग गर्न सक्षम गर"
 | 
			
		||||
 | 
			
		||||
#: ../src/daemon/gnuserv.c:460
 | 
			
		||||
msgid "DEBUG"
 | 
			
		||||
msgstr "डिबग"
 | 
			
		||||
 | 
			
		||||
#: ../src/daemon/gnuserv.c:462
 | 
			
		||||
msgid "Enable verbose output"
 | 
			
		||||
msgstr "भर्बोज निवेश सक्षम गर"
 | 
			
		||||
 | 
			
		||||
#: ../src/daemon/gnuserv.c:462
 | 
			
		||||
msgid "VERBOSE"
 | 
			
		||||
msgstr "भर्बोज"
 | 
			
		||||
 | 
			
		||||
#: ../src/daemon/gnuserv.c:464
 | 
			
		||||
msgid "Don't fork into background"
 | 
			
		||||
msgstr "पृष्ठभुमिमा फोर्क नगर्नुहोस"
 | 
			
		||||
 | 
			
		||||
#: ../src/daemon/gnuserv.c:464
 | 
			
		||||
msgid "NO-DAEMON"
 | 
			
		||||
msgstr "अवतारिक छैन"
 | 
			
		||||
 | 
			
		||||
#: ../src/daemon/gnuserv.c:466
 | 
			
		||||
msgid "Invoked from inetd"
 | 
			
		||||
msgstr "इनेट्डबाट जगाइएको"
 | 
			
		||||
 | 
			
		||||
#: ../src/daemon/gnuserv.c:466
 | 
			
		||||
msgid "INETD"
 | 
			
		||||
msgstr "इनेट्ड"
 | 
			
		||||
 | 
			
		||||
#: ../src/daemon/gnuserv.c:500
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid ""
 | 
			
		||||
"Error on option %s: %s.\n"
 | 
			
		||||
"Run '%s --help' to see a full list of available command line options.\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"%s: %s विकल्पमा त्रटि।\n"
 | 
			
		||||
"उपलब्ध आदेशरेखाको विकल्पहरुको एउटा पूर्ण सूची हेर्नको निम्ति '%s --मद्दत' सञ्चालन गर।\n"
 | 
			
		||||
 | 
			
		||||
#: ../sysdeps/osf1/siglist.c:28 ../sysdeps/sun4/siglist.c:28
 | 
			
		||||
msgid "Hangup"
 | 
			
		||||
msgstr "सम्पर्क छुटाउ"
 | 
			
		||||
 | 
			
		||||
#: ../sysdeps/osf1/siglist.c:29 ../sysdeps/sun4/siglist.c:29
 | 
			
		||||
msgid "Interrupt"
 | 
			
		||||
msgstr "रोक(अबरोध) "
 | 
			
		||||
 | 
			
		||||
#: ../sysdeps/osf1/siglist.c:30 ../sysdeps/sun4/siglist.c:30
 | 
			
		||||
msgid "Quit"
 | 
			
		||||
msgstr "बाहिर जाउ"
 | 
			
		||||
 | 
			
		||||
#: ../sysdeps/osf1/siglist.c:31 ../sysdeps/sun4/siglist.c:31
 | 
			
		||||
msgid "Illegal instruction"
 | 
			
		||||
msgstr "अवैध उपदेश"
 | 
			
		||||
 | 
			
		||||
#: ../sysdeps/osf1/siglist.c:32 ../sysdeps/sun4/siglist.c:32
 | 
			
		||||
msgid "Trace trap"
 | 
			
		||||
msgstr "ट्याप खोज"
 | 
			
		||||
 | 
			
		||||
#: ../sysdeps/osf1/siglist.c:33 ../sysdeps/sun4/siglist.c:33
 | 
			
		||||
msgid "Abort"
 | 
			
		||||
msgstr "रोक्नु"
 | 
			
		||||
 | 
			
		||||
#: ../sysdeps/osf1/siglist.c:34 ../sysdeps/sun4/siglist.c:34
 | 
			
		||||
msgid "EMT error"
 | 
			
		||||
msgstr "इयमटि त्रुटि"
 | 
			
		||||
 | 
			
		||||
#: ../sysdeps/osf1/siglist.c:35 ../sysdeps/sun4/siglist.c:35
 | 
			
		||||
msgid "Floating-point exception"
 | 
			
		||||
msgstr "फ्लोटिङ्ग-प्वाइन्ट अपबाद"
 | 
			
		||||
 | 
			
		||||
#: ../sysdeps/osf1/siglist.c:36 ../sysdeps/sun4/siglist.c:36
 | 
			
		||||
msgid "Kill"
 | 
			
		||||
msgstr "नास गर"
 | 
			
		||||
 | 
			
		||||
#: ../sysdeps/osf1/siglist.c:37 ../sysdeps/sun4/siglist.c:37
 | 
			
		||||
msgid "Bus error"
 | 
			
		||||
msgstr "बस त्रुटि"
 | 
			
		||||
 | 
			
		||||
#: ../sysdeps/osf1/siglist.c:38 ../sysdeps/sun4/siglist.c:38
 | 
			
		||||
msgid "Segmentation violation"
 | 
			
		||||
msgstr "खण्डीकरण उल्लंघन"
 | 
			
		||||
 | 
			
		||||
#: ../sysdeps/osf1/siglist.c:39 ../sysdeps/sun4/siglist.c:39
 | 
			
		||||
msgid "Bad argument to system call"
 | 
			
		||||
msgstr "प्रणाली बोलाहटलाई खराब आर्गुमेन्ट"
 | 
			
		||||
 | 
			
		||||
#: ../sysdeps/osf1/siglist.c:40 ../sysdeps/sun4/siglist.c:40
 | 
			
		||||
msgid "Broken pipe"
 | 
			
		||||
msgstr "फुटेको पाइप"
 | 
			
		||||
 | 
			
		||||
#: ../sysdeps/osf1/siglist.c:41 ../sysdeps/sun4/siglist.c:41
 | 
			
		||||
msgid "Alarm clock"
 | 
			
		||||
msgstr "जागरन घडी"
 | 
			
		||||
 | 
			
		||||
#: ../sysdeps/osf1/siglist.c:42 ../sysdeps/sun4/siglist.c:42
 | 
			
		||||
msgid "Termination"
 | 
			
		||||
msgstr "समाप्त गर"
 | 
			
		||||
 | 
			
		||||
#: ../sysdeps/osf1/siglist.c:43 ../sysdeps/sun4/siglist.c:43
 | 
			
		||||
msgid "Urgent condition on socket"
 | 
			
		||||
msgstr "खोपिल्टोमा आकस्मिक अवस्था(गतिविधि)"
 | 
			
		||||
 | 
			
		||||
#: ../sysdeps/osf1/siglist.c:44 ../sysdeps/sun4/siglist.c:44
 | 
			
		||||
msgid "Stop"
 | 
			
		||||
msgstr "रोक"
 | 
			
		||||
 | 
			
		||||
#: ../sysdeps/osf1/siglist.c:45 ../sysdeps/sun4/siglist.c:45
 | 
			
		||||
msgid "Keyboard stop"
 | 
			
		||||
msgstr "किबोर्ड रोक"
 | 
			
		||||
 | 
			
		||||
#: ../sysdeps/osf1/siglist.c:46 ../sysdeps/sun4/siglist.c:46
 | 
			
		||||
msgid "Continue"
 | 
			
		||||
msgstr "जारी राख"
 | 
			
		||||
 | 
			
		||||
#: ../sysdeps/osf1/siglist.c:47 ../sysdeps/sun4/siglist.c:47
 | 
			
		||||
msgid "Child status has changed"
 | 
			
		||||
msgstr "बालक वस्तुस्थिति परिवर्तन गरिएको छ"
 | 
			
		||||
 | 
			
		||||
#: ../sysdeps/osf1/siglist.c:48 ../sysdeps/sun4/siglist.c:48
 | 
			
		||||
msgid "Background read from tty"
 | 
			
		||||
msgstr "टिटिवाइ बाट पृष्ठभुमि पढाइ"
 | 
			
		||||
 | 
			
		||||
#: ../sysdeps/osf1/siglist.c:49 ../sysdeps/sun4/siglist.c:49
 | 
			
		||||
msgid "Background write to tty"
 | 
			
		||||
msgstr "टिटिवाइ बाट पृष्ठभुमि लेखाइ"
 | 
			
		||||
 | 
			
		||||
#: ../sysdeps/osf1/siglist.c:50 ../sysdeps/sun4/siglist.c:50
 | 
			
		||||
msgid "I/O now possible"
 | 
			
		||||
msgstr "प्र/नि अब सम्भव "
 | 
			
		||||
 | 
			
		||||
#: ../sysdeps/osf1/siglist.c:51 ../sysdeps/sun4/siglist.c:51
 | 
			
		||||
msgid "CPU limit exceeded"
 | 
			
		||||
msgstr "सिपियुको सीमा नाघियो"
 | 
			
		||||
 | 
			
		||||
#: ../sysdeps/osf1/siglist.c:52 ../sysdeps/sun4/siglist.c:52
 | 
			
		||||
msgid "File size limit exceeded"
 | 
			
		||||
msgstr "फाईलको आकारको सीमा नाघियो"
 | 
			
		||||
 | 
			
		||||
#: ../sysdeps/osf1/siglist.c:53 ../sysdeps/sun4/siglist.c:53
 | 
			
		||||
msgid "Virtual alarm clock"
 | 
			
		||||
msgstr "काल्पनिक जागरन घडी "
 | 
			
		||||
 | 
			
		||||
#: ../sysdeps/osf1/siglist.c:54 ../sysdeps/sun4/siglist.c:54
 | 
			
		||||
msgid "Profiling alarm clock"
 | 
			
		||||
msgstr "जागरन घडीको प्रोफाईलहुदैछ"
 | 
			
		||||
 | 
			
		||||
#: ../sysdeps/osf1/siglist.c:55 ../sysdeps/sun4/siglist.c:55
 | 
			
		||||
msgid "Window size change"
 | 
			
		||||
msgstr "विन्डो आकार परिवर्तन"
 | 
			
		||||
 | 
			
		||||
#: ../sysdeps/osf1/siglist.c:56 ../sysdeps/sun4/siglist.c:56
 | 
			
		||||
msgid "Information request"
 | 
			
		||||
msgstr "जानकारी अनुरोध"
 | 
			
		||||
 | 
			
		||||
#: ../sysdeps/osf1/siglist.c:57 ../sysdeps/sun4/siglist.c:57
 | 
			
		||||
msgid "User defined signal 1"
 | 
			
		||||
msgstr "प्रयोगकर्ताद्वारा परिभषित संकेत १"
 | 
			
		||||
 | 
			
		||||
#: ../sysdeps/osf1/siglist.c:58 ../sysdeps/sun4/siglist.c:58
 | 
			
		||||
msgid "User defined signal 2"
 | 
			
		||||
msgstr "प्रयोगकर्ताद्वारा परिभषित संकेत २"
 | 
			
		||||
# Nepali Translation Project.
 | 
			
		||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 | 
			
		||||
# This file is distributed under the same license as the libgtop package.
 | 
			
		||||
# Pawan Chitrakar  <pawan@nplinux.org>, 2004.
 | 
			
		||||
#
 | 
			
		||||
msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: levgtop.HEAD.ne.po\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: \n"
 | 
			
		||||
"POT-Creation-Date: 2004-12-11 04:37+0100\n"
 | 
			
		||||
"PO-Revision-Date: 2004-12-25 04:13+0545\n"
 | 
			
		||||
"Last-Translator: Rajeev Shrestha <rstha@ecomail.com.np>\n"
 | 
			
		||||
"Language-Team: NEPALI <info@mpp.org.np>\n"
 | 
			
		||||
"MIME-Version: 1.0\n"
 | 
			
		||||
"Content-Type: text/plain; charset=utf-8\n"
 | 
			
		||||
"Content-Transfer-Encoding: 8bit\n"
 | 
			
		||||
"X-Poedit-Language: Nepali\n"
 | 
			
		||||
"X-Poedit-Country: NEPAL\n"
 | 
			
		||||
"X-Poedit-SourceCharset: utf-8\n"
 | 
			
		||||
 | 
			
		||||
#: examples/smp.c:76
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Ticks (%ld per second):"
 | 
			
		||||
msgstr "टिकटिक गर्छ (%ld प्रति सेकेन्ड):"
 | 
			
		||||
 | 
			
		||||
#: examples/smp.c:79
 | 
			
		||||
msgid "Total"
 | 
			
		||||
msgstr "जम्मा"
 | 
			
		||||
 | 
			
		||||
#: examples/smp.c:79
 | 
			
		||||
msgid "User"
 | 
			
		||||
msgstr "प्रयोगकर्ता"
 | 
			
		||||
 | 
			
		||||
#: examples/smp.c:79
 | 
			
		||||
msgid "Nice"
 | 
			
		||||
msgstr "असल"
 | 
			
		||||
 | 
			
		||||
#: examples/smp.c:79
 | 
			
		||||
msgid "Sys"
 | 
			
		||||
msgstr "प्रणाली"
 | 
			
		||||
 | 
			
		||||
#: examples/smp.c:79
 | 
			
		||||
msgid "Idle"
 | 
			
		||||
msgstr "बेकाम"
 | 
			
		||||
 | 
			
		||||
#: examples/smp.c:81
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid ""
 | 
			
		||||
"CPU          (0x%08lx): %12.0f %12.0f %12.0f %12.0f %12.0f\n"
 | 
			
		||||
"\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"सिपियु  (0x%08lx): %12.0f %12.0f %12.0f %12.0f %12.0f\n"
 | 
			
		||||
"\n"
 | 
			
		||||
 | 
			
		||||
#: examples/smp.c:85
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "CPU %3d      (0x%08lx): %12lu %12lu %12lu %12lu %12lu\n"
 | 
			
		||||
msgstr "सिपियु%3d      (0x%08lx): %12lu %12lu %12lu %12lu %12lu\n"
 | 
			
		||||
 | 
			
		||||
#: examples/smp.c:102
 | 
			
		||||
msgid "Percent:"
 | 
			
		||||
msgstr "प्रतिशत:"
 | 
			
		||||
 | 
			
		||||
#: examples/smp.c:103
 | 
			
		||||
msgid "Total (%)"
 | 
			
		||||
msgstr "जम्मा(%)"
 | 
			
		||||
 | 
			
		||||
#: examples/smp.c:103
 | 
			
		||||
msgid "User (%)"
 | 
			
		||||
msgstr "प्रयोगकर्ता(%)"
 | 
			
		||||
 | 
			
		||||
#: examples/smp.c:103
 | 
			
		||||
msgid "Nice (%)"
 | 
			
		||||
msgstr "असल(%)"
 | 
			
		||||
 | 
			
		||||
#: examples/smp.c:103
 | 
			
		||||
msgid "Sys (%)"
 | 
			
		||||
msgstr "प्रणाली(%)"
 | 
			
		||||
 | 
			
		||||
#: examples/smp.c:104
 | 
			
		||||
msgid "Idle (%)"
 | 
			
		||||
msgstr "बेकाम(%)"
 | 
			
		||||
 | 
			
		||||
#: examples/smp.c:106
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid ""
 | 
			
		||||
"CPU          (0x%08lx): %12.3f %12.3f %12.3f %12.3f %12.3f\n"
 | 
			
		||||
"\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"सिपियु   (0x%08lx): %12.3f %12.3f %12.3f %12.3f %12.3f\n"
 | 
			
		||||
"\n"
 | 
			
		||||
 | 
			
		||||
#: examples/smp.c:122
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "CPU %3d      (0x%08lx): %12.3f %12.3f %12.3f %12.3f %12.3f\n"
 | 
			
		||||
msgstr "सिपियु%3d       (0x%08lx): %12.3f %12.3f %12.3f %12.3f %12.3f\n"
 | 
			
		||||
 | 
			
		||||
#: examples/smp.c:128
 | 
			
		||||
msgid "Spin:"
 | 
			
		||||
msgstr "घुम:"
 | 
			
		||||
 | 
			
		||||
#: lib/read.c:64
 | 
			
		||||
#, fuzzy, c-format
 | 
			
		||||
msgid "read %d byte"
 | 
			
		||||
msgid_plural "read %d bytes"
 | 
			
		||||
msgstr[0] "[पढ्ने मात्र]"
 | 
			
		||||
msgstr[1] ""
 | 
			
		||||
 | 
			
		||||
#: lib/read_data.c:51
 | 
			
		||||
msgid "read data size"
 | 
			
		||||
msgstr "तथ्य आकार पढ"
 | 
			
		||||
 | 
			
		||||
#: lib/read_data.c:68
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "read data %d byte"
 | 
			
		||||
msgid_plural "read data %d bytes"
 | 
			
		||||
msgstr[0] ""
 | 
			
		||||
msgstr[1] ""
 | 
			
		||||
 | 
			
		||||
#: lib/write.c:51
 | 
			
		||||
#, fuzzy, c-format
 | 
			
		||||
msgid "write %d byte"
 | 
			
		||||
msgid_plural "write %d bytes"
 | 
			
		||||
msgstr[0] "लेख्न निषेध"
 | 
			
		||||
msgstr[1] ""
 | 
			
		||||
 | 
			
		||||
#: src/daemon/gnuserv.c:461
 | 
			
		||||
msgid "Enable debugging"
 | 
			
		||||
msgstr "डिबग गर्न सक्षम गर"
 | 
			
		||||
 | 
			
		||||
#: src/daemon/gnuserv.c:461
 | 
			
		||||
msgid "DEBUG"
 | 
			
		||||
msgstr "डिबग"
 | 
			
		||||
 | 
			
		||||
#: src/daemon/gnuserv.c:463
 | 
			
		||||
msgid "Enable verbose output"
 | 
			
		||||
msgstr "भर्बोज निवेश सक्षम गर"
 | 
			
		||||
 | 
			
		||||
#: src/daemon/gnuserv.c:463
 | 
			
		||||
msgid "VERBOSE"
 | 
			
		||||
msgstr "भर्बोज"
 | 
			
		||||
 | 
			
		||||
#: src/daemon/gnuserv.c:465
 | 
			
		||||
msgid "Don't fork into background"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/daemon/gnuserv.c:465
 | 
			
		||||
msgid "NO-DAEMON"
 | 
			
		||||
msgstr "अवतारिक छैन"
 | 
			
		||||
 | 
			
		||||
#: src/daemon/gnuserv.c:467
 | 
			
		||||
msgid "Invoked from inetd"
 | 
			
		||||
msgstr "इनेट्डबाट जगाइएको"
 | 
			
		||||
 | 
			
		||||
#: src/daemon/gnuserv.c:467
 | 
			
		||||
msgid "INETD"
 | 
			
		||||
msgstr "इनेट्ड"
 | 
			
		||||
 | 
			
		||||
#: src/daemon/gnuserv.c:501
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid ""
 | 
			
		||||
"Error on option %s: %s.\n"
 | 
			
		||||
"Run '%s --help' to see a full list of available command line options.\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"%s: %s विकल्पमा त्रटि।\n"
 | 
			
		||||
"उपलब्ध आदेशरेखाको विकल्पहरुको एउटा पूर्ण सूची हेर्नको निम्ति '%s --मद्दत' सञ्चालन गर।\n"
 | 
			
		||||
 | 
			
		||||
#: sysdeps/osf1/siglist.c:28
 | 
			
		||||
#: sysdeps/sun4/siglist.c:28
 | 
			
		||||
msgid "Hangup"
 | 
			
		||||
msgstr "सम्पर्क छुटाउ"
 | 
			
		||||
 | 
			
		||||
#: sysdeps/osf1/siglist.c:29
 | 
			
		||||
#: sysdeps/sun4/siglist.c:29
 | 
			
		||||
msgid "Interrupt"
 | 
			
		||||
msgstr "रोक(अबरोध) "
 | 
			
		||||
 | 
			
		||||
#: sysdeps/osf1/siglist.c:30
 | 
			
		||||
#: sysdeps/sun4/siglist.c:30
 | 
			
		||||
msgid "Quit"
 | 
			
		||||
msgstr "बाहिर जाउ"
 | 
			
		||||
 | 
			
		||||
#: sysdeps/osf1/siglist.c:31
 | 
			
		||||
#: sysdeps/sun4/siglist.c:31
 | 
			
		||||
msgid "Illegal instruction"
 | 
			
		||||
msgstr "अवैध उपदेश"
 | 
			
		||||
 | 
			
		||||
#: sysdeps/osf1/siglist.c:32
 | 
			
		||||
#: sysdeps/sun4/siglist.c:32
 | 
			
		||||
msgid "Trace trap"
 | 
			
		||||
msgstr "ट्याप खोज"
 | 
			
		||||
 | 
			
		||||
#: sysdeps/osf1/siglist.c:33
 | 
			
		||||
#: sysdeps/sun4/siglist.c:33
 | 
			
		||||
msgid "Abort"
 | 
			
		||||
msgstr "रोक्नु"
 | 
			
		||||
 | 
			
		||||
#: sysdeps/osf1/siglist.c:34
 | 
			
		||||
#: sysdeps/sun4/siglist.c:34
 | 
			
		||||
msgid "EMT error"
 | 
			
		||||
msgstr "इयमटि त्रुटि"
 | 
			
		||||
 | 
			
		||||
#: sysdeps/osf1/siglist.c:35
 | 
			
		||||
#: sysdeps/sun4/siglist.c:35
 | 
			
		||||
msgid "Floating-point exception"
 | 
			
		||||
msgstr "फ्लोटिङ्ग-प्वाइन्ट अपबाद"
 | 
			
		||||
 | 
			
		||||
#: sysdeps/osf1/siglist.c:36
 | 
			
		||||
#: sysdeps/sun4/siglist.c:36
 | 
			
		||||
msgid "Kill"
 | 
			
		||||
msgstr "नास गर"
 | 
			
		||||
 | 
			
		||||
#: sysdeps/osf1/siglist.c:37
 | 
			
		||||
#: sysdeps/sun4/siglist.c:37
 | 
			
		||||
msgid "Bus error"
 | 
			
		||||
msgstr "बस त्रुटि"
 | 
			
		||||
 | 
			
		||||
#: sysdeps/osf1/siglist.c:38
 | 
			
		||||
#: sysdeps/sun4/siglist.c:38
 | 
			
		||||
msgid "Segmentation violation"
 | 
			
		||||
msgstr "खण्डीकरण उल्लंघन"
 | 
			
		||||
 | 
			
		||||
#: sysdeps/osf1/siglist.c:39
 | 
			
		||||
#: sysdeps/sun4/siglist.c:39
 | 
			
		||||
msgid "Bad argument to system call"
 | 
			
		||||
msgstr "प्रणाली बोलाहटलाई खराब आर्गुमेन्ट"
 | 
			
		||||
 | 
			
		||||
#: sysdeps/osf1/siglist.c:40
 | 
			
		||||
#: sysdeps/sun4/siglist.c:40
 | 
			
		||||
msgid "Broken pipe"
 | 
			
		||||
msgstr "फुटेको पाइप"
 | 
			
		||||
 | 
			
		||||
#: sysdeps/osf1/siglist.c:41
 | 
			
		||||
#: sysdeps/sun4/siglist.c:41
 | 
			
		||||
msgid "Alarm clock"
 | 
			
		||||
msgstr "जागरन घडी"
 | 
			
		||||
 | 
			
		||||
#: sysdeps/osf1/siglist.c:42
 | 
			
		||||
#: sysdeps/sun4/siglist.c:42
 | 
			
		||||
msgid "Termination"
 | 
			
		||||
msgstr "समाप्त गर"
 | 
			
		||||
 | 
			
		||||
#: sysdeps/osf1/siglist.c:43
 | 
			
		||||
#: sysdeps/sun4/siglist.c:43
 | 
			
		||||
msgid "Urgent condition on socket"
 | 
			
		||||
msgstr "खोपिल्टोमा आकस्मिक अवस्था(गतिविधि)"
 | 
			
		||||
 | 
			
		||||
#: sysdeps/osf1/siglist.c:44
 | 
			
		||||
#: sysdeps/sun4/siglist.c:44
 | 
			
		||||
msgid "Stop"
 | 
			
		||||
msgstr "रोक"
 | 
			
		||||
 | 
			
		||||
#: sysdeps/osf1/siglist.c:45
 | 
			
		||||
#: sysdeps/sun4/siglist.c:45
 | 
			
		||||
msgid "Keyboard stop"
 | 
			
		||||
msgstr "किबोर्ड रोक"
 | 
			
		||||
 | 
			
		||||
#: sysdeps/osf1/siglist.c:46
 | 
			
		||||
#: sysdeps/sun4/siglist.c:46
 | 
			
		||||
msgid "Continue"
 | 
			
		||||
msgstr "जारी राख"
 | 
			
		||||
 | 
			
		||||
#: sysdeps/osf1/siglist.c:47
 | 
			
		||||
#: sysdeps/sun4/siglist.c:47
 | 
			
		||||
msgid "Child status has changed"
 | 
			
		||||
msgstr "बालक वस्तुस्थिति परिवर्तन गरिएको छ"
 | 
			
		||||
 | 
			
		||||
#: sysdeps/osf1/siglist.c:48
 | 
			
		||||
#: sysdeps/sun4/siglist.c:48
 | 
			
		||||
msgid "Background read from tty"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: sysdeps/osf1/siglist.c:49
 | 
			
		||||
#: sysdeps/sun4/siglist.c:49
 | 
			
		||||
msgid "Background write to tty"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: sysdeps/osf1/siglist.c:50
 | 
			
		||||
#: sysdeps/sun4/siglist.c:50
 | 
			
		||||
msgid "I/O now possible"
 | 
			
		||||
msgstr "प्र/नि अब सम्भव "
 | 
			
		||||
 | 
			
		||||
#: sysdeps/osf1/siglist.c:51
 | 
			
		||||
#: sysdeps/sun4/siglist.c:51
 | 
			
		||||
msgid "CPU limit exceeded"
 | 
			
		||||
msgstr "सिपियुको सीमा नाघियो"
 | 
			
		||||
 | 
			
		||||
#: sysdeps/osf1/siglist.c:52
 | 
			
		||||
#: sysdeps/sun4/siglist.c:52
 | 
			
		||||
msgid "File size limit exceeded"
 | 
			
		||||
msgstr "फाईलको आकारको सीमा नाघियो"
 | 
			
		||||
 | 
			
		||||
#: sysdeps/osf1/siglist.c:53
 | 
			
		||||
#: sysdeps/sun4/siglist.c:53
 | 
			
		||||
msgid "Virtual alarm clock"
 | 
			
		||||
msgstr "काल्पनिक जागरन घडी "
 | 
			
		||||
 | 
			
		||||
#: sysdeps/osf1/siglist.c:54
 | 
			
		||||
#: sysdeps/sun4/siglist.c:54
 | 
			
		||||
msgid "Profiling alarm clock"
 | 
			
		||||
msgstr "जागरन घडीको प्रोफाईलहुदैछ"
 | 
			
		||||
 | 
			
		||||
#: sysdeps/osf1/siglist.c:55
 | 
			
		||||
#: sysdeps/sun4/siglist.c:55
 | 
			
		||||
msgid "Window size change"
 | 
			
		||||
msgstr "विन्डो आकार परिवर्तन"
 | 
			
		||||
 | 
			
		||||
#: sysdeps/osf1/siglist.c:56
 | 
			
		||||
#: sysdeps/sun4/siglist.c:56
 | 
			
		||||
msgid "Information request"
 | 
			
		||||
msgstr "जानकारी अनुरोध"
 | 
			
		||||
 | 
			
		||||
#: sysdeps/osf1/siglist.c:57
 | 
			
		||||
#: sysdeps/sun4/siglist.c:57
 | 
			
		||||
msgid "User defined signal 1"
 | 
			
		||||
msgstr "प्रयोगकर्ताद्वारा परिभषित संकेत १"
 | 
			
		||||
 | 
			
		||||
#: sysdeps/osf1/siglist.c:58
 | 
			
		||||
#: sysdeps/sun4/siglist.c:58
 | 
			
		||||
msgid "User defined signal 2"
 | 
			
		||||
msgstr "प्रयोगकर्ताद्वारा परिभषित संकेत २"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										879
									
								
								po/vi.po
									
									
									
									
									
								
							
							
						
						
									
										879
									
								
								po/vi.po
									
									
									
									
									
								
							@@ -7,12 +7,12 @@ msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: libgtop GNOME 2.10\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: \n"
 | 
			
		||||
"POT-Creation-Date: 2005-06-26 21:06+0000\n"
 | 
			
		||||
"POT-Creation-Date: 2005-07-21 06:40+0000\n"
 | 
			
		||||
"PO-Revision-Date: 2005-07-01 18:03+0930\n"
 | 
			
		||||
"Last-Translator: Clytie Siddall <clytie@riverland.net.au>\n"
 | 
			
		||||
"Language-Team: Vietnamese <gnomevi-list@lists.sourceforge.net>\n"
 | 
			
		||||
"MIME-Version: 1.0\n"
 | 
			
		||||
"Content-Type: text/plain; charset=utf-8\n"
 | 
			
		||||
"Content-Type: text/plain; charset=UTF-8\n"
 | 
			
		||||
"Content-Transfer-Encoding: 8bit\n"
 | 
			
		||||
"Plural-Forms: nplurals=1; plural=0\n"
 | 
			
		||||
"X-Generator: LocFactoryEditor 1.2.2\n"
 | 
			
		||||
@@ -203,3 +203,878 @@ msgstr "Tín hiệu do người dùng định nghĩa 1"
 | 
			
		||||
#: ../sysdeps/osf1/siglist.c:58 ../sysdeps/sun4/siglist.c:58
 | 
			
		||||
msgid "User defined signal 2"
 | 
			
		||||
msgstr "Tín hiệu do người dùng định nghĩa 2"
 | 
			
		||||
 | 
			
		||||
msgid "Ticks (%ld per second):"
 | 
			
		||||
msgstr "Nhịp (%ld lần 1 giây):"
 | 
			
		||||
 | 
			
		||||
msgid "Total"
 | 
			
		||||
msgstr "Tổng cộng"
 | 
			
		||||
 | 
			
		||||
msgid "User"
 | 
			
		||||
msgstr "Người dùng"
 | 
			
		||||
 | 
			
		||||
msgid "Nice"
 | 
			
		||||
msgstr "Ưu tiên"
 | 
			
		||||
 | 
			
		||||
msgid "Sys"
 | 
			
		||||
msgstr "Sys"
 | 
			
		||||
 | 
			
		||||
msgid "Idle"
 | 
			
		||||
msgstr "Rảnh"
 | 
			
		||||
 | 
			
		||||
msgid ""
 | 
			
		||||
"CPU          (0x%08lx): %12.0f %12.0f %12.0f %12.0f %12.0f\n"
 | 
			
		||||
"\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"CPU          (0x%08lx): %12.0f %12.0f %12.0f %12.0f %12.0f\n"
 | 
			
		||||
"\n"
 | 
			
		||||
 | 
			
		||||
msgid "CPU %3d      (0x%08lx): %12lu %12lu %12lu %12lu %12lu\n"
 | 
			
		||||
msgstr "CPU %3d      (0x%08lx): %12lu %12lu %12lu %12lu %12lu\n"
 | 
			
		||||
 | 
			
		||||
msgid "Percent:"
 | 
			
		||||
msgstr "Phần trăm:"
 | 
			
		||||
 | 
			
		||||
msgid "Total (%)"
 | 
			
		||||
msgstr "Tổng cộng (%)"
 | 
			
		||||
 | 
			
		||||
msgid "User (%)"
 | 
			
		||||
msgstr "Người dùng (%)"
 | 
			
		||||
 | 
			
		||||
msgid "Nice (%)"
 | 
			
		||||
msgstr "Ưu tiên (%)"
 | 
			
		||||
 | 
			
		||||
msgid "Sys (%)"
 | 
			
		||||
msgstr "Sys (%)"
 | 
			
		||||
 | 
			
		||||
msgid "Idle (%)"
 | 
			
		||||
msgstr "Rảnh (%)"
 | 
			
		||||
 | 
			
		||||
msgid ""
 | 
			
		||||
"CPU          (0x%08lx): %12.3f %12.3f %12.3f %12.3f %12.3f\n"
 | 
			
		||||
"\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"CPU          (0x%08lx): %12.3f %12.3f %12.3f %12.3f %12.3f\n"
 | 
			
		||||
"\n"
 | 
			
		||||
 | 
			
		||||
msgid "CPU %3d      (0x%08lx): %12.3f %12.3f %12.3f %12.3f %12.3f\n"
 | 
			
		||||
msgstr "CPU %3d      (0x%08lx): %12.3f %12.3f %12.3f %12.3f %12.3f\n"
 | 
			
		||||
 | 
			
		||||
msgid "Spin:"
 | 
			
		||||
msgstr "Chiều:"
 | 
			
		||||
 | 
			
		||||
#, fuzzy
 | 
			
		||||
msgid "read data %d byte"
 | 
			
		||||
msgid_plural "read data %d bytes"
 | 
			
		||||
msgstr[0] "đã đọc %d byte"
 | 
			
		||||
 | 
			
		||||
msgid "Total CPU Time"
 | 
			
		||||
msgstr "Tổng thời gian CPU"
 | 
			
		||||
 | 
			
		||||
msgid "CPU Time in User Mode"
 | 
			
		||||
msgstr "Thời gian CPU chế độ người dùng"
 | 
			
		||||
 | 
			
		||||
msgid "CPU Time in User Mode (nice)"
 | 
			
		||||
msgstr "Thời gian CPU chế độ người dùng (nice)"
 | 
			
		||||
 | 
			
		||||
msgid "CPU Time in System Mode"
 | 
			
		||||
msgstr "Thời gian CPU chế độ hệ thống"
 | 
			
		||||
 | 
			
		||||
msgid "CPU Time in the Idle Task"
 | 
			
		||||
msgstr "Thời gian CPU rảnh"
 | 
			
		||||
 | 
			
		||||
msgid "Tick Frequency"
 | 
			
		||||
msgstr "Tần số nhịp"
 | 
			
		||||
 | 
			
		||||
msgid "SMP Total CPU Time"
 | 
			
		||||
msgstr "Tổng thời gian CPU SMP"
 | 
			
		||||
 | 
			
		||||
msgid "SMP CPU Time in User Mode"
 | 
			
		||||
msgstr "Thời gian CPU SMP chế độ người dùng"
 | 
			
		||||
 | 
			
		||||
msgid "SMP CPU Time in User Mode (nice)"
 | 
			
		||||
msgstr "Thời gian CPU SMP chế độ người dùng (nice)"
 | 
			
		||||
 | 
			
		||||
msgid "SMP CPU Time in System Mode"
 | 
			
		||||
msgstr "Thời gian CPU SMP chế độ hệ thống"
 | 
			
		||||
 | 
			
		||||
msgid "SMP CPU Time in the Idle Task"
 | 
			
		||||
msgstr "Thời gian CPU SMP rảnh"
 | 
			
		||||
 | 
			
		||||
msgid "Number of clock ticks since system boot"
 | 
			
		||||
msgstr "SỐ nhịp đồng hồ kể từ khi khởi động máy"
 | 
			
		||||
 | 
			
		||||
msgid "Number of clock ticks the system spent in user mode"
 | 
			
		||||
msgstr "Số nhịp đồng hồ trong chế độ người dùng kể từ khi khởi động máy"
 | 
			
		||||
 | 
			
		||||
msgid "Number of clock ticks the system spent in user mode (nice)"
 | 
			
		||||
msgstr "Số nhịp đồng hồ trong chế độ người dùng kể từ khi khởi động máy (nice)"
 | 
			
		||||
 | 
			
		||||
msgid "Number of clock ticks the system spent in system mode"
 | 
			
		||||
msgstr "Số nhịp đồng hồ trong chế độ hệ thống kể từ khi khởi động máy"
 | 
			
		||||
 | 
			
		||||
msgid "Number of clock ticks the system spent in the idle task"
 | 
			
		||||
msgstr "Số nhịp đồng hồ rảnh kể từ khi khởi độn máy"
 | 
			
		||||
 | 
			
		||||
msgid "Tick frequency (default is 100)"
 | 
			
		||||
msgstr "Số nhịp (mặc định 100)"
 | 
			
		||||
 | 
			
		||||
msgid "Total blocks"
 | 
			
		||||
msgstr "Tổng số khối"
 | 
			
		||||
 | 
			
		||||
msgid "Free blocks"
 | 
			
		||||
msgstr "Sổ khối rỗng"
 | 
			
		||||
 | 
			
		||||
msgid "Available blocks"
 | 
			
		||||
msgstr "Số khối sẵn sàng"
 | 
			
		||||
 | 
			
		||||
msgid "Total file nodes"
 | 
			
		||||
msgstr "Tổng số inode"
 | 
			
		||||
 | 
			
		||||
msgid "Free file nodes"
 | 
			
		||||
msgstr "Số inode rỗng"
 | 
			
		||||
 | 
			
		||||
msgid "Block size"
 | 
			
		||||
msgstr "Kích thước khối"
 | 
			
		||||
 | 
			
		||||
msgid "Free blocks available to the superuser"
 | 
			
		||||
msgstr "Số khối sẵn sàng cho root"
 | 
			
		||||
 | 
			
		||||
msgid "Free blocks available to non-superusers"
 | 
			
		||||
msgstr "Số khối sẵn sàng cho người dùng bình thường"
 | 
			
		||||
 | 
			
		||||
msgid "Load Average"
 | 
			
		||||
msgstr "Trung bình tải"
 | 
			
		||||
 | 
			
		||||
msgid "Running Tasks"
 | 
			
		||||
msgstr "Công việc đang chạy"
 | 
			
		||||
 | 
			
		||||
msgid "Number of Tasks"
 | 
			
		||||
msgstr "Số công việc"
 | 
			
		||||
 | 
			
		||||
msgid "Last PID"
 | 
			
		||||
msgstr "PID cuối"
 | 
			
		||||
 | 
			
		||||
msgid "Number of jobs running simultaneously averaged over 1, 5 and 15 minutes"
 | 
			
		||||
msgstr "Số công việc trung bình đang thực hiện đồng thời trong 1, 5 và 15 phút"
 | 
			
		||||
 | 
			
		||||
msgid "Number of tasks currently running"
 | 
			
		||||
msgstr "Số công việc đang chạy"
 | 
			
		||||
 | 
			
		||||
msgid "Total number of tasks"
 | 
			
		||||
msgstr "Tổng số công việc"
 | 
			
		||||
 | 
			
		||||
msgid "Total Memory"
 | 
			
		||||
msgstr "Tổng bộ nhớ"
 | 
			
		||||
 | 
			
		||||
msgid "Used Memory"
 | 
			
		||||
msgstr "Bộ nhớ đã dùng"
 | 
			
		||||
 | 
			
		||||
msgid "Free Memory"
 | 
			
		||||
msgstr "Bộ nhớ trống"
 | 
			
		||||
 | 
			
		||||
msgid "Shared Memory"
 | 
			
		||||
msgstr "Bộ nhớ chia sẻ"
 | 
			
		||||
 | 
			
		||||
msgid "Buffers"
 | 
			
		||||
msgstr "Vùng đệm"
 | 
			
		||||
 | 
			
		||||
msgid "Cached"
 | 
			
		||||
msgstr "Cache"
 | 
			
		||||
 | 
			
		||||
msgid "Locked"
 | 
			
		||||
msgstr "Bị khóa"
 | 
			
		||||
 | 
			
		||||
msgid "Total physical memory in kB"
 | 
			
		||||
msgstr "Tổng bộ nhớ vật lý (kB)"
 | 
			
		||||
 | 
			
		||||
msgid "Used memory size in kB"
 | 
			
		||||
msgstr "Bộ nhớ đã dùng (kB)"
 | 
			
		||||
 | 
			
		||||
msgid "Free memory size in kB"
 | 
			
		||||
msgstr "Bộ nhớ rỗng (kB)"
 | 
			
		||||
 | 
			
		||||
msgid "Shared memory size in kB"
 | 
			
		||||
msgstr "Bộ nhớ chia sẻ (kB)"
 | 
			
		||||
 | 
			
		||||
msgid "Size of buffers kB"
 | 
			
		||||
msgstr "Kích thước vùng đệm (kB)"
 | 
			
		||||
 | 
			
		||||
msgid "Size of cached memory in kB"
 | 
			
		||||
msgstr "Kích thước vùng nhớ cache (kB)"
 | 
			
		||||
 | 
			
		||||
msgid "Memory used from user processes in kB"
 | 
			
		||||
msgstr "Vùng nhớ dùng cho các tiến trình (kB)"
 | 
			
		||||
 | 
			
		||||
msgid "Memory in locked pages in kB"
 | 
			
		||||
msgstr "Vùng nhớ bị khoá (kB)"
 | 
			
		||||
 | 
			
		||||
msgid "Number of list elements"
 | 
			
		||||
msgstr "Số thành phần trong danh sách"
 | 
			
		||||
 | 
			
		||||
msgid "Total size of list"
 | 
			
		||||
msgstr "Tổng kích thước trong danh sách"
 | 
			
		||||
 | 
			
		||||
msgid "Size of a single list element"
 | 
			
		||||
msgstr "Kích thước một mục đơn"
 | 
			
		||||
 | 
			
		||||
msgid "Size in kilobytes of message pool"
 | 
			
		||||
msgstr "Kích thước của message pool (kB)"
 | 
			
		||||
 | 
			
		||||
msgid "Number of entries in message map"
 | 
			
		||||
msgstr "Số mục trong bản đồ thông điệp"
 | 
			
		||||
 | 
			
		||||
msgid "Max size of message"
 | 
			
		||||
msgstr "Kích thước thông điệp tối đa"
 | 
			
		||||
 | 
			
		||||
msgid "Default max size of queue"
 | 
			
		||||
msgstr "Kích thước mặc định tối đa của hàng đợi"
 | 
			
		||||
 | 
			
		||||
msgid "Max queues system wide"
 | 
			
		||||
msgstr "Hàng đợi hệ thống tối đa"
 | 
			
		||||
 | 
			
		||||
msgid "Message segment size"
 | 
			
		||||
msgstr "Kích thước thông điệp"
 | 
			
		||||
 | 
			
		||||
msgid "Number of system message headers"
 | 
			
		||||
msgstr "Số tiêu đề thông điệp hệ thống"
 | 
			
		||||
 | 
			
		||||
msgid "Interface Flags"
 | 
			
		||||
msgstr "Cờ giao tiếp"
 | 
			
		||||
 | 
			
		||||
msgid "MTU"
 | 
			
		||||
msgstr "MTU"
 | 
			
		||||
 | 
			
		||||
msgid "IPv4 Subnet"
 | 
			
		||||
msgstr "Mạng con IPv4"
 | 
			
		||||
 | 
			
		||||
msgid "IPv4 Address"
 | 
			
		||||
msgstr "Địa chỉ IPv4"
 | 
			
		||||
 | 
			
		||||
msgid "Packets In"
 | 
			
		||||
msgstr "Gói tin vào"
 | 
			
		||||
 | 
			
		||||
msgid "Packets Out"
 | 
			
		||||
msgstr "Gói tin ra"
 | 
			
		||||
 | 
			
		||||
msgid "Packets Total"
 | 
			
		||||
msgstr "Tống số gói tin"
 | 
			
		||||
 | 
			
		||||
msgid "Bytes In"
 | 
			
		||||
msgstr "Số byte vào"
 | 
			
		||||
 | 
			
		||||
msgid "Bytes Out"
 | 
			
		||||
msgstr "Số byte ra"
 | 
			
		||||
 | 
			
		||||
msgid "Bytes Total"
 | 
			
		||||
msgstr "Tổng số byte"
 | 
			
		||||
 | 
			
		||||
msgid "Errors In"
 | 
			
		||||
msgstr "Lỗi vào"
 | 
			
		||||
 | 
			
		||||
msgid "Errors Out"
 | 
			
		||||
msgstr "Lỗi ra"
 | 
			
		||||
 | 
			
		||||
msgid "Errors Total"
 | 
			
		||||
msgstr "Tổng số lỗi"
 | 
			
		||||
 | 
			
		||||
msgid "Collisions"
 | 
			
		||||
msgstr "Xung đột"
 | 
			
		||||
 | 
			
		||||
msgid "IPv6 Address"
 | 
			
		||||
msgstr "Địa chỉ IPv6"
 | 
			
		||||
 | 
			
		||||
msgid "Maximum Transfer Unit"
 | 
			
		||||
msgstr "Đơn vị truyền thông tối đa"
 | 
			
		||||
 | 
			
		||||
msgid "PPP State"
 | 
			
		||||
msgstr "Trạng thái PPP"
 | 
			
		||||
 | 
			
		||||
msgid "Input bytes"
 | 
			
		||||
msgstr "Những byte vào"
 | 
			
		||||
 | 
			
		||||
msgid "Output bytes"
 | 
			
		||||
msgstr "Những byte ra"
 | 
			
		||||
 | 
			
		||||
msgid "Number of input bytes"
 | 
			
		||||
msgstr "Số byte vào"
 | 
			
		||||
 | 
			
		||||
msgid "Number of output bytes"
 | 
			
		||||
msgstr "Số byte ra"
 | 
			
		||||
 | 
			
		||||
msgid "Size"
 | 
			
		||||
msgstr "Kích thước"
 | 
			
		||||
 | 
			
		||||
msgid "Length in bytes of the returned string."
 | 
			
		||||
msgstr "Chiều dài (theo byte) của chuỗi trả về."
 | 
			
		||||
 | 
			
		||||
msgid "K_Flags"
 | 
			
		||||
msgstr "K_Flags"
 | 
			
		||||
 | 
			
		||||
msgid "Min_Flt"
 | 
			
		||||
msgstr "Min_Flt"
 | 
			
		||||
 | 
			
		||||
msgid "Maj_Flt"
 | 
			
		||||
msgstr "Maj_Flt"
 | 
			
		||||
 | 
			
		||||
msgid "CMin_Flt"
 | 
			
		||||
msgstr "CMin_Flt"
 | 
			
		||||
 | 
			
		||||
msgid "CMaj_Flt"
 | 
			
		||||
msgstr "CMaj_Flt"
 | 
			
		||||
 | 
			
		||||
msgid "KStk_ESP"
 | 
			
		||||
msgstr "KStk_ESP"
 | 
			
		||||
 | 
			
		||||
msgid "KStk_EIP"
 | 
			
		||||
msgstr "KStk_EIP"
 | 
			
		||||
 | 
			
		||||
msgid "NWChan"
 | 
			
		||||
msgstr "NWChan"
 | 
			
		||||
 | 
			
		||||
msgid "WChan"
 | 
			
		||||
msgstr "WChan"
 | 
			
		||||
 | 
			
		||||
msgid ""
 | 
			
		||||
"Kernel flags of the process.\n"
 | 
			
		||||
"\n"
 | 
			
		||||
"On Linux, currently every flag has the math bit set, because crt0.s checks "
 | 
			
		||||
"for math emulation, so this is not included in the output.\n"
 | 
			
		||||
"\n"
 | 
			
		||||
"This is probably a bug, as not every process is a compiled C program.\n"
 | 
			
		||||
"\n"
 | 
			
		||||
"The math bit should be a decimal 4, and the traced bit is decimal 10."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Cờ kernel của tiến trình.\n"
 | 
			
		||||
"\n"
 | 
			
		||||
"Trên Linux, mỗi cờ hiện hành có đặt math bit, để crt0.s kiểm tra xem có hỗ "
 | 
			
		||||
"trợ mô phỏng toán học hay không, vì thế nó không được gộp trong đầu ra.\n"
 | 
			
		||||
"\n"
 | 
			
		||||
"Đây có thể là lỗi, vì không phải mọi tiến trình đều được viết bằng C.\n"
 | 
			
		||||
"\n"
 | 
			
		||||
"Math bit là 4, và traced bit là 10."
 | 
			
		||||
 | 
			
		||||
msgid ""
 | 
			
		||||
"The number of minor faults the process has made, those which have not "
 | 
			
		||||
"required loading a memory page from disk."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Số lỗi phụ của tiến trình. Những lỗi này khôgn cần yêu cầu nạp lên bộ nhớ từ "
 | 
			
		||||
"đĩa."
 | 
			
		||||
 | 
			
		||||
msgid ""
 | 
			
		||||
"The number of major faults the process has made, those which have required "
 | 
			
		||||
"loading a memory page from disk."
 | 
			
		||||
msgstr "Số lỗi chính của tiến trình. Những lỗi này cần nạp lên bộ nhớ từ đĩa."
 | 
			
		||||
 | 
			
		||||
msgid "The number of minor faults that the process and its children have made."
 | 
			
		||||
msgstr "Số lỗi phụ mà tiến trình và con của nó đã tạo ra."
 | 
			
		||||
 | 
			
		||||
msgid "The number of major faults that the process and its children have made."
 | 
			
		||||
msgstr "Số lỗi chính mà tiến trình và con của nó đã tạo ra."
 | 
			
		||||
 | 
			
		||||
msgid ""
 | 
			
		||||
"The current value of esp (32-bit stack pointer), as found in the kernel "
 | 
			
		||||
"stack page for the process."
 | 
			
		||||
msgstr "Giá trị hiện thời của thanh ghi ESP."
 | 
			
		||||
 | 
			
		||||
msgid "The current EIP (32-bit instruction pointer)."
 | 
			
		||||
msgstr "Giá trị hiện thời của thanh ghi EIP"
 | 
			
		||||
 | 
			
		||||
msgid ""
 | 
			
		||||
"This is the \"channel\" in which the process is waiting.  This is the "
 | 
			
		||||
"address of a system call, and can be looked up in a namelist if you need a "
 | 
			
		||||
"textual name.  (If you have an up-to-date /etc/psdatabase, then try ps -l to "
 | 
			
		||||
"see the WCHAN field in action)"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Đây là \"kênh\" mà tiến trình đang đợi. Đây là địa chỉ của lệnh gọi hệ "
 | 
			
		||||
"thống, và có thể được tra cứu trong danh sách tên nếu bạn cần biết tên của "
 | 
			
		||||
"nó. (Nếu bạn có /etc/psdatabase đã cập nhật thì hãy thử ps -l và xem trường "
 | 
			
		||||
"WCHAN)"
 | 
			
		||||
 | 
			
		||||
msgid "This is the textual name of the `nwchan' field."
 | 
			
		||||
msgstr "Đây là tên của trường `nwchan'"
 | 
			
		||||
 | 
			
		||||
msgid "Virtual"
 | 
			
		||||
msgstr "Ảo"
 | 
			
		||||
 | 
			
		||||
msgid "Resident"
 | 
			
		||||
msgstr "Thường trú"
 | 
			
		||||
 | 
			
		||||
msgid "Share"
 | 
			
		||||
msgstr "Chia sẻ"
 | 
			
		||||
 | 
			
		||||
msgid "Resident Set Size"
 | 
			
		||||
msgstr "Kích thước thường trú"
 | 
			
		||||
 | 
			
		||||
msgid "Resident Set Size Limit"
 | 
			
		||||
msgstr "Giới hạn thường trú"
 | 
			
		||||
 | 
			
		||||
msgid "Total # of pages of memory"
 | 
			
		||||
msgstr "Tổng số trang bộ nhớ"
 | 
			
		||||
 | 
			
		||||
msgid "Number of pages of virtual memory"
 | 
			
		||||
msgstr "Số trang bộ nhớ ảo"
 | 
			
		||||
 | 
			
		||||
msgid "Number of resident set (non-swapped) pages"
 | 
			
		||||
msgstr "Số trang bộ nhớ thường trú (không thể tráo đổi)"
 | 
			
		||||
 | 
			
		||||
msgid "Number of pages of shared (mmap'd) memory"
 | 
			
		||||
msgstr "Số trang bộ nhớ chia sẻ (mmap)"
 | 
			
		||||
 | 
			
		||||
msgid ""
 | 
			
		||||
"Number of pages the process has in real memory, minus 3 for administrative "
 | 
			
		||||
"purposes. This is just the pages which count towards text, data, or stack "
 | 
			
		||||
"space. This does not include pages which have not been demand-loaded in, or "
 | 
			
		||||
"which are swapped out."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Số trang bộ nhớ thực mà tiến trình dùng, trừ đi 3 vì mục đích quản lý. Đây "
 | 
			
		||||
"chỉ là số trang đếm không gian của phân đoạn text, data, hoặc ngăn xếp. Nó "
 | 
			
		||||
"không bao gồm các trang được nạp theo yêu cầu, hoặc được tráo đổi."
 | 
			
		||||
 | 
			
		||||
msgid ""
 | 
			
		||||
"Current limit in bytes on the rss of the process (usually 2,147,483,647)."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Giới hạn hiện thời (byte) của rss của tiến trình (thường là 2,147,483,647)."
 | 
			
		||||
 | 
			
		||||
msgid "Text_RSS"
 | 
			
		||||
msgstr "Text_RSS"
 | 
			
		||||
 | 
			
		||||
msgid "ShLib_RSS"
 | 
			
		||||
msgstr "ShLib_RSS"
 | 
			
		||||
 | 
			
		||||
msgid "Data_RSS"
 | 
			
		||||
msgstr "Data_RSS"
 | 
			
		||||
 | 
			
		||||
msgid "Stack_RSS"
 | 
			
		||||
msgstr "Stack_RSS"
 | 
			
		||||
 | 
			
		||||
msgid "Dirty Size"
 | 
			
		||||
msgstr "Cờ thay đổi"
 | 
			
		||||
 | 
			
		||||
msgid "Start_Code"
 | 
			
		||||
msgstr "Bắt đầu mã"
 | 
			
		||||
 | 
			
		||||
msgid "End_Code"
 | 
			
		||||
msgstr "Kết thúc mã"
 | 
			
		||||
 | 
			
		||||
msgid "Start_Stack"
 | 
			
		||||
msgstr "Bắt đầu ngăn xếp"
 | 
			
		||||
 | 
			
		||||
msgid "Text resident set size"
 | 
			
		||||
msgstr "Kích thước text thường trú"
 | 
			
		||||
 | 
			
		||||
msgid "Shared-Lib resident set size"
 | 
			
		||||
msgstr "Kích thước Shared-Lib thường trú"
 | 
			
		||||
 | 
			
		||||
msgid "Data resident set size"
 | 
			
		||||
msgstr "Kích thước dữ liệu thường trú"
 | 
			
		||||
 | 
			
		||||
msgid "Stack resident set size"
 | 
			
		||||
msgstr "Kích thước ngăn xếp thường trú"
 | 
			
		||||
 | 
			
		||||
msgid "Total size of dirty pages"
 | 
			
		||||
msgstr "Tổng số trang thay đổi"
 | 
			
		||||
 | 
			
		||||
msgid "Address of beginning of code segment"
 | 
			
		||||
msgstr "Địa chỉ bắt đầu đoạn mã"
 | 
			
		||||
 | 
			
		||||
msgid "Address of end of code segment"
 | 
			
		||||
msgstr "Địa chỉ kết thúc đoạn mã"
 | 
			
		||||
 | 
			
		||||
msgid "Address of the bottom of stack segment"
 | 
			
		||||
msgstr "Địa chỉ đáy ngăn xếp"
 | 
			
		||||
 | 
			
		||||
msgid "Signal"
 | 
			
		||||
msgstr "Tín hiệu"
 | 
			
		||||
 | 
			
		||||
msgid "Blocked"
 | 
			
		||||
msgstr "Bị khóa"
 | 
			
		||||
 | 
			
		||||
msgid "SigIgnore"
 | 
			
		||||
msgstr "SigIgnore"
 | 
			
		||||
 | 
			
		||||
msgid "SigCatch"
 | 
			
		||||
msgstr "SigCatch"
 | 
			
		||||
 | 
			
		||||
msgid "Mask of pending signals"
 | 
			
		||||
msgstr "Mặt nạ tín hiệu chờ"
 | 
			
		||||
 | 
			
		||||
msgid "Mask of blocked signals"
 | 
			
		||||
msgstr "Mặt nạ tín hiệu bị khóa"
 | 
			
		||||
 | 
			
		||||
#, fuzzy
 | 
			
		||||
msgid "Mask of ignored signals"
 | 
			
		||||
msgstr "Tín hiệu do người dùng định nghĩa 2"
 | 
			
		||||
 | 
			
		||||
msgid "Mask of caught signals"
 | 
			
		||||
msgstr "Mặt nạ tín hiệu bắt lấy"
 | 
			
		||||
 | 
			
		||||
msgid "Cmd"
 | 
			
		||||
msgstr "Lệnh"
 | 
			
		||||
 | 
			
		||||
msgid "State"
 | 
			
		||||
msgstr "Trạng thái"
 | 
			
		||||
 | 
			
		||||
msgid "UID"
 | 
			
		||||
msgstr "UID"
 | 
			
		||||
 | 
			
		||||
msgid "GID"
 | 
			
		||||
msgstr "GID"
 | 
			
		||||
 | 
			
		||||
msgid "RGid"
 | 
			
		||||
msgstr "RGid"
 | 
			
		||||
 | 
			
		||||
msgid "RUid"
 | 
			
		||||
msgstr "RUid"
 | 
			
		||||
 | 
			
		||||
msgid "Basename of executable file in call to exec()"
 | 
			
		||||
msgstr "Tên cơ sở của tập tin thực thi trong lệnh gọi exec()"
 | 
			
		||||
 | 
			
		||||
msgid "Single-Char code for process state (S=sleeping)"
 | 
			
		||||
msgstr "Ký tự đơn biểu thị trạng thái tiếng trình (S=sleeping (ngủ))"
 | 
			
		||||
 | 
			
		||||
msgid "UID of process"
 | 
			
		||||
msgstr "UID của tiến trình"
 | 
			
		||||
 | 
			
		||||
msgid "GID of process"
 | 
			
		||||
msgstr "GID của tiến trình"
 | 
			
		||||
 | 
			
		||||
msgid "Real UID of process"
 | 
			
		||||
msgstr "UID thực của tiến trình"
 | 
			
		||||
 | 
			
		||||
msgid "Real GID of process"
 | 
			
		||||
msgstr "GID thực của tiến trình"
 | 
			
		||||
 | 
			
		||||
msgid "Has CPU"
 | 
			
		||||
msgstr "Có CPU"
 | 
			
		||||
 | 
			
		||||
msgid "Processor"
 | 
			
		||||
msgstr "Tiến trình"
 | 
			
		||||
 | 
			
		||||
msgid "Start_Time"
 | 
			
		||||
msgstr "Thời điểm bắt đầu"
 | 
			
		||||
 | 
			
		||||
msgid "RTime"
 | 
			
		||||
msgstr "RTime"
 | 
			
		||||
 | 
			
		||||
msgid "UTime"
 | 
			
		||||
msgstr "UTime"
 | 
			
		||||
 | 
			
		||||
msgid "STime"
 | 
			
		||||
msgstr "STime"
 | 
			
		||||
 | 
			
		||||
msgid "CUTime"
 | 
			
		||||
msgstr "CUTime"
 | 
			
		||||
 | 
			
		||||
msgid "CSTime"
 | 
			
		||||
msgstr "CSTime"
 | 
			
		||||
 | 
			
		||||
msgid "TimeOut"
 | 
			
		||||
msgstr "Quá hạn"
 | 
			
		||||
 | 
			
		||||
msgid "It_Real_Value"
 | 
			
		||||
msgstr "Giá trị thực"
 | 
			
		||||
 | 
			
		||||
msgid "Frequency"
 | 
			
		||||
msgstr "Tần số"
 | 
			
		||||
 | 
			
		||||
msgid "XCPU_UTime"
 | 
			
		||||
msgstr "XCPU_UTime"
 | 
			
		||||
 | 
			
		||||
msgid "XCPU_STime"
 | 
			
		||||
msgstr "XCPU_STime"
 | 
			
		||||
 | 
			
		||||
msgid "Start time of process in seconds since the epoch"
 | 
			
		||||
msgstr "Thời gian bắt đầu tiến trình tính theo giây từ epoch"
 | 
			
		||||
 | 
			
		||||
msgid "Real time accumulated by process (should be utime + stime)"
 | 
			
		||||
msgstr "Giá trị thực được tích lũy bởi tiến trình (phải bằng utime + stime)"
 | 
			
		||||
 | 
			
		||||
msgid "user-mode CPU time accumulated by process"
 | 
			
		||||
msgstr "Thời gian CPU chế độ người dùng được tích lũy bởi tiến trình"
 | 
			
		||||
 | 
			
		||||
msgid "kernel-mode CPU time accumulated by process"
 | 
			
		||||
msgstr "Thời gian CPU chế độ kerneo được tích lũy bởi tiến trình"
 | 
			
		||||
 | 
			
		||||
msgid "Tick frequency"
 | 
			
		||||
msgstr "Số nhịp"
 | 
			
		||||
 | 
			
		||||
msgid "SMP user-mode CPU time accumulated by process"
 | 
			
		||||
msgstr "Thời gian CPU SMP chế độ người dùng được tích lũy bởi tiến trình"
 | 
			
		||||
 | 
			
		||||
msgid "SMP kernel-mode CPU time accumulated by process"
 | 
			
		||||
msgstr "Thời gian CPU SMP chế độ kernel được tích lũy bởi tiến trình"
 | 
			
		||||
 | 
			
		||||
msgid "Uid"
 | 
			
		||||
msgstr "UID"
 | 
			
		||||
 | 
			
		||||
msgid "EUid"
 | 
			
		||||
msgstr "EUID"
 | 
			
		||||
 | 
			
		||||
msgid "Gid"
 | 
			
		||||
msgstr "GID"
 | 
			
		||||
 | 
			
		||||
msgid "EGid"
 | 
			
		||||
msgstr "EGID"
 | 
			
		||||
 | 
			
		||||
msgid "SUid"
 | 
			
		||||
msgstr "SUid"
 | 
			
		||||
 | 
			
		||||
msgid "SGid"
 | 
			
		||||
msgstr "SGid"
 | 
			
		||||
 | 
			
		||||
msgid "FSUid"
 | 
			
		||||
msgstr "FSUid"
 | 
			
		||||
 | 
			
		||||
msgid "FSGid"
 | 
			
		||||
msgstr "FSGid"
 | 
			
		||||
 | 
			
		||||
msgid "Pid"
 | 
			
		||||
msgstr "PID"
 | 
			
		||||
 | 
			
		||||
msgid "PPid"
 | 
			
		||||
msgstr "PPID"
 | 
			
		||||
 | 
			
		||||
msgid "PGrp"
 | 
			
		||||
msgstr "PGRP"
 | 
			
		||||
 | 
			
		||||
msgid "Session"
 | 
			
		||||
msgstr "Session"
 | 
			
		||||
 | 
			
		||||
msgid "Tty"
 | 
			
		||||
msgstr "TTY"
 | 
			
		||||
 | 
			
		||||
msgid "TPGid"
 | 
			
		||||
msgstr "TPGID"
 | 
			
		||||
 | 
			
		||||
msgid "Priority"
 | 
			
		||||
msgstr "Ưu tiên"
 | 
			
		||||
 | 
			
		||||
msgid "NGroups"
 | 
			
		||||
msgstr "NGroups"
 | 
			
		||||
 | 
			
		||||
msgid "Groups"
 | 
			
		||||
msgstr "Nhóm"
 | 
			
		||||
 | 
			
		||||
msgid "User ID"
 | 
			
		||||
msgstr "ID Người dùng"
 | 
			
		||||
 | 
			
		||||
msgid "Effective User ID"
 | 
			
		||||
msgstr "ID Người dùng hiệu quả"
 | 
			
		||||
 | 
			
		||||
msgid "Group ID"
 | 
			
		||||
msgstr "ID Nhóm"
 | 
			
		||||
 | 
			
		||||
msgid "Effective Group ID"
 | 
			
		||||
msgstr "ID Nhóm hiệu quả"
 | 
			
		||||
 | 
			
		||||
msgid "Process ID"
 | 
			
		||||
msgstr "ID tiến trình"
 | 
			
		||||
 | 
			
		||||
msgid "PID of parent process"
 | 
			
		||||
msgstr "PID tiến trình cha"
 | 
			
		||||
 | 
			
		||||
msgid "Process group ID"
 | 
			
		||||
msgstr "ID Nhóm tiến trình"
 | 
			
		||||
 | 
			
		||||
msgid "Session ID"
 | 
			
		||||
msgstr "Session ID"
 | 
			
		||||
 | 
			
		||||
msgid "Full device number of controlling terminal"
 | 
			
		||||
msgstr "Mã số thiết bị đầy đủ của terminal điều khiển"
 | 
			
		||||
 | 
			
		||||
msgid "Terminal process group ID"
 | 
			
		||||
msgstr "GID terminal"
 | 
			
		||||
 | 
			
		||||
msgid "Kernel scheduling priority"
 | 
			
		||||
msgstr "Ưu tiên lập lịch kernel"
 | 
			
		||||
 | 
			
		||||
msgid "Standard unix nice level of process"
 | 
			
		||||
msgstr "Mức ưu tiên unix chuẩn của tiến trình"
 | 
			
		||||
 | 
			
		||||
msgid "Number of entries in semaphore map"
 | 
			
		||||
msgstr "Số mục trong bảng đồ semaphore"
 | 
			
		||||
 | 
			
		||||
msgid "Max number of arrays"
 | 
			
		||||
msgstr "Số mảng tối đa"
 | 
			
		||||
 | 
			
		||||
msgid "Max semaphores system wide"
 | 
			
		||||
msgstr "Số semaphore hệ thống tối đa"
 | 
			
		||||
 | 
			
		||||
msgid "Number of undo structures system wide"
 | 
			
		||||
msgstr "Số lần hoàn lại cấp hệ thống tối đa"
 | 
			
		||||
 | 
			
		||||
msgid "Max semaphores per array"
 | 
			
		||||
msgstr "Số semaphore mỗi mảng"
 | 
			
		||||
 | 
			
		||||
msgid "Max ops per semop call"
 | 
			
		||||
msgstr "Số ops tối đa mỗi lần gọi semop"
 | 
			
		||||
 | 
			
		||||
msgid "Max number of undo entries per process"
 | 
			
		||||
msgstr "Số mục hoàn lại mỗi tiến trình tối đa"
 | 
			
		||||
 | 
			
		||||
msgid "sizeof struct sem_undo"
 | 
			
		||||
msgstr "kích thước sem_undo"
 | 
			
		||||
 | 
			
		||||
msgid "Semaphore max value"
 | 
			
		||||
msgstr "Gia trị semaphore tối đa"
 | 
			
		||||
 | 
			
		||||
msgid "Adjust on exit max value"
 | 
			
		||||
msgstr "Điều chỉnh giá trị thoát tối đa"
 | 
			
		||||
 | 
			
		||||
msgid "Max segment size"
 | 
			
		||||
msgstr "Kích thước phân đoạn tối đa"
 | 
			
		||||
 | 
			
		||||
msgid "Min segment size"
 | 
			
		||||
msgstr "Kích thước phân đoạn tối thiểu"
 | 
			
		||||
 | 
			
		||||
msgid "Max number of segments"
 | 
			
		||||
msgstr "Số phân đoạn tối đa"
 | 
			
		||||
 | 
			
		||||
msgid "Max shared segments per process"
 | 
			
		||||
msgstr "Số phân đoạn chia sẻ tối đa"
 | 
			
		||||
 | 
			
		||||
msgid "Max total shared memory"
 | 
			
		||||
msgstr "Tổng bộ nhớ chia sẽ tối đa"
 | 
			
		||||
 | 
			
		||||
msgid "Total Swap Space"
 | 
			
		||||
msgstr "Tổng vùng tráo"
 | 
			
		||||
 | 
			
		||||
msgid "Used Swap Space"
 | 
			
		||||
msgstr "Vùng tráo đã dùng"
 | 
			
		||||
 | 
			
		||||
msgid "Free Swap Space"
 | 
			
		||||
msgstr "Vùng tráo rỗng"
 | 
			
		||||
 | 
			
		||||
msgid "Page In"
 | 
			
		||||
msgstr "Trang vào"
 | 
			
		||||
 | 
			
		||||
msgid "Page Out"
 | 
			
		||||
msgstr "Trang ra"
 | 
			
		||||
 | 
			
		||||
msgid "Server Features"
 | 
			
		||||
msgstr "Tính năng server"
 | 
			
		||||
 | 
			
		||||
msgid "CPU Usage"
 | 
			
		||||
msgstr "Sử dụng CPU"
 | 
			
		||||
 | 
			
		||||
msgid "Memory Usage"
 | 
			
		||||
msgstr "Sử dụng bộ nhớ"
 | 
			
		||||
 | 
			
		||||
msgid "Swap Usage"
 | 
			
		||||
msgstr "Sử dụng tráo đổi"
 | 
			
		||||
 | 
			
		||||
msgid "Load Averange"
 | 
			
		||||
msgstr "Trung bình tải"
 | 
			
		||||
 | 
			
		||||
msgid "Shared Memory Limits"
 | 
			
		||||
msgstr "Giới hạn bộ nhớ chia sẻ"
 | 
			
		||||
 | 
			
		||||
msgid "Message Queue Limits"
 | 
			
		||||
msgstr "Giới hạn hàng đợi thông điệp"
 | 
			
		||||
 | 
			
		||||
msgid "Semaphore Set Limits"
 | 
			
		||||
msgstr "Giới hạn tập semaphore"
 | 
			
		||||
 | 
			
		||||
msgid "List of running Processes"
 | 
			
		||||
msgstr "Danh sách tiến trình đang chạy"
 | 
			
		||||
 | 
			
		||||
msgid "Process Status information"
 | 
			
		||||
msgstr "Thông tin trạng thái tiến trình"
 | 
			
		||||
 | 
			
		||||
msgid "Process UID and TTY information"
 | 
			
		||||
msgstr "Thông tin UID và TTY của tiến trình"
 | 
			
		||||
 | 
			
		||||
msgid "Process Memory information"
 | 
			
		||||
msgstr "Thông tin bộ nhớ tiến trình"
 | 
			
		||||
 | 
			
		||||
msgid "Process Time information"
 | 
			
		||||
msgstr "Thông tin thời gian tiến trình"
 | 
			
		||||
 | 
			
		||||
msgid "Process Signal information"
 | 
			
		||||
msgstr "Thông tin tín hiệu của tiến trình"
 | 
			
		||||
 | 
			
		||||
msgid "Process Kernel Data information"
 | 
			
		||||
msgstr "Thông tin dữ liệu kernel của tiến trình"
 | 
			
		||||
 | 
			
		||||
#, fuzzy
 | 
			
		||||
msgid "Process Segment information"
 | 
			
		||||
msgstr "Vi phạm phân đoạn"
 | 
			
		||||
 | 
			
		||||
msgid "Process Arguments"
 | 
			
		||||
msgstr "Đối số của tiến trình"
 | 
			
		||||
 | 
			
		||||
msgid "Process Memory Map"
 | 
			
		||||
msgstr "Bản đồ bộ nhớ của tiến trình"
 | 
			
		||||
 | 
			
		||||
msgid "Mount List"
 | 
			
		||||
msgstr "Danh sách gắn kết"
 | 
			
		||||
 | 
			
		||||
msgid "File System Usage"
 | 
			
		||||
msgstr "Sử dụng hệ thống tập tin"
 | 
			
		||||
 | 
			
		||||
msgid "Network Load"
 | 
			
		||||
msgstr "Tải mạng"
 | 
			
		||||
 | 
			
		||||
msgid "PPP Statistics"
 | 
			
		||||
msgstr "Thống kê PPP"
 | 
			
		||||
 | 
			
		||||
msgid "Command line arguments of the process"
 | 
			
		||||
msgstr "Đối số dòng lệnh của tiến trình"
 | 
			
		||||
 | 
			
		||||
msgid "List of currently mounted filesystems"
 | 
			
		||||
msgstr "Danh sách các hệ thống tập tin được gắn kết"
 | 
			
		||||
 | 
			
		||||
msgid "Idletime"
 | 
			
		||||
msgstr "Thời gian rảnh"
 | 
			
		||||
 | 
			
		||||
msgid "Time in seconds since system boot"
 | 
			
		||||
msgstr "Thời gian (giây) kể từ khi khởi động hệ thống"
 | 
			
		||||
 | 
			
		||||
msgid "Time in seconds the system spent in the idle task since system boot"
 | 
			
		||||
msgstr "Thời gian (giây) hệ thống rảnh kể từ khi khởi động hệ thống"
 | 
			
		||||
 | 
			
		||||
msgid "Time of last system boot in seconds since the epoch"
 | 
			
		||||
msgstr "Thời điểm khởi động lần cuối tính theo giây từ epoch"
 | 
			
		||||
 | 
			
		||||
msgid "Unknown system error"
 | 
			
		||||
msgstr "Lỗi lạ hệ thống"
 | 
			
		||||
 | 
			
		||||
msgid "%s: option `%s' is ambiguous\n"
 | 
			
		||||
msgstr "%s: tùy chọn `%s' không rõ ràng\n"
 | 
			
		||||
 | 
			
		||||
msgid "%s: option `--%s' doesn't allow an argument\n"
 | 
			
		||||
msgstr "%s: tùy chọn `--%s' không có đối số\n"
 | 
			
		||||
 | 
			
		||||
msgid "%s: option `%c%s' doesn't allow an argument\n"
 | 
			
		||||
msgstr "%s: tùy chọn `%c%s' không có đối số\n"
 | 
			
		||||
 | 
			
		||||
msgid "%s: option `%s' requires an argument\n"
 | 
			
		||||
msgstr "%s: tùy chọn `%s' cần một đối số\n"
 | 
			
		||||
 | 
			
		||||
msgid "%s: unrecognized option `--%s'\n"
 | 
			
		||||
msgstr "%s: tùy chọn không được công nhận `--%s'\n"
 | 
			
		||||
 | 
			
		||||
msgid "%s: unrecognized option `%c%s'\n"
 | 
			
		||||
msgstr "%s: tùy chọn không được công nhận `%c%s'\n"
 | 
			
		||||
 | 
			
		||||
msgid "%s: illegal option -- %c\n"
 | 
			
		||||
msgstr "%s: tùy chọn bất hợp lệ -- %c\n"
 | 
			
		||||
 | 
			
		||||
msgid "%s: invalid option -- %c\n"
 | 
			
		||||
msgstr "%s: tùy chọn bất hợp lệ -- %c\n"
 | 
			
		||||
 | 
			
		||||
msgid "%s: option requires an argument -- %c\n"
 | 
			
		||||
msgstr "%s: tùy chọn cần một đối số -- %c\n"
 | 
			
		||||
 | 
			
		||||
msgid "%s: option `-W %s' is ambiguous\n"
 | 
			
		||||
msgstr "%s: tùy chọn `-W %s' không rõ ràng\n"
 | 
			
		||||
 | 
			
		||||
msgid "%s: option `-W %s' doesn't allow an argument\n"
 | 
			
		||||
msgstr "%s: tùy chọn `-W %s' không có đối số\n"
 | 
			
		||||
 | 
			
		||||
msgid "Show this help message"
 | 
			
		||||
msgstr "Hiện thông tin trợ giúp"
 | 
			
		||||
 | 
			
		||||
msgid "Display brief usage message"
 | 
			
		||||
msgstr "Hiện tóm tắt cách sử dụng"
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,7 @@ msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: libgtop 2.9.92\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: \n"
 | 
			
		||||
"POT-Creation-Date: 2005-06-22 13:09+0000\n"
 | 
			
		||||
"POT-Creation-Date: 2005-06-23 22:05+0000\n"
 | 
			
		||||
"PO-Revision-Date: 2005-03-05 16:33+0800\n"
 | 
			
		||||
"Last-Translator: Abel Cheung <abel@oaka.org>\n"
 | 
			
		||||
"Language-Team: Chinese (traditional) <community@linuxhall.org>\n"
 | 
			
		||||
 
 | 
			
		||||
@@ -31,7 +31,7 @@
 | 
			
		||||
 | 
			
		||||
#include <config.h>
 | 
			
		||||
 | 
			
		||||
#include "libgtop-i18n.h"
 | 
			
		||||
#include <glib/gi18n-lib.h>
 | 
			
		||||
#include <glibtop.h>
 | 
			
		||||
#include <glibtop/open.h>
 | 
			
		||||
#include <glibtop/close.h>
 | 
			
		||||
 
 | 
			
		||||
@@ -17,13 +17,14 @@ libgtop_common_2_0_la_SOURCES	= error.c gnuslib.c \
 | 
			
		||||
				  fsusage.c \
 | 
			
		||||
                                  mountlist.c \
 | 
			
		||||
                                  procargs.c \
 | 
			
		||||
				  default.c \
 | 
			
		||||
				  $(inodedb_SRCLIST)
 | 
			
		||||
 | 
			
		||||
libgtop_common_2_0_la_LDFLAGS	= $(LT_VERSION_INFO)
 | 
			
		||||
# libgtop_common_2_0_la_LDFLAGS	= $(LT_VERSION_INFO)
 | 
			
		||||
libgtop_common_2_0_la_LIBADD	= $(LIBGTOP_EXTRA_LIBS)
 | 
			
		||||
 | 
			
		||||
libgtop_suid_common_2_0_la_SOURCES	= error.c sysdeps_suid.c
 | 
			
		||||
 | 
			
		||||
libgtop_suid_common_2_0_la_LDFLAGS	= $(LT_VERSION_INFO)
 | 
			
		||||
# libgtop_suid_common_2_0_la_LDFLAGS	= $(LT_VERSION_INFO)
 | 
			
		||||
 | 
			
		||||
EXTRA_DIST			= inodedb.c
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										212
									
								
								sysdeps/common/default.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										212
									
								
								sysdeps/common/default.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,212 @@
 | 
			
		||||
#include <config.h>
 | 
			
		||||
 | 
			
		||||
#include <glibtop.h>
 | 
			
		||||
#include <glibtop/sysinfo.h>
 | 
			
		||||
#include <glibtop/union.h>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
glibtop_close(void)
 | 
			
		||||
{
 | 
			
		||||
	glibtop_close_r(glibtop_global_server);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
glibtop*
 | 
			
		||||
glibtop_init(void)
 | 
			
		||||
{
 | 
			
		||||
	return glibtop_init_r(&glibtop_global_server, 0, 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
glibtop_get_cpu(glibtop_cpu *buf)
 | 
			
		||||
{
 | 
			
		||||
	glibtop_get_cpu_l(glibtop_global_server, buf);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
glibtop_get_fsusage(glibtop_fsusage *buf, const char *mount_dir)
 | 
			
		||||
{
 | 
			
		||||
	glibtop_get_fsusage_l(glibtop_global_server, buf, mount_dir);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
glibtop_get_uptime(glibtop_uptime *buf)
 | 
			
		||||
{
 | 
			
		||||
	glibtop_get_uptime_l(glibtop_global_server, buf);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
const glibtop_sysinfo *
 | 
			
		||||
glibtop_get_sysinfo(void)
 | 
			
		||||
{
 | 
			
		||||
	return glibtop_get_sysinfo_s(glibtop_global_server);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
glibtop_get_swap(glibtop_swap *buf)
 | 
			
		||||
{
 | 
			
		||||
	glibtop_get_swap_l(glibtop_global_server, buf);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
glibtop_get_proc_uid(glibtop_proc_uid *buf, pid_t pid)
 | 
			
		||||
{
 | 
			
		||||
	glibtop_get_proc_uid_l(glibtop_global_server, buf, pid);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
glibtop_get_proc_time(glibtop_proc_time *buf, pid_t pid)
 | 
			
		||||
{
 | 
			
		||||
	glibtop_get_proc_time_l(glibtop_global_server, buf, pid);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
glibtop_get_proc_state(glibtop_proc_state *buf, pid_t pid)
 | 
			
		||||
{
 | 
			
		||||
	glibtop_get_proc_state_l(glibtop_global_server, buf, pid);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
glibtop_get_proc_signal(glibtop_proc_signal *buf, pid_t pid)
 | 
			
		||||
{
 | 
			
		||||
	glibtop_get_proc_signal_l(glibtop_global_server, buf, pid);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
glibtop_get_proc_segment(glibtop_proc_segment *buf, pid_t pid)
 | 
			
		||||
{
 | 
			
		||||
	glibtop_get_proc_segment_l(glibtop_global_server, buf, pid);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
glibtop_open_files_entry *
 | 
			
		||||
glibtop_get_proc_open_files(glibtop_proc_open_files *buf, pid_t pid)
 | 
			
		||||
{
 | 
			
		||||
	return glibtop_get_proc_open_files_l(glibtop_global_server, buf, pid);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
glibtop_get_proc_mem(glibtop_proc_mem *buf, pid_t pid)
 | 
			
		||||
{
 | 
			
		||||
	glibtop_get_proc_mem_l(glibtop_global_server, buf, pid);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
glibtop_map_entry *
 | 
			
		||||
glibtop_get_proc_map(glibtop_proc_map *buf, pid_t pid)
 | 
			
		||||
{
 | 
			
		||||
	return glibtop_get_proc_map_l(glibtop_global_server, buf, pid);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
char *
 | 
			
		||||
glibtop_get_proc_args(glibtop_proc_args *buf, pid_t pid, unsigned max_len)
 | 
			
		||||
{
 | 
			
		||||
	return glibtop_get_proc_args_l(glibtop_global_server, buf, pid, max_len);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
char **
 | 
			
		||||
glibtop_get_proc_argv(glibtop_proc_args *buf, pid_t pid, unsigned max_len)
 | 
			
		||||
{
 | 
			
		||||
	return glibtop_get_proc_argv_l(glibtop_global_server, buf, pid, max_len);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
unsigned *
 | 
			
		||||
glibtop_get_proclist(glibtop_proclist *buf, gint64 which, gint64 arg)
 | 
			
		||||
{
 | 
			
		||||
	return glibtop_get_proclist_l(glibtop_global_server, buf, which, arg);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
glibtop_get_proc_kernel(glibtop_proc_kernel *buf, pid_t pid)
 | 
			
		||||
{
 | 
			
		||||
	glibtop_get_proc_kernel_l(glibtop_global_server, buf, pid);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
glibtop_get_ppp(glibtop_ppp *buf, unsigned short device)
 | 
			
		||||
{
 | 
			
		||||
	glibtop_get_ppp_l(glibtop_global_server, buf, device);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
char**
 | 
			
		||||
glibtop_get_netlist(glibtop_netlist *buf)
 | 
			
		||||
{
 | 
			
		||||
	return glibtop_get_netlist_l(glibtop_global_server, buf);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
glibtop_get_netload(glibtop_netload *buf, const char *interface)
 | 
			
		||||
{
 | 
			
		||||
	glibtop_get_netload_l(glibtop_global_server, buf, interface);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
glibtop_mountentry *
 | 
			
		||||
glibtop_get_mountlist(glibtop_mountlist *buf, int all_fs)
 | 
			
		||||
{
 | 
			
		||||
	return glibtop_get_mountlist_l(glibtop_global_server, buf, all_fs);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
glibtop_get_mem(glibtop_mem *buf)
 | 
			
		||||
{
 | 
			
		||||
	glibtop_get_mem_l(glibtop_global_server, buf);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
glibtop_get_loadavg(glibtop_loadavg *buf)
 | 
			
		||||
{
 | 
			
		||||
	glibtop_get_loadavg_l(glibtop_global_server, buf);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
glibtop_get_msg_limits(glibtop_msg_limits *buf)
 | 
			
		||||
{
 | 
			
		||||
	glibtop_get_msg_limits_l(glibtop_global_server, buf);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
glibtop_get_sem_limits(glibtop_sem_limits *buf)
 | 
			
		||||
{
 | 
			
		||||
	glibtop_get_sem_limits_l(glibtop_global_server, buf);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
glibtop_get_shm_limits(glibtop_shm_limits *buf)
 | 
			
		||||
{
 | 
			
		||||
	glibtop_get_shm_limits_l(glibtop_global_server, buf);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
glibtop_get_sysdeps(glibtop_sysdeps *buf)
 | 
			
		||||
{
 | 
			
		||||
	glibtop_get_sysdeps_r(glibtop_global_server, buf);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -1,3 +1,46 @@
 | 
			
		||||
2005-07-23  Benoît Dejean  <TazForEver@dlfp.org>
 | 
			
		||||
 | 
			
		||||
	* uptime.c:
 | 
			
		||||
	
 | 
			
		||||
	Fixed .flags.
 | 
			
		||||
 | 
			
		||||
2005-07-22  Benoît Dejean  <TazForEver@dlfp.org>
 | 
			
		||||
 | 
			
		||||
	* glibtop_private.c: (get_page_size):
 | 
			
		||||
	* glibtop_private.h:
 | 
			
		||||
	* procmem.c: (glibtop_get_proc_mem_s):
 | 
			
		||||
	* procsegment.c: (glibtop_get_proc_segment_s):
 | 
			
		||||
	
 | 
			
		||||
	Cached getpagesize().
 | 
			
		||||
 | 
			
		||||
2005-07-09  Benoît Dejean  <TazForEver@dlfp.org>
 | 
			
		||||
 | 
			
		||||
	* netload.c: (read_value), (linux_2_6_stats), (linux_2_0_stats),
 | 
			
		||||
	(linux_2_4_stats), (glibtop_get_netload_s): Split implementations.
 | 
			
		||||
	New (simpler) implementation for 2.6 (/sys is so nice ;)
 | 
			
		||||
 | 
			
		||||
2005-07-07  Benoît Dejean  <TazForEver@dlfp.org>
 | 
			
		||||
 | 
			
		||||
	* glibtop_private.c: (read_boot_time), (get_boot_time): Cached boot_time.
 | 
			
		||||
 | 
			
		||||
2005-07-06  Benoît Dejean  <TazForEver@dlfp.org>
 | 
			
		||||
 | 
			
		||||
	Et m***e ... CVS got me. I wanted to commit a single change on the
 | 
			
		||||
	toplevel configure.in but commited the whole tree. Sorry.
 | 
			
		||||
	
 | 
			
		||||
	* glibtop_private.c:
 | 
			
		||||
	* glibtop_private.h:
 | 
			
		||||
	* proctime.c:
 | 
			
		||||
	* uptime.c:
 | 
			
		||||
	
 | 
			
		||||
	Added new function get_boot_time.
 | 
			
		||||
	
 | 
			
		||||
	Retrieve boot_time from /proc/stat.
 | 
			
		||||
 | 
			
		||||
2005-06-13  Benoît Dejean  <TazForEver@dlfp.org>
 | 
			
		||||
 | 
			
		||||
	* glibtop_private.c: (try_file_to_buffer): Ensures buffer is 0-terminated.
 | 
			
		||||
 | 
			
		||||
2005-06-13  Benoît Dejean  <TazForEver@dlfp.org>
 | 
			
		||||
 | 
			
		||||
	* swap.c: (glibtop_get_swap_s): Added pagein/pageout for linux 2.6.
 | 
			
		||||
 
 | 
			
		||||
@@ -12,7 +12,7 @@ libgtop_sysdeps_2_0_la_SOURCES	= open.c close.c cpu.c mem.c swap.c \
 | 
			
		||||
 | 
			
		||||
libgtop_sysdeps_2_0_la_LIBADD	=  @GLIB_LIBS@
 | 
			
		||||
 | 
			
		||||
libgtop_sysdeps_2_0_la_LDFLAGS	= $(LT_VERSION_INFO)
 | 
			
		||||
# libgtop_sysdeps_2_0_la_LDFLAGS	= $(LT_VERSION_INFO)
 | 
			
		||||
 | 
			
		||||
libgtopinclude_HEADERS		= glibtop_server.h glibtop_machine.h
 | 
			
		||||
libgtopincludedir		= $(includedir)/libgtop-2.0
 | 
			
		||||
 
 | 
			
		||||
@@ -10,6 +10,7 @@
 | 
			
		||||
#include <stdarg.h>
 | 
			
		||||
 | 
			
		||||
#include <fcntl.h>
 | 
			
		||||
#include <unistd.h>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
unsigned long long
 | 
			
		||||
@@ -66,6 +67,8 @@ int try_file_to_buffer(char *buffer, const char *format, ...)
 | 
			
		||||
 | 
			
		||||
	va_end(pa);
 | 
			
		||||
 | 
			
		||||
	buffer [0] = '\0';
 | 
			
		||||
 | 
			
		||||
	if((fd = open (path, O_RDONLY)) < 0)
 | 
			
		||||
		return TRY_FILE_TO_BUFFER_OPEN;
 | 
			
		||||
 | 
			
		||||
@@ -94,3 +97,49 @@ file_to_buffer(glibtop *server, char *buffer, const char *filename)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static unsigned long
 | 
			
		||||
read_boot_time(glibtop *server)
 | 
			
		||||
{
 | 
			
		||||
	char buffer[BUFSIZ];
 | 
			
		||||
	char *btime;
 | 
			
		||||
 | 
			
		||||
	file_to_buffer(server, buffer, "/proc/stat");
 | 
			
		||||
 | 
			
		||||
	btime = strstr(buffer, "btime");
 | 
			
		||||
 | 
			
		||||
	g_return_val_if_fail(btime != NULL, 0UL);
 | 
			
		||||
 | 
			
		||||
	btime = skip_token(btime);
 | 
			
		||||
	return strtoul(btime, NULL, 10);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
unsigned long
 | 
			
		||||
get_boot_time(glibtop *server)
 | 
			
		||||
{
 | 
			
		||||
	static unsigned long boot_time = 0UL;
 | 
			
		||||
 | 
			
		||||
	if(G_UNLIKELY(!boot_time))
 | 
			
		||||
	{
 | 
			
		||||
		boot_time = read_boot_time(server);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return boot_time;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
size_t
 | 
			
		||||
get_page_size(void)
 | 
			
		||||
{
 | 
			
		||||
	static size_t pagesize = 0;
 | 
			
		||||
 | 
			
		||||
	if(G_UNLIKELY(!pagesize))
 | 
			
		||||
	{
 | 
			
		||||
		pagesize = getpagesize();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return pagesize;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -111,6 +111,16 @@ proc_stat_after_cmd (char *p)
 | 
			
		||||
		*p++ = '\0';
 | 
			
		||||
	return p;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
unsigned long
 | 
			
		||||
get_boot_time(glibtop *server) G_GNUC_INTERNAL;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
size_t
 | 
			
		||||
get_page_size(void) G_GNUC_INTERNAL;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
G_END_DECLS
 | 
			
		||||
 | 
			
		||||
#endif /* __LINUX__GLIBTOP_PRIVATE_H__ */
 | 
			
		||||
 
 | 
			
		||||
@@ -186,179 +186,179 @@ static void get_ipv6(glibtop *server, glibtop_netload *buf,
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Provides network statistics. */
 | 
			
		||||
static gboolean
 | 
			
		||||
read_value(glibtop *server,
 | 
			
		||||
	   const char *device,
 | 
			
		||||
	   const char *filename,
 | 
			
		||||
	   guint64 *value)
 | 
			
		||||
{
 | 
			
		||||
    char buffer[BUFSIZ];
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
glibtop_get_netload_s (glibtop *server, glibtop_netload *buf,
 | 
			
		||||
		       const char *interface)
 | 
			
		||||
    if(try_file_to_buffer(buffer,
 | 
			
		||||
			  "/sys/class/net/%s/statistics/%s",
 | 
			
		||||
			  device,
 | 
			
		||||
			  filename))
 | 
			
		||||
    {
 | 
			
		||||
	glibtop_warn_io_r(server,
 | 
			
		||||
			  "Failed to open \"/sys/class/net/%s/statistics/%s\"",
 | 
			
		||||
			  device,
 | 
			
		||||
			  filename);
 | 
			
		||||
 | 
			
		||||
	return FALSE;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    *value = strtoull(buffer, NULL, 10);
 | 
			
		||||
    return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
linux_2_6_stats(glibtop *server,
 | 
			
		||||
		   glibtop_netload *buf,
 | 
			
		||||
		   const char *dev)
 | 
			
		||||
{
 | 
			
		||||
    if(read_value(server, dev, "rx_packets", &buf->packets_in))
 | 
			
		||||
	buf->flags |= (1 << GLIBTOP_NETLOAD_PACKETS_IN);
 | 
			
		||||
 | 
			
		||||
    if(read_value(server, dev, "tx_packets", &buf->packets_out))
 | 
			
		||||
	buf->flags |= (1 << GLIBTOP_NETLOAD_PACKETS_OUT);
 | 
			
		||||
 | 
			
		||||
    buf->packets_total = buf->packets_in + buf->packets_out;
 | 
			
		||||
    buf->flags |= (1 << GLIBTOP_NETLOAD_PACKETS_TOTAL);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    if(read_value(server, dev, "rx_bytes", &buf->bytes_in))
 | 
			
		||||
	buf->flags |= (1 << GLIBTOP_NETLOAD_BYTES_IN);
 | 
			
		||||
 | 
			
		||||
    if(read_value(server, dev, "tx_bytes", &buf->bytes_out))
 | 
			
		||||
	buf->flags |= (1 << GLIBTOP_NETLOAD_BYTES_OUT);
 | 
			
		||||
 | 
			
		||||
    buf->bytes_total = buf->bytes_in + buf->bytes_out;
 | 
			
		||||
    buf->flags |= (1 << GLIBTOP_NETLOAD_BYTES_TOTAL);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    if(read_value(server, dev, "rx_errors", &buf->errors_in))
 | 
			
		||||
	buf->flags |= (1 << GLIBTOP_NETLOAD_ERRORS_IN);
 | 
			
		||||
 | 
			
		||||
    if(read_value(server, dev, "tx_errors", &buf->errors_out))
 | 
			
		||||
	buf->flags |= (1 << GLIBTOP_NETLOAD_ERRORS_OUT);
 | 
			
		||||
 | 
			
		||||
    buf->errors_total = buf->errors_in + buf->errors_out;
 | 
			
		||||
    buf->flags |= (1 << GLIBTOP_NETLOAD_ERRORS_TOTAL);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    if(read_value(server, dev, "collisions", &buf->collisions))
 | 
			
		||||
	buf->flags |= (1 << GLIBTOP_NETLOAD_COLLISIONS);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
linux_2_0_stats(glibtop *server,
 | 
			
		||||
		glibtop_netload *buf,
 | 
			
		||||
		const char *interface)
 | 
			
		||||
{
 | 
			
		||||
    FILE *f;
 | 
			
		||||
    char buffer[BUFSIZ];
 | 
			
		||||
 | 
			
		||||
    f = fopen ("/proc/net/ip_acct", "r");
 | 
			
		||||
 | 
			
		||||
    if (!f) {
 | 
			
		||||
	glibtop_warn_io_r (server,
 | 
			
		||||
			   "Failed to open \"/proc/net/ip_acct\"");
 | 
			
		||||
	return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /* Skip over the header line. */
 | 
			
		||||
    fgets (buffer, BUFSIZ-1, f);
 | 
			
		||||
 | 
			
		||||
    while (fgets (buffer, BUFSIZ-1, f)) {
 | 
			
		||||
	unsigned long long flags, packets, bytes;
 | 
			
		||||
	char *p, *dev;
 | 
			
		||||
 | 
			
		||||
	/* Skip over the network thing. */
 | 
			
		||||
	dev = skip_token (buffer) + 1;
 | 
			
		||||
	p = skip_token (dev);
 | 
			
		||||
	*p++ = 0;
 | 
			
		||||
 | 
			
		||||
	if (strcmp (dev, interface))
 | 
			
		||||
	    continue;
 | 
			
		||||
 | 
			
		||||
	p = skip_token (p);
 | 
			
		||||
 | 
			
		||||
	flags   = strtoull (p, &p, 16);
 | 
			
		||||
 | 
			
		||||
	p = skip_multiple_token (p, 2);
 | 
			
		||||
 | 
			
		||||
	packets = strtoull (p, &p, 0);
 | 
			
		||||
	bytes   = strtoull (p, &p, 0);
 | 
			
		||||
 | 
			
		||||
	if (flags & _GLIBTOP_IP_FW_ACCTIN) {
 | 
			
		||||
	    /* Incoming packets only. */
 | 
			
		||||
 | 
			
		||||
	    buf->packets_total += packets;
 | 
			
		||||
	    buf->packets_in += packets;
 | 
			
		||||
 | 
			
		||||
	    buf->bytes_total += bytes;
 | 
			
		||||
	    buf->bytes_in += bytes;
 | 
			
		||||
 | 
			
		||||
	    buf->flags |= _glibtop_sysdeps_netload_in;
 | 
			
		||||
 | 
			
		||||
	} else if (flags & _GLIBTOP_IP_FW_ACCTOUT) {
 | 
			
		||||
	    /* Outgoing packets only. */
 | 
			
		||||
 | 
			
		||||
	    buf->packets_total += packets;
 | 
			
		||||
	    buf->packets_out += packets;
 | 
			
		||||
 | 
			
		||||
	    buf->bytes_total += bytes;
 | 
			
		||||
	    buf->bytes_out += bytes;
 | 
			
		||||
 | 
			
		||||
	    buf->flags |= _glibtop_sysdeps_netload_out;
 | 
			
		||||
 | 
			
		||||
	} else {
 | 
			
		||||
	    /* Only have total values. */
 | 
			
		||||
 | 
			
		||||
	    buf->packets_total += packets;
 | 
			
		||||
	    buf->bytes_total += bytes;
 | 
			
		||||
 | 
			
		||||
	    buf->flags |= _glibtop_sysdeps_netload_total;
 | 
			
		||||
	}
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fclose (f);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
linux_2_4_stats(glibtop *server,
 | 
			
		||||
		glibtop_netload *buf,
 | 
			
		||||
		const char *interface)
 | 
			
		||||
{
 | 
			
		||||
    char buffer [BUFSIZ], *p;
 | 
			
		||||
    int have_bytes, fields, skfd;
 | 
			
		||||
    int have_bytes, fields;
 | 
			
		||||
    FILE *f;
 | 
			
		||||
 | 
			
		||||
    memset (buf, 0, sizeof (glibtop_netload));
 | 
			
		||||
 | 
			
		||||
    skfd = socket (AF_INET, SOCK_DGRAM, 0);
 | 
			
		||||
    if (skfd) {
 | 
			
		||||
	struct ifreq ifr;
 | 
			
		||||
 | 
			
		||||
	g_strlcpy (ifr.ifr_name, interface, sizeof ifr.ifr_name);
 | 
			
		||||
	if (!ioctl (skfd, SIOCGIFFLAGS, &ifr)) {
 | 
			
		||||
	    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);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	g_strlcpy (ifr.ifr_name, interface, sizeof ifr.ifr_name);
 | 
			
		||||
	if (!ioctl (skfd, SIOCGIFMTU, &ifr)) {
 | 
			
		||||
	    buf->mtu = ifr.ifr_mtu;
 | 
			
		||||
	    buf->flags |= (1L << GLIBTOP_NETLOAD_MTU);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	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);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	close (skfd);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /* Linux 2.1.114 - don't know where exactly this was added, but
 | 
			
		||||
	 * recent kernels have byte count in /proc/net/dev so we don't
 | 
			
		||||
	 * need IP accounting.
 | 
			
		||||
	 */
 | 
			
		||||
 | 
			
		||||
    if (server->os_version_code < LINUX_VERSION_CODE(2, 1, 14)) {
 | 
			
		||||
 | 
			
		||||
	/* If IP accounting is enabled in the kernel and it is
 | 
			
		||||
	 * enabled for the requested interface, we use it to
 | 
			
		||||
	 * get the data. In this case, we don't use /proc/net/dev
 | 
			
		||||
	 * to get errors and collisions.
 | 
			
		||||
	 */
 | 
			
		||||
 | 
			
		||||
	f = fopen ("/proc/net/ip_acct", "r");
 | 
			
		||||
	if (f) {
 | 
			
		||||
	    int success = 0;
 | 
			
		||||
 | 
			
		||||
	    /* Skip over the header line. */
 | 
			
		||||
	    fgets (buffer, BUFSIZ-1, f);
 | 
			
		||||
 | 
			
		||||
	    while (fgets (buffer, BUFSIZ-1, f)) {
 | 
			
		||||
		unsigned long long flags, packets, bytes;
 | 
			
		||||
		char *p, *dev;
 | 
			
		||||
 | 
			
		||||
		/* Skip over the network thing. */
 | 
			
		||||
		dev = skip_token (buffer) + 1;
 | 
			
		||||
		p = skip_token (dev);
 | 
			
		||||
		*p++ = 0;
 | 
			
		||||
 | 
			
		||||
		if (strcmp (dev, interface))
 | 
			
		||||
		    continue;
 | 
			
		||||
 | 
			
		||||
		success = 1;
 | 
			
		||||
 | 
			
		||||
		p = skip_token (p);
 | 
			
		||||
 | 
			
		||||
		flags   = strtoull (p, &p, 16);
 | 
			
		||||
 | 
			
		||||
		p = skip_multiple_token (p, 2);
 | 
			
		||||
 | 
			
		||||
		packets = strtoull (p, &p, 0);
 | 
			
		||||
		bytes   = strtoull (p, &p, 0);
 | 
			
		||||
 | 
			
		||||
		if (flags & _GLIBTOP_IP_FW_ACCTIN) {
 | 
			
		||||
		    /* Incoming packets only. */
 | 
			
		||||
 | 
			
		||||
		    buf->packets_total += packets;
 | 
			
		||||
		    buf->packets_in += packets;
 | 
			
		||||
 | 
			
		||||
		    buf->bytes_total += bytes;
 | 
			
		||||
		    buf->bytes_in += bytes;
 | 
			
		||||
 | 
			
		||||
		    buf->flags |= _glibtop_sysdeps_netload_in;
 | 
			
		||||
 | 
			
		||||
		} else if (flags & _GLIBTOP_IP_FW_ACCTOUT) {
 | 
			
		||||
		    /* Outgoing packets only. */
 | 
			
		||||
 | 
			
		||||
		    buf->packets_total += packets;
 | 
			
		||||
		    buf->packets_out += packets;
 | 
			
		||||
 | 
			
		||||
		    buf->bytes_total += bytes;
 | 
			
		||||
		    buf->bytes_out += bytes;
 | 
			
		||||
 | 
			
		||||
		    buf->flags |= _glibtop_sysdeps_netload_out;
 | 
			
		||||
 | 
			
		||||
		} else {
 | 
			
		||||
		    /* Only have total values. */
 | 
			
		||||
 | 
			
		||||
		    buf->packets_total += packets;
 | 
			
		||||
		    buf->bytes_total += bytes;
 | 
			
		||||
 | 
			
		||||
		    buf->flags |= _glibtop_sysdeps_netload_total;
 | 
			
		||||
		}
 | 
			
		||||
	    }
 | 
			
		||||
 | 
			
		||||
	    fclose (f);
 | 
			
		||||
 | 
			
		||||
	    if (success) return;
 | 
			
		||||
	}
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /* Ok, either IP accounting is not enabled in the kernel or
 | 
			
		||||
	 * it was not enabled for the requested interface. */
 | 
			
		||||
     * it was not enabled for the requested interface. */
 | 
			
		||||
 | 
			
		||||
    f = fopen ("/proc/net/dev", "r");
 | 
			
		||||
    if (!f) return;
 | 
			
		||||
    if (!f) {
 | 
			
		||||
	glibtop_warn_io_r(server,
 | 
			
		||||
			  "Failed to open \"/proc/net/dev\"");
 | 
			
		||||
	return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	/* Skip over the header line. */
 | 
			
		||||
    /* Skip over the header line. */
 | 
			
		||||
    fgets (buffer, BUFSIZ-1, f);
 | 
			
		||||
    fgets (buffer, BUFSIZ-1, f);
 | 
			
		||||
 | 
			
		||||
	/* Starting with 2.1.xx (don't know exactly which version)
 | 
			
		||||
	 * /proc/net/dev contains both byte and package counters. */
 | 
			
		||||
    /* Starting with 2.1.xx (don't know exactly which version)
 | 
			
		||||
     * /proc/net/dev contains both byte and package counters. */
 | 
			
		||||
 | 
			
		||||
    p = strchr (buffer, '|');
 | 
			
		||||
    if (!p) {
 | 
			
		||||
@@ -370,7 +370,7 @@ glibtop_get_netload_s (glibtop *server, glibtop_netload *buf,
 | 
			
		||||
    have_bytes = strncmp (++p, "bytes", 5) == 0;
 | 
			
		||||
 | 
			
		||||
    /* Count remaining 'Receive' fields so we know where
 | 
			
		||||
	 * the first 'Transmit' field starts. */
 | 
			
		||||
     * the first 'Transmit' field starts. */
 | 
			
		||||
 | 
			
		||||
    fields = 0;
 | 
			
		||||
    while (*p != '|') {
 | 
			
		||||
@@ -445,6 +445,107 @@ glibtop_get_netload_s (glibtop *server, glibtop_netload *buf,
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fclose (f);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Provides network statistics. */
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
glibtop_get_netload_s (glibtop *server, glibtop_netload *buf,
 | 
			
		||||
		       const char *interface)
 | 
			
		||||
{
 | 
			
		||||
    int skfd;
 | 
			
		||||
    memset (buf, 0, sizeof (glibtop_netload));
 | 
			
		||||
 | 
			
		||||
    skfd = socket (AF_INET, SOCK_DGRAM, 0);
 | 
			
		||||
    if (skfd) {
 | 
			
		||||
	struct ifreq ifr;
 | 
			
		||||
 | 
			
		||||
	g_strlcpy (ifr.ifr_name, interface, sizeof ifr.ifr_name);
 | 
			
		||||
	if (!ioctl (skfd, SIOCGIFFLAGS, &ifr)) {
 | 
			
		||||
	    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);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	g_strlcpy (ifr.ifr_name, interface, sizeof ifr.ifr_name);
 | 
			
		||||
	if (!ioctl (skfd, SIOCGIFMTU, &ifr)) {
 | 
			
		||||
	    buf->mtu = ifr.ifr_mtu;
 | 
			
		||||
	    buf->flags |= (1L << GLIBTOP_NETLOAD_MTU);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	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);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	close (skfd);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
     * Statistics
 | 
			
		||||
     */
 | 
			
		||||
 | 
			
		||||
    /* Linux 2.1.114 - don't know where exactly this was added, but
 | 
			
		||||
	 * recent kernels have byte count in /proc/net/dev so we don't
 | 
			
		||||
	 * need IP accounting.
 | 
			
		||||
	 */
 | 
			
		||||
 | 
			
		||||
    if (server->os_version_code < LINUX_VERSION_CODE(2, 1, 14)) {
 | 
			
		||||
	linux_2_0_stats(server, buf, interface);
 | 
			
		||||
    }
 | 
			
		||||
    else if (server->os_version_code > LINUX_VERSION_CODE(2, 6, 0)) {
 | 
			
		||||
	linux_2_6_stats(server, buf, interface);
 | 
			
		||||
    }
 | 
			
		||||
    else if (server->os_version_code > LINUX_VERSION_CODE(2, 4, 0)) {
 | 
			
		||||
	linux_2_4_stats(server, buf, interface);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_IFADDRS_H
 | 
			
		||||
    get_ipv6(server, buf, interface);
 | 
			
		||||
 
 | 
			
		||||
@@ -51,7 +51,7 @@ void
 | 
			
		||||
glibtop_get_proc_mem_s (glibtop *server, glibtop_proc_mem *buf, pid_t pid)
 | 
			
		||||
{
 | 
			
		||||
	char buffer [BUFSIZ], *p;
 | 
			
		||||
	const size_t pagesize = getpagesize();
 | 
			
		||||
	const size_t pagesize = get_page_size();
 | 
			
		||||
 | 
			
		||||
	glibtop_init_s (&server, GLIBTOP_SYSDEPS_MEM, 0);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -55,7 +55,7 @@ glibtop_get_proc_segment_s (glibtop *server, glibtop_proc_segment *buf,
 | 
			
		||||
			    pid_t pid)
 | 
			
		||||
{
 | 
			
		||||
	char buffer [BUFSIZ], *p;
 | 
			
		||||
	const size_t pagesize = getpagesize();
 | 
			
		||||
	const size_t pagesize = get_page_size();
 | 
			
		||||
 | 
			
		||||
	glibtop_init_s (&server, GLIBTOP_SYSDEPS_PROC_SEGMENT, 0);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -87,11 +87,7 @@ glibtop_get_proc_time_s (glibtop *server, glibtop_proc_time *buf, pid_t pid)
 | 
			
		||||
 | 
			
		||||
	/* seconds since epoch */
 | 
			
		||||
	{
 | 
			
		||||
	  /* Linux provides start_time as clock_t representing
 | 
			
		||||
	     the start of <pid> after boot_time.
 | 
			
		||||
	     Let's use glibtop_get_uptime to get boot_time.
 | 
			
		||||
	     But i'm not sure if this is safe
 | 
			
		||||
 | 
			
		||||
	  /*
 | 
			
		||||
	     See libgtop documentation.
 | 
			
		||||
 | 
			
		||||
	     #ifdef __KERNEL__
 | 
			
		||||
@@ -109,10 +105,7 @@ glibtop_get_proc_time_s (glibtop *server, glibtop_proc_time *buf, pid_t pid)
 | 
			
		||||
	     system clock is not synchronised with you hardware clock.
 | 
			
		||||
	     'man hwclock'
 | 
			
		||||
	  */
 | 
			
		||||
	  glibtop_uptime up;
 | 
			
		||||
	  glibtop_get_uptime_s(server, &up);
 | 
			
		||||
 | 
			
		||||
	  buf->start_time = up.boot_time + strtoull (p, &p, 0) / 100;
 | 
			
		||||
	  buf->start_time = get_boot_time(server) + strtoull (p, &p, 0) / 100;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	buf->frequency = 100;
 | 
			
		||||
 
 | 
			
		||||
@@ -30,7 +30,9 @@
 | 
			
		||||
#include <time.h>
 | 
			
		||||
 | 
			
		||||
static const unsigned long _glibtop_sysdeps_uptime =
 | 
			
		||||
(1L << GLIBTOP_UPTIME_UPTIME) + (1L << GLIBTOP_UPTIME_IDLETIME);
 | 
			
		||||
  (1UL << GLIBTOP_UPTIME_UPTIME) \
 | 
			
		||||
+ (1UL << GLIBTOP_UPTIME_IDLETIME) \
 | 
			
		||||
+ (1UL << GLIBTOP_UPTIME_BOOT_TIME);
 | 
			
		||||
 | 
			
		||||
/* Init function. */
 | 
			
		||||
 | 
			
		||||
@@ -57,7 +59,7 @@ glibtop_get_uptime_s (glibtop *server, glibtop_uptime *buf)
 | 
			
		||||
 | 
			
		||||
	buf->uptime   = g_ascii_strtod (buffer, &p);
 | 
			
		||||
	buf->idletime = g_ascii_strtod (p, &p);
 | 
			
		||||
	buf->boot_time = (guint64) time(NULL) - (guint64) buf->uptime;
 | 
			
		||||
	buf->boot_time = get_boot_time(server);
 | 
			
		||||
 | 
			
		||||
	buf->flags = _glibtop_sysdeps_uptime;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user