Compare commits
	
		
			38 Commits
		
	
	
		
			LIBGTOP_2_
			...
			LIBGTOP_1_
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					d8871029eb | ||
| 
						 | 
					6799ce187b | ||
| 
						 | 
					2b6b2578be | ||
| 
						 | 
					1b0a9fd291 | ||
| 
						 | 
					43e070dd8b | ||
| 
						 | 
					b0d18119ff | ||
| 
						 | 
					be05f8163a | ||
| 
						 | 
					d6cdf95d83 | ||
| 
						 | 
					2256a9127f | ||
| 
						 | 
					e6507a80be | ||
| 
						 | 
					8411e566b4 | ||
| 
						 | 
					40854f4179 | ||
| 
						 | 
					41062d0262 | ||
| 
						 | 
					58c882a860 | ||
| 
						 | 
					789d156972 | ||
| 
						 | 
					19c24da036 | ||
| 
						 | 
					929a025f53 | ||
| 
						 | 
					6a7c289305 | ||
| 
						 | 
					b65a4a7dcb | ||
| 
						 | 
					39b2fffe83 | ||
| 
						 | 
					efb913acff | ||
| 
						 | 
					79e756a2f7 | ||
| 
						 | 
					b08968e644 | ||
| 
						 | 
					dff497d2fa | ||
| 
						 | 
					38de742ca4 | ||
| 
						 | 
					e0d3401bc4 | ||
| 
						 | 
					aae2b5a94d | ||
| 
						 | 
					a5bd38fc19 | ||
| 
						 | 
					931b8f065e | ||
| 
						 | 
					f7885e488f | ||
| 
						 | 
					8122db69ee | ||
| 
						 | 
					ab13d4919d | ||
| 
						 | 
					1d955fbf1f | ||
| 
						 | 
					8af25a2003 | ||
| 
						 | 
					12eb6a25ec | ||
| 
						 | 
					77ced087a1 | ||
| 
						 | 
					983475d0c1 | ||
| 
						 | 
					70b65c05e5 | 
							
								
								
									
										34
									
								
								.cvsignore
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								.cvsignore
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,34 @@
 | 
			
		||||
Makefile
 | 
			
		||||
Makefile.in
 | 
			
		||||
aclocal.m4
 | 
			
		||||
config.cache
 | 
			
		||||
config.h
 | 
			
		||||
config.h.in
 | 
			
		||||
config.log
 | 
			
		||||
config.sub
 | 
			
		||||
config.guess
 | 
			
		||||
config.status
 | 
			
		||||
configure
 | 
			
		||||
gtopConf.sh
 | 
			
		||||
i386-bsdi
 | 
			
		||||
i686-pc-linux-gnu
 | 
			
		||||
intl
 | 
			
		||||
libgtop-0.01.tar.gz
 | 
			
		||||
libgtop-mirror.sh.swp
 | 
			
		||||
libgtopConf.sh
 | 
			
		||||
libtool
 | 
			
		||||
ltconfig
 | 
			
		||||
ltmain.sh
 | 
			
		||||
macros
 | 
			
		||||
stamp-h
 | 
			
		||||
sun4
 | 
			
		||||
sun4sol2
 | 
			
		||||
support
 | 
			
		||||
i386-freebsd
 | 
			
		||||
alpha-dec-osf3.0
 | 
			
		||||
i686-pc-linux-gnu-linux
 | 
			
		||||
libgtop-config
 | 
			
		||||
ABOUT-NLS
 | 
			
		||||
libgtop.spec
 | 
			
		||||
libgtop-0.99.*.tar.gz
 | 
			
		||||
libgtop-0.99.*
 | 
			
		||||
							
								
								
									
										2
									
								
								AUTHORS
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								AUTHORS
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,2 @@
 | 
			
		||||
Martin Baulig (martin@home-of-linux.org)
 | 
			
		||||
Drazen Kacar (dave@srce.hr)
 | 
			
		||||
							
								
								
									
										25
									
								
								LIBGTOP-VERSION
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								LIBGTOP-VERSION
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,25 @@
 | 
			
		||||
# Making releases:
 | 
			
		||||
#   LIBGTOP_MICRO_VERSION += 1;
 | 
			
		||||
#   LIBGTOP_INTERFACE_AGE += 1;
 | 
			
		||||
#   LIBGTOP_BINARY_AGE += 1;
 | 
			
		||||
# if any functions have been added, set LIBGTOP_INTERFACE_AGE to 0.
 | 
			
		||||
# if backwards compatibility has been broken,
 | 
			
		||||
# set LIBGTOP_BINARY_AGE and LIBGTOP_INTERFACE_AGE to 0.
 | 
			
		||||
#
 | 
			
		||||
LIBGTOP_MAJOR_VERSION=1
 | 
			
		||||
LIBGTOP_MINOR_VERSION=0
 | 
			
		||||
LIBGTOP_MICRO_VERSION=3
 | 
			
		||||
 | 
			
		||||
LIBGTOP_INTERFACE_AGE=2
 | 
			
		||||
LIBGTOP_BINARY_AGE=2
 | 
			
		||||
 | 
			
		||||
# Increase each time you change the client/server protocol.
 | 
			
		||||
LIBGTOP_SERVER_VERSION=5
 | 
			
		||||
 | 
			
		||||
# Don't change this
 | 
			
		||||
LIBGTOP_VERSION=$LIBGTOP_MAJOR_VERSION.$LIBGTOP_MINOR_VERSION.$LIBGTOP_MICRO_VERSION
 | 
			
		||||
LIBGTOP_VERSION_CODE=`echo "$LIBGTOP_MAJOR_VERSION 1000000 * $LIBGTOP_MINOR_VERSION 1000 * + $LIBGTOP_MICRO_VERSION + p q" | dc`
 | 
			
		||||
 | 
			
		||||
# For automake.
 | 
			
		||||
VERSION=$LIBGTOP_VERSION
 | 
			
		||||
PACKAGE=libgtop
 | 
			
		||||
							
								
								
									
										88
									
								
								Makefile.am
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										88
									
								
								Makefile.am
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,88 @@
 | 
			
		||||
## Process this file with automake to produce Makefile.in.
 | 
			
		||||
 | 
			
		||||
if EXAMPLES
 | 
			
		||||
examples_SUBDIRS = examples
 | 
			
		||||
else
 | 
			
		||||
examples_SUBDIRS =
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
if BUILD_GNOME_SUPPORT
 | 
			
		||||
support = support
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
SUBDIRS = po intl $(support) macros misc include sysdeps lib src \
 | 
			
		||||
	  $(examples_SUBDIRS) doc
 | 
			
		||||
 | 
			
		||||
include_HEADERS = glibtop.h
 | 
			
		||||
 | 
			
		||||
EXTRA_DIST = autogen.sh libgtop.spec.in copyright.txt libgtopConf.sh.in \
 | 
			
		||||
	LIBGTOP-VERSION features.def libgtop-config.in RELNOTES-0.25 \
 | 
			
		||||
	RELNOTES-1.0 libgtop-sysdeps.m4 README NEWS.old libgtop-mirror.sh
 | 
			
		||||
 | 
			
		||||
dist-hook:
 | 
			
		||||
	cp libgtop.spec $(distdir)
 | 
			
		||||
 | 
			
		||||
release:
 | 
			
		||||
	$(MAKE) dist distdir=$(PACKAGE)-$(VERSION)
 | 
			
		||||
 | 
			
		||||
## Put `exec' in the name because this should be installed by
 | 
			
		||||
## `install-exec', not `install-data'.
 | 
			
		||||
confexecdir	= $(libdir)
 | 
			
		||||
confexec_DATA	= $(top_builddir)/libgtopConf.sh \
 | 
			
		||||
		  $(top_builddir)/libgtop-features.def
 | 
			
		||||
 | 
			
		||||
CLEANFILES=libgtopConf.sh
 | 
			
		||||
 | 
			
		||||
bin_SCRIPTS = $(top_builddir)/libgtop-config
 | 
			
		||||
 | 
			
		||||
## to automatically rebuild aclocal.m4 if any of the macros in
 | 
			
		||||
## `macros/' change
 | 
			
		||||
@MAINT@ include macros/macros.dep
 | 
			
		||||
@MAINT@macros/macros.dep: macros/Makefile.am
 | 
			
		||||
@MAINT@	cd macros && $(MAKE) macros.dep
 | 
			
		||||
 | 
			
		||||
@MAINT@$(top_srcdir)/aclocal.m4: libgtop-sysdeps.m4
 | 
			
		||||
 | 
			
		||||
## We create libgtopConf.sh here and not from configure because we want
 | 
			
		||||
## to get the paths expanded correctly.  Macros like srcdir are given
 | 
			
		||||
## the value NONE in configure if the user doesn't specify them (this
 | 
			
		||||
## is an autoconf feature, not a bug).
 | 
			
		||||
libgtopConf.sh: libgtopConf.sh.in Makefile
 | 
			
		||||
## Use sed and then mv to avoid problems if the user interrupts.
 | 
			
		||||
	sed -e 's#\@LIBGTOP_LIBDIR\@#$(libdir)#g' \
 | 
			
		||||
	  -e 's#\@LIBGTOP_INCLUDEDIR\@#$(includedir)#g' \
 | 
			
		||||
	  -e 's#\@LIBGTOP_DATADIR\@#$(datadir)#g' \
 | 
			
		||||
	  -e 's#\@LIBGTOP_EXTRA_LIBS\@#$(LIBGTOP_EXTRA_LIBS)#g' \
 | 
			
		||||
	  -e 's#\@LIBGTOP_LIBS\@#$(LIBGTOP_LIBS)#g' \
 | 
			
		||||
	  -e 's#\@LIBGTOP_INCS\@#$(LIBGTOP_INCS)#g' \
 | 
			
		||||
	  -e 's#\@LIBGTOP_NAMES_LIBS\@#$(LIBGTOP_NAMES_LIBS)#g' \
 | 
			
		||||
	  -e 's#\@LIBGTOP_NAMES_INCS\@#$(LIBGTOP_NAMES_INCS)#g' \
 | 
			
		||||
	  -e 's#\@LIBGTOP_GUILE_LIBS\@#$(LIBGTOP_GUILE_LIBS)#g' \
 | 
			
		||||
	  -e 's#\@LIBGTOP_GUILE_INCS\@#$(LIBGTOP_GUILE_INCS)#g' \
 | 
			
		||||
	  -e 's#\@LIBGTOP_GUILE_NAMES_LIBS\@#$(LIBGTOP_GUILE_NAMES_LIBS)#g' \
 | 
			
		||||
	  -e 's#\@LIBGTOP_GUILE_NAMES_INCS\@#$(LIBGTOP_GUILE_NAMES_INCS)#g' \
 | 
			
		||||
	  -e 's#\@LIBGTOP_BINDIR\@#$(LIBGTOP_BINDIR)#g' \
 | 
			
		||||
	  -e 's#\@LIBGTOP_SERVER\@#$(LIBGTOP_SERVER)#g' \
 | 
			
		||||
	  -e 's#\@LIBGTOP_MAJOR_VERSION\@#$(LIBGTOP_MAJOR_VERSION)#g' \
 | 
			
		||||
	  -e 's#\@LIBGTOP_MINOR_VERSION\@#$(LIBGTOP_MINOR_VERSION)#g' \
 | 
			
		||||
	  -e 's#\@LIBGTOP_MICRO_VERSION\@#$(LIBGTOP_MICRO_VERSION)#g' \
 | 
			
		||||
	  -e 's#\@LIBGTOP_VERSION\@#$(LIBGTOP_VERSION)#g' \
 | 
			
		||||
	  -e 's#\@LIBGTOP_VERSION_CODE\@#$(LIBGTOP_VERSION_CODE)#g' \
 | 
			
		||||
	  -e 's#\@LIBGTOP_SERVER_VERSION\@#$(LIBGTOP_SERVER_VERSION)#g' \
 | 
			
		||||
	  -e 's#\@libgtop_sysdeps_dir\@#$(libgtop_sysdeps_dir)#g' \
 | 
			
		||||
	  -e 's#\@libgtop_need_server\@#$(libgtop_need_server)#g' \
 | 
			
		||||
	  -e 's#\@libgtop_use_machine_h\@#$(libgtop_use_machine_h)#g' \
 | 
			
		||||
	  -e 's#\@libgtop_guile_found\@#$(libgtop_guile_found)#g' \
 | 
			
		||||
	  -e 's#\@libgtop_want_examples\@#$(libgtop_want_examples)#g' \
 | 
			
		||||
	      < $(srcdir)/libgtopConf.sh.in > libgtopConf.tmp \
 | 
			
		||||
	  && mv libgtopConf.tmp libgtopConf.sh
 | 
			
		||||
 | 
			
		||||
libgtop-config: libgtop-config.in Makefile
 | 
			
		||||
	sed -e 's#\@LIBGTOP_LIBDIR\@#$(libdir)#g' \
 | 
			
		||||
	      < $(srcdir)/libgtop-config.in > libgtop-config.tmp \
 | 
			
		||||
	  && mv libgtop-config.tmp libgtop-config && \
 | 
			
		||||
		chmod 755 libgtop-config
 | 
			
		||||
 | 
			
		||||
libgtop-features.def: features.def
 | 
			
		||||
	@LN_S@ $< $@
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										244
									
								
								NEWS.old
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										244
									
								
								NEWS.old
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,244 @@
 | 
			
		||||
$Id$
 | 
			
		||||
 | 
			
		||||
Jun/01/1998
 | 
			
		||||
===========
 | 
			
		||||
 | 
			
		||||
	* We have some new ``suffix rules'':
 | 
			
		||||
 | 
			
		||||
	  '__l' is a function defined in the client part;
 | 
			
		||||
	  '__s' is a function defined in the sysdeps part and
 | 
			
		||||
	  '__p' is a function that needs special priviledges.
 | 
			
		||||
	  '__r' is mapped either on '__p' or on '__s'.
 | 
			
		||||
	  the function without suffix is mapped on '__l'.
 | 
			
		||||
 | 
			
		||||
	* We now decide at runtime whether or not using the server
 | 
			
		||||
	is required for a particular function. All user programs
 | 
			
		||||
	now call the '__l' function defined in '-lgtop' (in the lib
 | 
			
		||||
	subdir). These functions either use 'glibtop_call__l' to
 | 
			
		||||
	call the server or call the '__r' function.
 | 
			
		||||
 | 
			
		||||
	* A function in the sysdeps directory now has the '__s' suffix
 | 
			
		||||
	if it do not need any priviledges (and thus can be called directly
 | 
			
		||||
	from client code) and the '__p' suffix otherwise (when it has to
 | 
			
		||||
	be called from the server).
 | 
			
		||||
 | 
			
		||||
	* If you call one of these functions:
 | 
			
		||||
 | 
			
		||||
	  -> use the '__p' suffix to be sure to get the SUID-safe one
 | 
			
		||||
	     (used in the server).
 | 
			
		||||
	  -> use the '__s' suffix to be sure to get a function that
 | 
			
		||||
	     doesn't need any priviledges.
 | 
			
		||||
	  -> use the '__r' suffix otherwise (it is mapped either on the
 | 
			
		||||
	     '__p' or on the '__s' one).
 | 
			
		||||
 | 
			
		||||
	Only use the '__p' and '__s' functions in a 'GLIBTOP_SUID_<feature>'
 | 
			
		||||
	conditional, otherwise you'll get undefined symbols !
 | 
			
		||||
 | 
			
		||||
	* The server is now started from 'glibtop_init__r', but only when
 | 
			
		||||
	it's really needed; for instance on DEC OSF/1 you only need it
 | 
			
		||||
	for the proc* features - if you program only fetches the CPU usage,
 | 
			
		||||
	now server will be started.
 | 
			
		||||
 | 
			
		||||
	* Sorry, at the moment everything is a little bit unstable, I'm doing
 | 
			
		||||
	heavy changes. I've just some great ideas which still need some work:
 | 
			
		||||
 | 
			
		||||
	  -> I want to have a SUID server that only implements those features
 | 
			
		||||
	     that need to be SUID; everything else uses the sysdeps code directly.
 | 
			
		||||
 | 
			
		||||
	  -> If a program only uses stuff that do not need the server, the
 | 
			
		||||
	     server will not be started at all.
 | 
			
		||||
 | 
			
		||||
	  -> I'm working on some kind of proxy server that can be used on a remote
 | 
			
		||||
	     host; in feature one can then use the MDI stuff from ghex in gtop to
 | 
			
		||||
	     have notebook pages displaying processes from different hosts.
 | 
			
		||||
 | 
			
		||||
	* Well it is as much unstable that it only works under Linux at the moment.
 | 
			
		||||
 | 
			
		||||
1998-06-01  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* sysdeps/common/sysdeps.c: now using '__r' functions,
 | 
			
		||||
	they are #defined either as the '__p' or the '__s' ones.
 | 
			
		||||
 | 
			
		||||
	* sysdeps/linux/*.c: changed call of 'glibtop_init__r',
 | 
			
		||||
	it now takes two additional arguments.
 | 
			
		||||
 | 
			
		||||
	* examples/{first.c, second.c}: now using 'glibtop_init'
 | 
			
		||||
	instead of 'glibtop_init__r'.
 | 
			
		||||
 | 
			
		||||
	* include/glibtop/sysdeps.h: added 'dummy' member so
 | 
			
		||||
	'GLIBTOP_SYSDEPS_<feature>' now start with 1.
 | 
			
		||||
 | 
			
		||||
	* include/glibtop/*.h: we now #define 'glibtop_get_<feature>'
 | 
			
		||||
	as 'glibtop_get_<feature>__l' and 'glibtop_get_<feature>__r'
 | 
			
		||||
	either as the '__p' or the '__s' function.
 | 
			
		||||
 | 
			
		||||
	* lib/*.c: removed #if's - we now decide at runtime
 | 
			
		||||
	whether to use the server or to call the appropriate
 | 
			
		||||
	function for the sysdeps directory.
 | 
			
		||||
 | 
			
		||||
1998-05-28  Martin Baulig  <baulig@merkur.uni-trier.de>
 | 
			
		||||
 | 
			
		||||
	* src/server/main.c: we now use the '__p' functions,
 | 
			
		||||
	but only if the appropriate 'GLIBTOP_SUID_<feature>'
 | 
			
		||||
	has a non-zero value.
 | 
			
		||||
	
 | 
			
		||||
	* configure.in (@machine_incs@): always use 
 | 
			
		||||
	`-I$(top_srcdir)/sysdeps/@sysdeps_dir@'; it's no
 | 
			
		||||
	longer conditional.
 | 
			
		||||
 | 
			
		||||
	* examples/Makefile.am: removed the '_linux' examples.
 | 
			
		||||
	
 | 
			
		||||
	* sysdeps/linux/*.c: renamed all functions implementing
 | 
			
		||||
	features to '__s'.
 | 
			
		||||
	
 | 
			
		||||
	* lib/*.c: renamed all functions implementing features
 | 
			
		||||
	to '__l'; we only emit code for those functions if the
 | 
			
		||||
 	corresponding 'GLIBTOP_SUID_<feature>' has a positive value.
 | 
			
		||||
	
 | 
			
		||||
	* include/glibtop/*.h: added some new function suffixes:
 | 
			
		||||
	'__l' is a function defined in the client part;
 | 
			
		||||
	'__s' is a function defined in the sysdeps part and
 | 
			
		||||
	'__p' is a function that needs special priviledges.
 | 
			
		||||
	'__r' is mapped either on '__l' or on '__s'.
 | 
			
		||||
	
 | 
			
		||||
	* sysdeps/linux/glibtop_server.h: New file -
 | 
			
		||||
	defines system dependent constants 'GLIBTOP_SUID_<feature>'
 | 
			
		||||
	being either 'GLIBTOP_SYSDEPS_<feature>'+1 depending upon
 | 
			
		||||
 	whether or not this feature requires using the server.
 | 
			
		||||
 | 
			
		||||
	* lib/sysdeps.c: removed that file; it is no longer
 | 
			
		||||
	needed.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
May/21/1998
 | 
			
		||||
===========
 | 
			
		||||
 | 
			
		||||
* doc/gnome-hackers.sgml: This is a short intro on how to use libgtop
 | 
			
		||||
  in the GNOME project. It covers especially the use of its 'configure'
 | 
			
		||||
  script and the automatically generated 'gtopConf.sh'.
 | 
			
		||||
 | 
			
		||||
May/20/1998
 | 
			
		||||
===========
 | 
			
		||||
 | 
			
		||||
* 'gtopConf.sh' now defines 'GTOP_LIBS' and 'GTOP_INCS' in a manner
 | 
			
		||||
  that they contain everything that is needed to link some program with
 | 
			
		||||
  libgtop. It will use '-lgtop' only if the server is really needed and
 | 
			
		||||
  '-lgtop_sysdeps' otherwise;
 | 
			
		||||
 | 
			
		||||
* 'gtopConf.sh' additionally defines 'GTOP_GUILE_LIBS' and 'GTOP_GUILE_INCS'
 | 
			
		||||
  containing everything that is needed to link some program both with
 | 
			
		||||
  libgtop and its guile interface. They are identically to 'GTOP_LIBS'
 | 
			
		||||
  and 'GTOP_INCS' if building the guile interface is disabled or guile
 | 
			
		||||
  cannot be found on the system.
 | 
			
		||||
 | 
			
		||||
* 'configure' takes additional arguments '--enable-libgtop-server' and
 | 
			
		||||
  '--disable-libgtop-server' to use the server even when it's not needed
 | 
			
		||||
  or to disable it's use where it's needed.
 | 
			
		||||
 | 
			
		||||
* 'configure' takes an argument '--without-libgtop-guile' to disable
 | 
			
		||||
  guile support.
 | 
			
		||||
 | 
			
		||||
* 'configure takes an argument '--without-libgtop-names' to remove
 | 
			
		||||
  '-lgtop_names' (and '-lgtop_guile_names' when we have guile) from
 | 
			
		||||
  'GTOP_LIBS'; in this case these libraries are not even built.
 | 
			
		||||
 | 
			
		||||
May/19/1998
 | 
			
		||||
===========
 | 
			
		||||
 | 
			
		||||
* Libgtop is now in the GNOME CVS Repository.
 | 
			
		||||
 | 
			
		||||
May/17/1998
 | 
			
		||||
===========
 | 
			
		||||
 | 
			
		||||
* we have now 'const char *glibtop_types_* []' consisting
 | 
			
		||||
  of the C types of the corresponding files of '_glibtop_*'.
 | 
			
		||||
 | 
			
		||||
* added guile function '(glibtop-types-*)' and '(glibtop-descriptions-*)'.
 | 
			
		||||
 | 
			
		||||
May/10/1998
 | 
			
		||||
===========
 | 
			
		||||
 | 
			
		||||
* Port to DEC OSF1 3.0 has been made:
 | 
			
		||||
 | 
			
		||||
  cpu		(total, user, nice, sys, idle)
 | 
			
		||||
  mem		(total, used, free)
 | 
			
		||||
 | 
			
		||||
  loadavg	(loadavg)
 | 
			
		||||
  uptime	(uptime)
 | 
			
		||||
 | 
			
		||||
  msg_limits	(map, max, mnb, mni, tql)
 | 
			
		||||
  sem_limits	(mni, msl, opm, vmx, aem)
 | 
			
		||||
  shm_limits	(max, min, mni, seg)
 | 
			
		||||
 | 
			
		||||
  The following need the server to be SUID root:
 | 
			
		||||
 | 
			
		||||
  proclist	(total, number, size)
 | 
			
		||||
  procdata	(cmd, state, uid, pid, ppid, pgrp, tty, k_flags,
 | 
			
		||||
		 session, tpgid, sigignore, sigcatch, signal, nice, 
 | 
			
		||||
		 priority, resident, rss, vsize, utime, stime,
 | 
			
		||||
		 cutime, cstime, trs, drs)
 | 
			
		||||
 | 
			
		||||
May/07/1998
 | 
			
		||||
===========
 | 
			
		||||
 | 
			
		||||
* 'flags' member of sysdeps/linux/procdata.c is now
 | 
			
		||||
  'unsigned long flags [2]'.
 | 
			
		||||
 | 
			
		||||
* When we give glibtop_get_procdata () a pid of zero, only
 | 
			
		||||
  the flags are returned.
 | 
			
		||||
 | 
			
		||||
* We now use static constants instead of #defines for sysdeps flags.
 | 
			
		||||
 | 
			
		||||
May/03/1998
 | 
			
		||||
===========
 | 
			
		||||
 | 
			
		||||
* VPATH-Build now working; sometimes it's necessary to copy
 | 
			
		||||
  $(top_srcdir)/po/cat-id-tbl.c to $(top_builddir)/po.
 | 
			
		||||
 | 
			
		||||
* The library has been tested on the following systems:
 | 
			
		||||
 | 
			
		||||
  - i686-pc-linux-gnu
 | 
			
		||||
  - sparc-sun-sunos4.1.1
 | 
			
		||||
  - alpha-dec-osf1 (that's DEC OSF1 3.0 and 3.2)
 | 
			
		||||
 | 
			
		||||
* Compilation has been tested on the following systems (I have no root
 | 
			
		||||
  access there and cannot test the library because of this):
 | 
			
		||||
 | 
			
		||||
  - sparc-sun-solaris2
 | 
			
		||||
  - i386-bsdi
 | 
			
		||||
 | 
			
		||||
* Does no longer require Gnome.
 | 
			
		||||
 | 
			
		||||
* Guile-Parts are compiled only if guile can be found.
 | 
			
		||||
 | 
			
		||||
* Some of the executables are statically linked to copy them more easily
 | 
			
		||||
  between machines.
 | 
			
		||||
 | 
			
		||||
May/02/1998
 | 
			
		||||
===========
 | 
			
		||||
 | 
			
		||||
 * Global changes to the interfaces, all functions except glibtop_open()
 | 
			
		||||
   and glibtop_close() that took a server argument have now a '__r' suffix;
 | 
			
		||||
   the original name is now a macro that uses glibtop_global_server.
 | 
			
		||||
 | 
			
		||||
Apr/10/1998
 | 
			
		||||
===========
 | 
			
		||||
Added new directory sysdeps/guile/names. It is the guile interface
 | 
			
		||||
to the gtop_names library found in sysdeps/names. Changed
 | 
			
		||||
GLIBTOP_DESCRIPTIONS to GLIBTOP_NAMES and added GLIBTOP_GUILE_NAMES
 | 
			
		||||
to the header files.
 | 
			
		||||
 | 
			
		||||
Apr/09/1998
 | 
			
		||||
===========
 | 
			
		||||
Added new directories guile and names to sysdeps. In names are
 | 
			
		||||
some string constants about the data stored in the structures.
 | 
			
		||||
guile is a guile interface for the library. It is used in
 | 
			
		||||
examples/third (which has been completely rewritten).
 | 
			
		||||
The header files define things from names when GLIBTOP_DESCRIPTIONS
 | 
			
		||||
if defined and/or from guile when HAVE_GUILE is defined.
 | 
			
		||||
 | 
			
		||||
Apr/08/1998
 | 
			
		||||
===========
 | 
			
		||||
 | 
			
		||||
Added guile wrapper for the library (see examples/third).
 | 
			
		||||
							
								
								
									
										8
									
								
								README
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								README
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,8 @@
 | 
			
		||||
$Id$
 | 
			
		||||
 | 
			
		||||
LATEST NEWS:
 | 
			
		||||
===========
 | 
			
		||||
 | 
			
		||||
Please look also in the file 'NEWS' for latest news.
 | 
			
		||||
 
 | 
			
		||||
Martin
 | 
			
		||||
							
								
								
									
										146
									
								
								RELNOTES-0.25
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										146
									
								
								RELNOTES-0.25
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,146 @@
 | 
			
		||||
RELEASE NOTES FOR LIBGTOP 0.25 STABLE
 | 
			
		||||
=====================================
 | 
			
		||||
 | 
			
		||||
OVERVIEW
 | 
			
		||||
--------
 | 
			
		||||
 | 
			
		||||
LibGTop is a library that read information about processes and the running
 | 
			
		||||
systems. This information include:
 | 
			
		||||
 | 
			
		||||
General System Information
 | 
			
		||||
 | 
			
		||||
cpu		- CPU Usage
 | 
			
		||||
mem		- Memory Usage
 | 
			
		||||
swap		- Swap Usage (including paging activity)
 | 
			
		||||
loadavg		- Load average (including nr_running, nr_tasks, last_pid)
 | 
			
		||||
uptime		- Uptime and Idle time, can be calculated from CPU usage
 | 
			
		||||
 | 
			
		||||
SYS V IPC Limits:
 | 
			
		||||
 | 
			
		||||
shm_limits	- Shared Memory Limits
 | 
			
		||||
msg_limits	- Message Queue Limits
 | 
			
		||||
sem_limits	- Semaphore Set Limits
 | 
			
		||||
 | 
			
		||||
Process List:
 | 
			
		||||
 | 
			
		||||
proclist	- List of processes
 | 
			
		||||
 | 
			
		||||
Process information:
 | 
			
		||||
 | 
			
		||||
proc_state	- cmd, state, uid, gid
 | 
			
		||||
proc_uid	- uid,euid,gid,egid,pid,ppid,pgrp
 | 
			
		||||
		  session,tty,tpgid,priority,nice
 | 
			
		||||
proc_mem	- size,vsize,resident,share,rss,rss_rlim
 | 
			
		||||
proc_time	- start_time,rtime,utime,stime,cutime,cstime
 | 
			
		||||
		  timeout,it_real_value,frequency
 | 
			
		||||
proc_signal	- signal,blocked,sigignore,sigcatch
 | 
			
		||||
proc_kernel	- k_flags,min_flt,maj_flt,cmin_flt,cmaj_flt
 | 
			
		||||
		  kstk_esp,kstk_eip,nwchan,wchan
 | 
			
		||||
proc_segment	- text_rss,shlib_rss,data_rss,stack_rss,dirty_size
 | 
			
		||||
		  start_code,end_code,start_stack
 | 
			
		||||
 | 
			
		||||
Process maps:
 | 
			
		||||
 | 
			
		||||
proc_map	- Process map (/proc/<pid>/maps under Linux)
 | 
			
		||||
 | 
			
		||||
File system usage:
 | 
			
		||||
 | 
			
		||||
mountlist	- List of currently mounted filesystems
 | 
			
		||||
fsusage		- File system usage
 | 
			
		||||
 | 
			
		||||
PORTABILITY:
 | 
			
		||||
-----------
 | 
			
		||||
 | 
			
		||||
LibGtop is designed to be as portable as possible. None of the functions
 | 
			
		||||
and retrieved information should be specific to a specific operating
 | 
			
		||||
system. So you only need to port the system dependent part of the library
 | 
			
		||||
to a new system and all application programs can then use libgtop on this
 | 
			
		||||
new system.
 | 
			
		||||
 | 
			
		||||
CLIENT/SERVER MODEL:
 | 
			
		||||
-------------------
 | 
			
		||||
 | 
			
		||||
Some systems like DEC OSF/1 or BSD require special priviledges for the calling
 | 
			
		||||
proces to fetch the required information (SUID root/SGID kmem). To solve this
 | 
			
		||||
problem, I designed a client/server model which makes a call to a SUID/SGID
 | 
			
		||||
server which fetches the required information whenever it is required. This
 | 
			
		||||
server is only called for features that really require priviledges, otherwise
 | 
			
		||||
the sysdeps code is called directory (every user can get the CPU usage on
 | 
			
		||||
DEC OSF/1, but only root can get information about processes other than the
 | 
			
		||||
current one).
 | 
			
		||||
 | 
			
		||||
There is also some kind of daemon which can be used to fetch information from
 | 
			
		||||
remote systems (still experimental). This daemon normally runs as nobody and
 | 
			
		||||
calls the SUID/SGID itself when needed.
 | 
			
		||||
 | 
			
		||||
GNOME APPLETS:
 | 
			
		||||
--------------
 | 
			
		||||
 | 
			
		||||
There are some applets and applications which already use LibGTop. They can
 | 
			
		||||
be found in the `libgtop-apps' module in the GNOME CVS tree:
 | 
			
		||||
 | 
			
		||||
* Applets:  cpuload, cpumemusage - they need LibGTop to get their information
 | 
			
		||||
                                   on all systems other than Linux.
 | 
			
		||||
 | 
			
		||||
* Applets:  diskusage - just uses the mountlist/fsusage features of LibGTop,
 | 
			
		||||
                        the one in gnome-core also works on other systems.
 | 
			
		||||
 | 
			
		||||
* Applets:  multiload - I enhanced the cpuload applet a little bit, it is
 | 
			
		||||
                        now a multi applet and can display CPU, Memory and
 | 
			
		||||
                        Swap usages.
 | 
			
		||||
 | 
			
		||||
GTOP:
 | 
			
		||||
----
 | 
			
		||||
 | 
			
		||||
This cool GNOME app has been ported to use LibGTop. It can be found in
 | 
			
		||||
`libgtop-apps/gtop' in the GNOME CVS tree.
 | 
			
		||||
 | 
			
		||||
You can now use nearly the full functionality of GTop on FreeBSD !
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
PLATTFORM SPECIFIC NOTES FOR LINUX:
 | 
			
		||||
==================================
 | 
			
		||||
 | 
			
		||||
Under Linux, LibGTop should work without problems and read everything
 | 
			
		||||
from /proc.
 | 
			
		||||
 | 
			
		||||
There is also an experimental kernel interface to read this information
 | 
			
		||||
directly from the kernel with a system call - but this is still experimental
 | 
			
		||||
and not well tested while I made this release.
 | 
			
		||||
 | 
			
		||||
PLATTFORM SPECIFIC NOTES FOR FREEBSD:
 | 
			
		||||
====================================
 | 
			
		||||
 | 
			
		||||
LibGTop should now work under FreeBSD and give you the full functionality
 | 
			
		||||
of GTop.
 | 
			
		||||
 | 
			
		||||
There are a few caveats:
 | 
			
		||||
 | 
			
		||||
* You need to manually make the `$(prefix)/bin/libgtop_server' SGID to kmem
 | 
			
		||||
  after installation and mount the /proc filesystem of FreeBSD
 | 
			
		||||
  (/proc/<pid>/mem is used withing kvm_uread ()).
 | 
			
		||||
 | 
			
		||||
* To get the filenames of the process maps displayed in GTop, you need to
 | 
			
		||||
  configure with the `--with-libgtop-inodedb' option (you need GDBM for this
 | 
			
		||||
  to work).
 | 
			
		||||
 | 
			
		||||
* You have then to create an inode database which is used to look up to
 | 
			
		||||
  filenames. This is done using the `mkinodedb' program which comes along
 | 
			
		||||
  with libgtop.
 | 
			
		||||
 | 
			
		||||
  See the file src/inodedb/README for details:
 | 
			
		||||
 | 
			
		||||
  The `mkinodedb' program which is build in this directory takes two
 | 
			
		||||
  command line arguments: the full pathname of the database to be created
 | 
			
		||||
  and the name of a configuration file consisting of directory and file names
 | 
			
		||||
  each on a line by itself - see `/etc/ld.so.conf' for an example.
 | 
			
		||||
 | 
			
		||||
  Putting a directory name in this file means all regular files found in this
 | 
			
		||||
  directory are included in the database, but it will not recursively descend
 | 
			
		||||
  into subdirectories (for instance, we want everythink in `/usr/lib' but not
 | 
			
		||||
  every single file in `/usr/lib/sgml'). You can also use filenames to include
 | 
			
		||||
  a single file.
 | 
			
		||||
 | 
			
		||||
Have fun,
 | 
			
		||||
 | 
			
		||||
Martin <martin@home-of-linux.org>
 | 
			
		||||
							
								
								
									
										163
									
								
								RELNOTES-1.0
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										163
									
								
								RELNOTES-1.0
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,163 @@
 | 
			
		||||
RELEASE NOTES FOR LIBGTOP 1.0 STABLE
 | 
			
		||||
====================================
 | 
			
		||||
 | 
			
		||||
OVERVIEW
 | 
			
		||||
--------
 | 
			
		||||
 | 
			
		||||
LibGTop is a library that read information about processes and the
 | 
			
		||||
running systems. This information include:
 | 
			
		||||
 | 
			
		||||
General System Information:
 | 
			
		||||
 | 
			
		||||
cpu		- CPU Usage
 | 
			
		||||
mem		- Memory Usage
 | 
			
		||||
swap		- Swap Usage (including paging activity)
 | 
			
		||||
loadavg		- Load average (including nr_running, nr_tasks, last_pid)
 | 
			
		||||
uptime		- Uptime and Idle time, can be calculated from CPU usage
 | 
			
		||||
 | 
			
		||||
SYS V IPC Limits:
 | 
			
		||||
 | 
			
		||||
shm_limits	- Shared Memory Limits
 | 
			
		||||
msg_limits	- Message Queue Limits
 | 
			
		||||
sem_limits	- Semaphore Set Limits
 | 
			
		||||
 | 
			
		||||
Network:
 | 
			
		||||
 | 
			
		||||
netload		- Network load
 | 
			
		||||
ppp		- PPP statistics
 | 
			
		||||
 | 
			
		||||
Process List:
 | 
			
		||||
 | 
			
		||||
proclist	- List of processes
 | 
			
		||||
 | 
			
		||||
Process information:
 | 
			
		||||
 | 
			
		||||
proc_state	- cmd, state, uid, gid
 | 
			
		||||
proc_uid	- uid,euid,gid,egid,pid,ppid,pgrp
 | 
			
		||||
		  session,tty,tpgid,priority,nice
 | 
			
		||||
proc_mem	- size,vsize,resident,share,rss,rss_rlim
 | 
			
		||||
proc_time	- start_time,rtime,utime,stime,cutime,cstime
 | 
			
		||||
		  timeout,it_real_value,frequency
 | 
			
		||||
proc_signal	- signal,blocked,sigignore,sigcatch
 | 
			
		||||
proc_kernel	- k_flags,min_flt,maj_flt,cmin_flt,cmaj_flt
 | 
			
		||||
		  kstk_esp,kstk_eip,nwchan,wchan
 | 
			
		||||
proc_segment	- text_rss,shlib_rss,data_rss,stack_rss,dirty_size
 | 
			
		||||
		  start_code,end_code,start_stack
 | 
			
		||||
 | 
			
		||||
Process maps:
 | 
			
		||||
 | 
			
		||||
proc_args	- Command line arguments
 | 
			
		||||
proc_map	- Process map (/proc/<pid>/maps under Linux)
 | 
			
		||||
 | 
			
		||||
File system usage:
 | 
			
		||||
 | 
			
		||||
mountlist	- List of currently mounted filesystems
 | 
			
		||||
fsusage		- File system usage
 | 
			
		||||
 | 
			
		||||
PORTABILITY:
 | 
			
		||||
-----------
 | 
			
		||||
 | 
			
		||||
LibGTop is designed to be as portable as possible. None of the
 | 
			
		||||
functions and retrieved information should be specific to a specific
 | 
			
		||||
operating system. So you only need to port the system dependent part
 | 
			
		||||
of the library to a new system and all application programs can then
 | 
			
		||||
use libgtop on this new system.
 | 
			
		||||
 | 
			
		||||
CLIENT/SERVER MODEL:
 | 
			
		||||
-------------------
 | 
			
		||||
 | 
			
		||||
Some systems like DEC OSF/1 or BSD require special privileges for the
 | 
			
		||||
calling process to fetch the required information (SUID root/SGID
 | 
			
		||||
kmem). To solve this problem, I designed a client/server model which
 | 
			
		||||
makes a call to a SUID/SGID server which fetches the required
 | 
			
		||||
information whenever it is required. This server is only called for
 | 
			
		||||
features that really require privileges, otherwise the sysdeps code
 | 
			
		||||
is called directory (every user can get the CPU usage on DEC OSF/1,
 | 
			
		||||
but only root can get information about processes other than the
 | 
			
		||||
current one).
 | 
			
		||||
 | 
			
		||||
There is also some kind of daemon which can be used to fetch
 | 
			
		||||
information from remote systems (still experimental). This daemon
 | 
			
		||||
normally runs as nobody and calls the SUID/SGID itself when needed.
 | 
			
		||||
 | 
			
		||||
LIBGTOP AND GNOME:
 | 
			
		||||
-----------------
 | 
			
		||||
 | 
			
		||||
LibGTop is currently used in various places in the GNOME Project,
 | 
			
		||||
for instance in some of the applets in gnome-core and - of cause -
 | 
			
		||||
this ultra-cool application called GTop ...
 | 
			
		||||
 | 
			
		||||
Although LibGTop is not specific to GNOME and under LGPL license, I
 | 
			
		||||
spent most my time during the last months to work in the GNOME project
 | 
			
		||||
so this is the primary use for LibGTop (and currently the only one).
 | 
			
		||||
 | 
			
		||||
However, you can also give its configure.in script the `--without-gnome'
 | 
			
		||||
parameter and then use it fully without GNOME in your own applications.
 | 
			
		||||
 | 
			
		||||
LIBGTOP AND GNOME - PART II:
 | 
			
		||||
---------------------------
 | 
			
		||||
 | 
			
		||||
LibGTop was tested with FreeBSD 3.0 but it should also work with
 | 
			
		||||
FreeBSD 2.2.7, NetBSD and OpenBSD.
 | 
			
		||||
 | 
			
		||||
Currently my primary aim is to help the GNOME people with our 1.0 release
 | 
			
		||||
so I won't have much time to test it with any other system than Linux.
 | 
			
		||||
 | 
			
		||||
However, I consider FreeBSD, NetBSD and OpenBSD as supported systems for
 | 
			
		||||
LibGTop and whenever I get bug reports I will do my best to fix them as
 | 
			
		||||
quickly as possible.
 | 
			
		||||
 | 
			
		||||
PLATFORM SPECIFIC NOTES FOR LINUX:
 | 
			
		||||
==================================
 | 
			
		||||
 | 
			
		||||
Under Linux, LibGTop should work without problems and read everything
 | 
			
		||||
from /proc.
 | 
			
		||||
 | 
			
		||||
LibGTop 0.25 also had an experimental kernel interface to read this
 | 
			
		||||
information directly from the kernel with a system call - but I have
 | 
			
		||||
currently dropped support for this as I am too busy with GNOME
 | 
			
		||||
development to keep current with kernel hacking.
 | 
			
		||||
 | 
			
		||||
PLATFORM SPECIFIC NOTES FOR SOLARIS:
 | 
			
		||||
====================================
 | 
			
		||||
 | 
			
		||||
Since so many people were asking me about this:
 | 
			
		||||
 | 
			
		||||
LibGTop currently does not have any support for Solaris, and it will
 | 
			
		||||
never have until some volunteer writes the code for it. I can't do this
 | 
			
		||||
myself since I do not have any machine to test it on.
 | 
			
		||||
 | 
			
		||||
PLATFORM SPECIFIC NOTES FOR BSD:
 | 
			
		||||
=================================
 | 
			
		||||
 | 
			
		||||
There are a few caveats:
 | 
			
		||||
 | 
			
		||||
* You need to manually make the `$(prefix)/bin/libgtop_server' SGID to
 | 
			
		||||
  kmem after installation and mount the /proc file system of FreeBSD
 | 
			
		||||
  (/proc/<pid>/mem is used within kvm_uread ()).
 | 
			
		||||
 | 
			
		||||
* To get the filenames of the process maps displayed in GTop, you need
 | 
			
		||||
  to configure with the `--with-libgtop-inodedb' option (you need GDBM
 | 
			
		||||
  for this to work).
 | 
			
		||||
 | 
			
		||||
  You have then to create an inode database which is used to look up
 | 
			
		||||
  filenames. This is done using the `mkinodedb' program which comes
 | 
			
		||||
  along with libgtop.
 | 
			
		||||
 | 
			
		||||
  See the file src/inodedb/README for details:
 | 
			
		||||
 | 
			
		||||
  The `mkinodedb' program which is build in this directory takes two
 | 
			
		||||
  command line arguments: the full pathname of the database to be
 | 
			
		||||
  created and the name of a configuration file consisting of directory
 | 
			
		||||
  and file names each on a line by itself - see `/etc/ld.so.conf' for
 | 
			
		||||
  an example.
 | 
			
		||||
 | 
			
		||||
  Putting a directory name in this file means all regular files found
 | 
			
		||||
  in this directory are included in the database, but it will not
 | 
			
		||||
  recursively descend into subdirectories (for instance, we want
 | 
			
		||||
  everything in `/usr/lib' but not every single file in `/usr/lib/sgml').
 | 
			
		||||
  You can also use filenames to include a single file.
 | 
			
		||||
 | 
			
		||||
Have fun,
 | 
			
		||||
 | 
			
		||||
Martin <martin@home-of-linux.org>
 | 
			
		||||
							
								
								
									
										46
									
								
								TODO
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								TODO
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,46 @@
 | 
			
		||||
This is LibGTop 0.99.2,
 | 
			
		||||
 | 
			
		||||
a feature-freezed version of LibGTop for GNOME 1.0.
 | 
			
		||||
 | 
			
		||||
You need to use the latest version of LibGTop from CVS for Gnome, it will
 | 
			
		||||
no longer work with older releases.
 | 
			
		||||
 | 
			
		||||
Martin
 | 
			
		||||
 | 
			
		||||
--------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
NOTE:  LibGTop is already feature-freezed for GNOME 1.0, so only bug fixes
 | 
			
		||||
       are ok, no API changes !
 | 
			
		||||
 | 
			
		||||
Sysdeps directory 'linux':
 | 
			
		||||
==========================
 | 
			
		||||
 | 
			
		||||
* Add implementation for `ppp' with modems.
 | 
			
		||||
 | 
			
		||||
Sysdeps directory 'freebsd':
 | 
			
		||||
============================
 | 
			
		||||
 | 
			
		||||
* FreeBSD 3.0: It works fine on this system, so please make sure not
 | 
			
		||||
               to break it here.
 | 
			
		||||
 | 
			
		||||
* FreeBSD 2.2: Make sure it still works here.
 | 
			
		||||
 | 
			
		||||
* NetBSD/OpenBSD: Support was added on Dec 6, but we need to check
 | 
			
		||||
                  whether all data are valid.
 | 
			
		||||
 | 
			
		||||
Sysdeps directories 'kernel', 'osf1' and 'sun4':
 | 
			
		||||
================================================
 | 
			
		||||
 | 
			
		||||
* You need to use the `--enable-hacker-mode' parameter to configure
 | 
			
		||||
  to build this directories.
 | 
			
		||||
 | 
			
		||||
--------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
Everything except sysdeps directories:
 | 
			
		||||
======================================
 | 
			
		||||
 | 
			
		||||
* Ready for Gnome 1.0. [ALREADY FEATURE FREEZED]
 | 
			
		||||
 | 
			
		||||
January 5, 1999
 | 
			
		||||
 | 
			
		||||
Martin
 | 
			
		||||
							
								
								
									
										161
									
								
								acconfig.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										161
									
								
								acconfig.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,161 @@
 | 
			
		||||
 | 
			
		||||
/* Define if gethostname () must be declared. */
 | 
			
		||||
#undef NEED_DECLARATION_GETHOSTNAME
 | 
			
		||||
 | 
			
		||||
/* Define if setreuid () must be declared. */
 | 
			
		||||
#undef NEED_DECLARATION_SETREUID
 | 
			
		||||
 | 
			
		||||
/* Define if setregid () must be declared. */
 | 
			
		||||
#undef NEED_DECLARATION_SETREGID
 | 
			
		||||
 | 
			
		||||
/* Define if getpagesize () must be declared. */
 | 
			
		||||
#undef NEED_DECLARATION_GETPAGESIZE
 | 
			
		||||
 | 
			
		||||
/* Define if program_invocation_name must be declared. */
 | 
			
		||||
#undef NEED_DECLARATION_PROGRAM_INVOCATION_NAME
 | 
			
		||||
 | 
			
		||||
@TOP@
 | 
			
		||||
 | 
			
		||||
#undef ENABLE_NLS
 | 
			
		||||
#undef HAVE_CATGETS
 | 
			
		||||
#undef HAVE_GETTEXT
 | 
			
		||||
#undef HAVE_LC_MESSAGES
 | 
			
		||||
#undef HAVE_STPCPY
 | 
			
		||||
#undef HAVE_STRUCT_OSOCKADDR
 | 
			
		||||
#undef PACKAGE
 | 
			
		||||
#undef VERSION
 | 
			
		||||
#undef HAVE_LIBSM
 | 
			
		||||
#undef HAVE_LIBINTL_H
 | 
			
		||||
#undef HAVE_GTK_SIGNAL_HANDLER_PENDING
 | 
			
		||||
 | 
			
		||||
/* Do not remove this comments and the empty lines; they are needed */
 | 
			
		||||
#undef HAVE_PROGRAM_INVOCATION_SHORT_NAME
 | 
			
		||||
/* Define if you have the Andrew File System.  */
 | 
			
		||||
#undef AFS
 | 
			
		||||
 | 
			
		||||
/* Define one of the following to indicate how a program can
 | 
			
		||||
   get a list of mounted filesystems.  */
 | 
			
		||||
 | 
			
		||||
/* Define if there is no specific function for reading the list of
 | 
			
		||||
   mounted filesystems.  fread will be used to read /etc/mnttab.  [SVR2]  */
 | 
			
		||||
#undef MOUNTED_FREAD
 | 
			
		||||
 | 
			
		||||
/* Define if (like SVR2) there is no specific function for reading the
 | 
			
		||||
   list of mounted filesystems, and your system has these header files:
 | 
			
		||||
   <sys/fstyp.h> and <sys/statfs.h>.  [SVR3]  */
 | 
			
		||||
#undef MOUNTED_FREAD_FSTYP
 | 
			
		||||
 | 
			
		||||
/* Define if there is a function named getfsstat for reading the list
 | 
			
		||||
   of mounted filesystems.  [DEC Alpha running OSF/1]  */
 | 
			
		||||
#undef MOUNTED_GETFSSTAT
 | 
			
		||||
 | 
			
		||||
/* Define if there is a function named getmnt for reading the list of
 | 
			
		||||
   mounted filesystems.  [Ultrix]  */
 | 
			
		||||
#undef MOUNTED_GETMNT
 | 
			
		||||
 | 
			
		||||
/* Define if there is a function named getmntent for reading the list
 | 
			
		||||
   of mounted filesystems, and that function takes a single argument.
 | 
			
		||||
   [4.3BSD, SunOS, HP-UX, Dynix, Irix]  */
 | 
			
		||||
#undef MOUNTED_GETMNTENT1
 | 
			
		||||
 | 
			
		||||
/* Define if there is a function named getmntent for reading the list of
 | 
			
		||||
   mounted filesystems, and that function takes two arguments.  [SVR4]  */
 | 
			
		||||
#undef MOUNTED_GETMNTENT2
 | 
			
		||||
 | 
			
		||||
/* Define if there is a function named getmntinfo for reading the list
 | 
			
		||||
   of mounted filesystems.  [4.4BSD]  */
 | 
			
		||||
#undef MOUNTED_GETMNTINFO
 | 
			
		||||
 | 
			
		||||
/* Define if there is a function named listmntent that can be used to
 | 
			
		||||
   list all mounted filesystems. [UNICOS] */
 | 
			
		||||
#undef MOUNTED_LISTMNTENT
 | 
			
		||||
 | 
			
		||||
/* Define if there is a function named mntctl that can be used to read
 | 
			
		||||
   the list of mounted filesystems, and there is a system header file
 | 
			
		||||
   that declares `struct vmount.'  [AIX]  */
 | 
			
		||||
#undef MOUNTED_VMOUNT
 | 
			
		||||
 | 
			
		||||
/* Define one of the following to indicate how a program can obtain
 | 
			
		||||
   filesystems usage information.  */
 | 
			
		||||
 | 
			
		||||
/*  Define if  statfs takes 3 args.  [DEC Alpha running OSF/1]  */
 | 
			
		||||
#undef STAT_STATFS3_OSF1
 | 
			
		||||
 | 
			
		||||
/* Define if there is no specific function for reading filesystems usage
 | 
			
		||||
   information and you have the <sys/filsys.h> header file.  [SVR2]  */
 | 
			
		||||
#undef STAT_READ_FILSYS
 | 
			
		||||
 | 
			
		||||
/* Define if statfs takes 2 args and struct statfs has a field named f_bsize.
 | 
			
		||||
   [4.3BSD, SunOS 4, HP-UX, AIX PS/2]  */
 | 
			
		||||
#undef STAT_STATFS2_BSIZE
 | 
			
		||||
 | 
			
		||||
/* Define if statfs takes 2 args and struct statfs has a field named f_fsize.
 | 
			
		||||
   [4.4BSD, NetBSD]  */
 | 
			
		||||
#undef STAT_STATFS2_FSIZE
 | 
			
		||||
 | 
			
		||||
/* Define if statfs takes 2 args and the second argument has
 | 
			
		||||
   type struct fs_data.  [Ultrix]  */
 | 
			
		||||
#undef STAT_STATFS2_FS_DATA
 | 
			
		||||
 | 
			
		||||
/* Define if statfs takes 4 args.  [SVR3, Dynix, Irix, Dolphin]  */
 | 
			
		||||
#undef STAT_STATFS4
 | 
			
		||||
 | 
			
		||||
/* Define if there is a function named statvfs.  [SVR4]  */
 | 
			
		||||
#undef STAT_STATVFS
 | 
			
		||||
 | 
			
		||||
/* Define if the block counts reported by statfs may be truncated to 2GB
 | 
			
		||||
   and the correct values may be stored in the f_spare array.
 | 
			
		||||
   [SunOS 4.1.2, 4.1.3, and 4.1.3_U1 are reported to have this problem.
 | 
			
		||||
   SunOS 4.1.1 seems not to be affected.]  */
 | 
			
		||||
#undef STATFS_TRUNCATES_BLOCK_COUNTS
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* to fix a bug in autoheader on DEC OSF1. */
 | 
			
		||||
#undef HAVE_PROGRAM_INVOCATION_NAME
 | 
			
		||||
 | 
			
		||||
#undef HAVE_SOCKETS
 | 
			
		||||
#undef HAVE_SOCKADDR_SUN_LEN
 | 
			
		||||
 | 
			
		||||
#undef HAVE_LIBJPEG
 | 
			
		||||
#undef HAVE_LIBGIF
 | 
			
		||||
#undef HAVE_LIBTIFF
 | 
			
		||||
#undef HAVE_LIBZ
 | 
			
		||||
#undef HAVE_LIBPNG
 | 
			
		||||
#undef HAVE_GMP2_INCLUDE_DIR
 | 
			
		||||
#undef HAVE_GUILE
 | 
			
		||||
 | 
			
		||||
#undef ssize_t
 | 
			
		||||
#undef u_int64_t
 | 
			
		||||
#undef int64_t
 | 
			
		||||
 | 
			
		||||
#undef HAVE_GLIBTOP_MACHINE_H
 | 
			
		||||
 | 
			
		||||
#undef GLIBTOP_NAMES
 | 
			
		||||
#undef GLIBTOP_GUILE
 | 
			
		||||
#undef GLIBTOP_GUILE_NAMES
 | 
			
		||||
#undef GLIBTOP_EXAMPLES
 | 
			
		||||
#undef GLIBTOP_INODEDB
 | 
			
		||||
 | 
			
		||||
#undef NEED_LIBGTOP
 | 
			
		||||
 | 
			
		||||
#undef HAVE_LINUX_TABLE
 | 
			
		||||
#undef HAVE_LIBGTOP_SMP
 | 
			
		||||
 | 
			
		||||
#undef HAVE_XAUTH
 | 
			
		||||
 | 
			
		||||
/* Define if your have the I4B package. */
 | 
			
		||||
#undef HAVE_I4B
 | 
			
		||||
#undef HAVE_I4B_ACCT
 | 
			
		||||
 | 
			
		||||
/* Define to enable debugging. */
 | 
			
		||||
#undef LIBGTOP_ENABLE_DEBUG
 | 
			
		||||
#undef LIBGTOP_FATAL_WARNINGS
 | 
			
		||||
 | 
			
		||||
/* Same as LINUX_VERSION_CODE either from <linux/version.h> or from
 | 
			
		||||
 * the running kernel (if we don't have configured kernel sources).
 | 
			
		||||
 */
 | 
			
		||||
#undef GLIBTOP_LINUX_VERSION_CODE
 | 
			
		||||
 | 
			
		||||
/* Define if you want to use LibGTop without GNOME. */
 | 
			
		||||
#undef WITHOUT_GNOME
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										17
									
								
								autogen.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										17
									
								
								autogen.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,17 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
# Run this to generate all the initial makefiles, etc.
 | 
			
		||||
 | 
			
		||||
srcdir=`dirname $0`
 | 
			
		||||
test -z "$srcdir" && srcdir=.
 | 
			
		||||
 | 
			
		||||
PKG_NAME="Gnome Top Library"
 | 
			
		||||
 | 
			
		||||
(test -f $srcdir/configure.in \
 | 
			
		||||
  && test -f $srcdir/copyright.txt \
 | 
			
		||||
  && test -d $srcdir/sysdeps) || {
 | 
			
		||||
    echo -n "**Error**: Directory "\`$srcdir\'" does not look like the"
 | 
			
		||||
    echo " top-level gnome directory"
 | 
			
		||||
    exit 1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
. $srcdir/macros/autogen.sh
 | 
			
		||||
							
								
								
									
										420
									
								
								configure.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										420
									
								
								configure.in
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,420 @@
 | 
			
		||||
dnl
 | 
			
		||||
dnl Configure script for the Gnome library
 | 
			
		||||
dnl
 | 
			
		||||
 | 
			
		||||
AC_INIT(copyright.txt)
 | 
			
		||||
AM_CONFIG_HEADER(config.h)
 | 
			
		||||
AC_CANONICAL_SYSTEM
 | 
			
		||||
 | 
			
		||||
dnl This is required at several places
 | 
			
		||||
AC_CHECK_PROG(ac_dc_found, dc, yes, no)
 | 
			
		||||
if test x$ac_dc_found != xyes ; then
 | 
			
		||||
AC_MSG_ERROR([
 | 
			
		||||
*** The "dc" utility was not found on your system.
 | 
			
		||||
***
 | 
			
		||||
*** When using RedHat Linux, you need to install the "bc" package.
 | 
			
		||||
***
 | 
			
		||||
*** It is now part of the "bc" package, so you should look at
 | 
			
		||||
*** ftp://ftp.gnu.org/pub/gnu/bc/ if you want to compile it yourself.
 | 
			
		||||
***
 | 
			
		||||
*** Other systems and distributions may also have it in their "bc" package,
 | 
			
		||||
*** so if there's no "dc" one, please look for "bc".
 | 
			
		||||
***])
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
. $srcdir/LIBGTOP-VERSION
 | 
			
		||||
AM_INIT_AUTOMAKE($PACKAGE, $VERSION)
 | 
			
		||||
 | 
			
		||||
AC_SUBST(LIBGTOP_MAJOR_VERSION)
 | 
			
		||||
AC_SUBST(LIBGTOP_MINOR_VERSION)
 | 
			
		||||
AC_SUBST(LIBGTOP_MICRO_VERSION)
 | 
			
		||||
AC_SUBST(LIBGTOP_INTERFACE_AGE)
 | 
			
		||||
AC_SUBST(LIBGTOP_BINARY_AGE)
 | 
			
		||||
AC_SUBST(LIBGTOP_SERVER_VERSION)
 | 
			
		||||
AC_SUBST(LIBGTOP_VERSION)
 | 
			
		||||
AC_SUBST(LIBGTOP_VERSION_CODE)
 | 
			
		||||
 | 
			
		||||
# libtool versioning
 | 
			
		||||
LT_RELEASE=$LIBGTOP_MAJOR_VERSION.$LIBGTOP_MINOR_VERSION
 | 
			
		||||
LT_CURRENT=`expr $LIBGTOP_MICRO_VERSION - $LIBGTOP_INTERFACE_AGE`
 | 
			
		||||
LT_REVISION=$LIBGTOP_INTERFACE_AGE
 | 
			
		||||
LT_AGE=`expr $LIBGTOP_BINARY_AGE - $LIBGTOP_INTERFACE_AGE`
 | 
			
		||||
LT_VERSION_INFO='-version-info ${LT_CURRENT}:${LT_REVISION}:${LT_AGE}'
 | 
			
		||||
AC_SUBST(LT_VERSION_INFO)
 | 
			
		||||
AC_SUBST(LT_RELEASE)
 | 
			
		||||
AC_SUBST(LT_CURRENT)
 | 
			
		||||
AC_SUBST(LT_REVISION)
 | 
			
		||||
AC_SUBST(LT_AGE)
 | 
			
		||||
 | 
			
		||||
AM_ACLOCAL_INCLUDE(. macros)
 | 
			
		||||
 | 
			
		||||
AC_ISC_POSIX
 | 
			
		||||
AC_PROG_CC
 | 
			
		||||
AC_STDC_HEADERS
 | 
			
		||||
AC_ARG_PROGRAM
 | 
			
		||||
 | 
			
		||||
dnl We don't use `AC_PROG_AWK' since it checks for mawk first which
 | 
			
		||||
dnl does not work for libgtop.
 | 
			
		||||
AC_CHECK_PROGS(AWK, gawk awk, )
 | 
			
		||||
test -z "$AWK" && AC_MSG_ERROR([Sorry, you need a working awk interpreter.])
 | 
			
		||||
 | 
			
		||||
dnl Most people should have a working perl interpreter on their system
 | 
			
		||||
AC_CHECK_PROGS(PERL, perl5 perl)
 | 
			
		||||
test -z "$PERL" && AC_MSG_ERROR([You need to have a working perl interpreter.])
 | 
			
		||||
 | 
			
		||||
AC_CHECK_TOOL(CC,gcc)
 | 
			
		||||
AC_CHECK_TOOL(RANLIB,ranlib)
 | 
			
		||||
AC_CHECK_TOOL(AS,as)
 | 
			
		||||
AC_CHECK_TOOL(AR,ar)
 | 
			
		||||
AC_CHECK_TOOL(NM,nm)
 | 
			
		||||
 | 
			
		||||
NM=`which $NM`
 | 
			
		||||
export CC CXX RANLIB LD AS AR NM
 | 
			
		||||
 | 
			
		||||
AC_PROG_INSTALL
 | 
			
		||||
AC_PROG_LN_S
 | 
			
		||||
AC_PROG_MAKE_SET
 | 
			
		||||
 | 
			
		||||
export cross_compiling
 | 
			
		||||
 | 
			
		||||
AM_PROG_LIBTOOL
 | 
			
		||||
 | 
			
		||||
dnl Let the user enable compiler warnings
 | 
			
		||||
GNOME_COMPILE_WARNINGS
 | 
			
		||||
 | 
			
		||||
GNOME_INIT_HOOK(gnome_found=yes)
 | 
			
		||||
 | 
			
		||||
if test "x$gnome_found" != xyes; then
 | 
			
		||||
  if test "x$want_gnome" != xno ; then
 | 
			
		||||
    AC_MSG_ERROR([
 | 
			
		||||
*** GNOME was not found on this system. ***
 | 
			
		||||
 | 
			
		||||
*** If you want to use LibGTop without GNOME, you need
 | 
			
		||||
*** to give configure the --without-gnome parameter.
 | 
			
		||||
])
 | 
			
		||||
  else
 | 
			
		||||
    AC_DEFINE(WITHOUT_GNOME)
 | 
			
		||||
  fi
 | 
			
		||||
  GNOME_SUPPORT_CHECKS
 | 
			
		||||
else
 | 
			
		||||
  AM_CONDITIONAL(BUILD_GNOME_SUPPORT, false)
 | 
			
		||||
  AM_CONDITIONAL(CROSS_COMPILING, test "x$cross_compiling" = xyes)
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
GNOME_LIBGTOP_SYSDEPS
 | 
			
		||||
GNOME_LIBGTOP_TYPES
 | 
			
		||||
 | 
			
		||||
AC_ARG_WITH(libgtop-guile,
 | 
			
		||||
[  --with-libgtop-guile    Build the libgtop guile interface (default=no)],
 | 
			
		||||
[build_guile="$withval"], [build_guile=yes])
 | 
			
		||||
 | 
			
		||||
if test x$build_guile != xno ; then
 | 
			
		||||
  GNOME_CHECK_GUILE
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
AC_ARG_WITH(libgtop-inodedb,
 | 
			
		||||
[  --with-libgtop-inodedb  Build the inodedb stuff (default=no)],
 | 
			
		||||
[build_inodedb="$withval"], [build_inodedb=no])
 | 
			
		||||
 | 
			
		||||
LIBGTOP_EXTRA_LIBS=
 | 
			
		||||
 | 
			
		||||
if test x$build_inodedb = xyes ; then
 | 
			
		||||
  AC_CHECK_LIB(gdbm, gdbm_open, LIBGTOP_EXTRA_LIBS='-lgdbm', build_inodedb=no)
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
AM_CONDITIONAL(INODEDB, test x$build_inodedb = xyes)
 | 
			
		||||
 | 
			
		||||
if test x$build_inodedb = xyes ; then
 | 
			
		||||
  AC_DEFINE(GLIBTOP_INODEDB)
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
AC_DEFINE(GLIBTOP_NAMES)
 | 
			
		||||
 | 
			
		||||
if test x$ac_cv_guile_found = xyes ; then
 | 
			
		||||
  AC_DEFINE(GLIBTOP_GUILE)
 | 
			
		||||
  AC_DEFINE(GLIBTOP_GUILE_NAMES)
 | 
			
		||||
  libgtop_guile_found=yes
 | 
			
		||||
  guile_examples='third'
 | 
			
		||||
  guile_static_examples='third_static'
 | 
			
		||||
  guile_subdirs='guile'
 | 
			
		||||
else
 | 
			
		||||
  libgtop_guile_found=no
 | 
			
		||||
  guile_examples=
 | 
			
		||||
  guile_static_examples=
 | 
			
		||||
  guile_subdirs=
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if test x$libgtop_smp = xyes ; then
 | 
			
		||||
  smp_examples='smp'
 | 
			
		||||
  smp_static_examples='smp_static'
 | 
			
		||||
else
 | 
			
		||||
  smp_examples=
 | 
			
		||||
  smp_static_examples=
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if test "x$enable_static" != xno; then
 | 
			
		||||
  static_targets="first_static second_static mountlist_static procmap_static netload_static sysdeps_static timings_static $guile_static_examples $smp_static_examples"
 | 
			
		||||
else
 | 
			
		||||
  static_targets=""
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
AM_CONDITIONAL(ENABLE_STATIC, test x$enable_static = xyes)
 | 
			
		||||
AM_CONDITIONAL(ENABLE_SHARED, test x$enable_static = xyes)
 | 
			
		||||
 | 
			
		||||
AC_SUBST(static_targets)
 | 
			
		||||
AC_SUBST(smp_examples)
 | 
			
		||||
AC_SUBST(guile_examples)
 | 
			
		||||
AC_SUBST(guile_subdirs)
 | 
			
		||||
 | 
			
		||||
AM_PROG_LIBTOOL
 | 
			
		||||
 | 
			
		||||
AM_PATH_GLIB(1.2.0,,AC_MSG_ERROR(GLIB >= 1.2.0 is required for LibGTop))
 | 
			
		||||
 | 
			
		||||
dnl You need to uncomment the following line if you want to use
 | 
			
		||||
dnl libGTop without Gnome.
 | 
			
		||||
dnl GNOME_SUPPORT_CHECKS
 | 
			
		||||
 | 
			
		||||
dnl Checks for typedefs, structures, and compiler characteristics.
 | 
			
		||||
AC_C_CONST
 | 
			
		||||
AC_C_INLINE
 | 
			
		||||
AC_TYPE_OFF_T
 | 
			
		||||
AC_TYPE_PID_T
 | 
			
		||||
AC_TYPE_SIZE_T
 | 
			
		||||
AC_STRUCT_ST_RDEV
 | 
			
		||||
AC_HEADER_TIME
 | 
			
		||||
AC_STRUCT_TM
 | 
			
		||||
AC_TYPE_UID_T
 | 
			
		||||
 | 
			
		||||
dnl For SunOS
 | 
			
		||||
AC_CHECK_TYPE(ssize_t, int)
 | 
			
		||||
AC_CHECK_HEADERS(memory.h)
 | 
			
		||||
AC_CHECK_HEADERS(string.h strings.h, break)
 | 
			
		||||
AC_REPLACE_FUNCS(strerror)
 | 
			
		||||
AC_CHECK_LIB(kvm, kvm_open)
 | 
			
		||||
 | 
			
		||||
dnl For DEC OSF1
 | 
			
		||||
AC_CHECK_LIB(mach, vm_statistics)
 | 
			
		||||
 | 
			
		||||
dnl For some broken libc5 systems (Debian 1.3)                                                           
 | 
			
		||||
saved_CFLAGS=$CFLAGS                                                                                     
 | 
			
		||||
CFLAGS="$CFLAGS -D_GNU_SOURCE"                                                                           
 | 
			
		||||
GCC_NEED_DECLARATION(program_invocation_name, [                           
 | 
			
		||||
#include <errno.h>                                                                                       
 | 
			
		||||
#include <stdio.h>                                                                                       
 | 
			
		||||
#include <stdlib.h>                                                                                      
 | 
			
		||||
#include <string.h>                                                                                      
 | 
			
		||||
])                                                                                                       
 | 
			
		||||
CFLAGS=$saved_CFLAGS                                                                                     
 | 
			
		||||
                                                                                                         
 | 
			
		||||
dnl Check for Internet sockets.
 | 
			
		||||
AC_CHECK_FUNC(socket,
 | 
			
		||||
 [AC_CHECK_HEADER(netinet/in.h,
 | 
			
		||||
   [AC_CHECK_HEADER(arpa/inet.h, [
 | 
			
		||||
  AC_DEFINE(HAVE_SOCKETS)
 | 
			
		||||
      AC_MSG_CHECKING("for sun_len member in struct sockaddr_un")
 | 
			
		||||
      AC_TRY_LINK([
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#include <sys/socket.h>
 | 
			
		||||
#include <sys/un.h>
 | 
			
		||||
      ],
 | 
			
		||||
      [static struct sockaddr_un x; x.sun_len = 1;],
 | 
			
		||||
      [AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SOCKADDR_SUN_LEN)],
 | 
			
		||||
      [AC_MSG_RESULT(no)])])])])
 | 
			
		||||
 | 
			
		||||
dnl Checks for library functions.
 | 
			
		||||
AC_FUNC_ALLOCA
 | 
			
		||||
AC_FUNC_MMAP
 | 
			
		||||
AC_TYPE_SIGNAL
 | 
			
		||||
AC_FUNC_STRFTIME
 | 
			
		||||
AC_CHECK_FUNCS(getcwd gettimeofday getwd putenv strdup strtoul uname)
 | 
			
		||||
 | 
			
		||||
dnl ## all 'es_??' are only needed for format numbers different of 'es'
 | 
			
		||||
ALL_LINGUAS="de es es_DO es_GT es_HN es_MX es_PA es_PE es_SV fr ko no ja sv"
 | 
			
		||||
AM_GNOME_GETTEXT
 | 
			
		||||
 | 
			
		||||
AC_PATH_XTRA
 | 
			
		||||
 | 
			
		||||
dnl For Solaris
 | 
			
		||||
dnl Please don't move this before AC_PATH_XTRA
 | 
			
		||||
AC_CHECK_FUNC(gethostbyname,,[AC_CHECK_LIB(nsl,gethostbyname)])
 | 
			
		||||
AC_CHECK_FUNC(connect,,[AC_CHECK_LIB(socket,connect)])
 | 
			
		||||
AC_CHECK_FUNC(inet_aton,,[AC_CHECK_LIB(resolv,inet_aton)])
 | 
			
		||||
 | 
			
		||||
dnl The construct foo=`echo $w1 $w2 $w3` fails on some systems if $w1 = -e or -n
 | 
			
		||||
dnl So we use the following instead.
 | 
			
		||||
dnl XE_SPACE(var, words)
 | 
			
		||||
define([XE_SPACE],[
 | 
			
		||||
T=""
 | 
			
		||||
for W in $2; do if test -z "$T"; then T="$W"; else T="$T $W"; fi; done
 | 
			
		||||
$1="$T"
 | 
			
		||||
])dnl
 | 
			
		||||
 | 
			
		||||
dnl Autodetect Xauth
 | 
			
		||||
dnl -lXau is only used by gnuclient, so use a special variable for Xauth X libs
 | 
			
		||||
saved_CPPFLAGS="$CPPFLAGS"
 | 
			
		||||
CPPFLAGS="$CPPFLAGS $X_CFLAGS"
 | 
			
		||||
test -z "$with_xauth" && { AC_CHECK_HEADER(X11/Xauth.h,          ,with_xauth=no) }
 | 
			
		||||
test -z "$with_xauth" && { AC_CHECK_LIB(Xau, XauGetAuthByAddr,[:],with_xauth=no, $X_LIBS) }
 | 
			
		||||
test -z "$with_xauth" && with_xauth=yes
 | 
			
		||||
if test "$with_xauth" = "yes"; then
 | 
			
		||||
  AC_DEFINE(HAVE_XAUTH)
 | 
			
		||||
  XE_SPACE(libs_xauth, $X_LIBS -lXau)
 | 
			
		||||
fi
 | 
			
		||||
CPPFLAGS="$saved_CPPFLAGS"
 | 
			
		||||
AC_SUBST(libs_xauth)
 | 
			
		||||
 | 
			
		||||
dnl For diskusage stuff
 | 
			
		||||
GNOME_FILEUTILS_CHECKS
 | 
			
		||||
 | 
			
		||||
dnl Debugging
 | 
			
		||||
AC_ARG_ENABLE(debug, [  --enable-debug          turn on debugging [default=no]],AC_DEFINE(LIBGTOP_ENABLE_DEBUG),)
 | 
			
		||||
AC_ARG_ENABLE(fatal-warnings, [  --enable-fatal-warnings make all warnings fatal [debug=no]],AC_DEFINE(LIBGTOP_FATAL_WARNINGS),)
 | 
			
		||||
 | 
			
		||||
if test "x$gnome_found" = xyes ; then
 | 
			
		||||
  LIBSUPPORT="$GNOME_LIBDIR -lgnomesupport"
 | 
			
		||||
  SUPPORTINCS="$GNOME_INCLUDEDIR"
 | 
			
		||||
else
 | 
			
		||||
  LIBSUPPORT='$(top_builddir)/support/libgnomesupport.la'
 | 
			
		||||
  SUPPORTINCS='-DNEED_GNOMESUPPORT_H -I$(top_builddir)/support -I$(top_srcdir)/support'
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
dnl Some ugly hack; if '-lgnomesupport' is part of $GNOME_LIBS,
 | 
			
		||||
dnl we include it here.
 | 
			
		||||
case "$GNOME_LIBS" in
 | 
			
		||||
	'*-lgnomesupport*' ) 
 | 
			
		||||
	  LIBSUPPORT="$GNOME_LIBDIR -lgnomesupport"
 | 
			
		||||
          SUPPORTINCS="$GNOME_INCLUDEDIR" ;;
 | 
			
		||||
esac
 | 
			
		||||
AC_SUBST(LIBSUPPORT)
 | 
			
		||||
AC_SUBST(SUPPORTINCS)
 | 
			
		||||
 | 
			
		||||
dnl These definitions are expanded in make.
 | 
			
		||||
LIBGTOP_LIBS='-L$(libdir)'
 | 
			
		||||
LIBGTOP_INCS='-I$(includedir)'
 | 
			
		||||
 | 
			
		||||
if test x$libgtop_use_machine_h = xyes ; then
 | 
			
		||||
  LIBGTOP_INCS="$LIBGTOP_INCS -DHAVE_GLIBTOP_MACHINE_H"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if test x$build_inodedb = xyes ; then
 | 
			
		||||
  LIBGTOP_INCS="$LIBGTOP_INCS -DGLIBTOP_INODEDB"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if test x$libgtop_smp = xyes ; then
 | 
			
		||||
  LIBGTOP_INCS="$LIBGTOP_INCS -DHAVE_LIBGTOP_SMP"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if test x$libgtop_have_sysinfo = xyes ; then
 | 
			
		||||
  LIBGTOP_INCS="$LIBGTOP_INCS -DHAVE_LIBGTOP_SYSINFO"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
LIBGTOP_INCS="$LIBGTOP_INCS $SUPPORTINCS $GLIB_CFLAGS"
 | 
			
		||||
 | 
			
		||||
LIBGTOP_GUILE_LIBS="$LIBGTOP_LIBS"
 | 
			
		||||
LIBGTOP_GUILE_INCS="$LIBGTOP_INCS"
 | 
			
		||||
LIBGTOP_BINDIR='$(bindir)'
 | 
			
		||||
LIBGTOP_SERVER='$(bindir)/libgtop_server'
 | 
			
		||||
 | 
			
		||||
sysdeps_dir="$libgtop_sysdeps_dir"
 | 
			
		||||
AC_SUBST(sysdeps_dir)
 | 
			
		||||
 | 
			
		||||
if test x$ac_cv_guile_found = xyes ; then
 | 
			
		||||
  LIBGTOP_GUILE_LIBS="$LIBGTOP_GUILE_LIBS -lgtop_guile"
 | 
			
		||||
  libgtop_guile_found=yes
 | 
			
		||||
else
 | 
			
		||||
  libgtop_guile_found=no
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
AC_SUBST(libgtop_guile_found)
 | 
			
		||||
 | 
			
		||||
if test -z "$LIBGTOP_EXTRA_LIBS" ; then
 | 
			
		||||
  LIBGTOP_EXTRA_LIBS="$libs_xauth"
 | 
			
		||||
else
 | 
			
		||||
  LIBGTOP_EXTRA_LIBS="$LIBGTOP_EXTRA_LIBS $libs_xauth"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
LIBGTOP_EXTRA_LIBS="$LIBGTOP_EXTRA_LIBS $GLIB_LIBS"
 | 
			
		||||
 | 
			
		||||
LIBGTOP_LIBS="$LIBGTOP_LIBS -lgtop -lgtop_sysdeps -lgtop_common"
 | 
			
		||||
LIBGTOP_GUILE_LIBS="$LIBGTOP_GUILE_LIBS -lgtop -lgtop_sysdeps -lgtop_common"
 | 
			
		||||
 | 
			
		||||
LIBGTOP_NAMES_LIBS="$LIBGTOP_LIBS -lgtop_names"
 | 
			
		||||
LIBGTOP_GUILE_NAMES_LIBS="$LIBGTOP_GUILE_LIBS -lgtop_guile_names -lgtop_names"
 | 
			
		||||
 | 
			
		||||
LIBGTOP_LIBS="$LIBGTOP_LIBS" 
 | 
			
		||||
LIBGTOP_NAMES_LIBS="$LIBGTOP_NAMES_LIBS"
 | 
			
		||||
LIBGTOP_GUILE_LIBS="$LIBGTOP_GUILE_LIBS"
 | 
			
		||||
LIBGTOP_GUILE_NAMES_LIBS="$LIBGTOP_GUILE_NAMES_LIBS"
 | 
			
		||||
 | 
			
		||||
LIBGTOP_GUILE_LIBS="$LIBGTOP_GUILE_LIBS $GUILE_LIBS"
 | 
			
		||||
LIBGTOP_GUILE_INCS="$LIBGTOP_GUILE_INCS $GUILE_INCS -DGLIBTOP_GUILE"
 | 
			
		||||
 | 
			
		||||
LIBGTOP_NAMES_INCS="$LIBGTOP_INCS -DGLIBTOP_NAMES"
 | 
			
		||||
LIBGTOP_GUILE_NAMES_INCS="$LIBGTOP_GUILE_INCS -DGLIBTOP_GUILE_NAMES"
 | 
			
		||||
LIBGTOP_GUILE_NAMES_INCS="$LIBGTOP_GUILE_INCS -DGLIBTOP_NAMES"
 | 
			
		||||
 | 
			
		||||
machine_incs="-I\$(top_srcdir)/sysdeps/$sysdeps_dir"
 | 
			
		||||
 | 
			
		||||
AC_SUBST(machine_incs)
 | 
			
		||||
 | 
			
		||||
if test x$libgtop_guile_found = xyes ; then
 | 
			
		||||
  guile_def="-DGLIBTOP_GUILE -DGLIBTOP_GUILE_NAMES $GUILE_INCS "
 | 
			
		||||
else
 | 
			
		||||
  guile_def=""
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
INCLUDES="-D_IN_LIBGTOP -D_GNU_SOURCE -DGLIBTOP_NAMES -I\$(top_builddir) -I\$(top_srcdir) -I\$(top_srcdir)/sysdeps/$sysdeps_dir -I\$(top_srcdir)/include -I\$(top_srcdir)/intl $SUPPORTINCS $GLIB_CFLAGS $CFLAGS $X_CFLAGS $guile_def "'-DGTOPLOCALEDIR=\"$(datadir)/locale\" -DLIBGTOP_VERSION=\"'"$LIBGTOP_VERSION"'\" -DLIBGTOP_SERVER_VERSION=\"'"$LIBGTOP_SERVER_VERSION"'\" -DLIBGTOP_VERSION_CODE='$LIBGTOP_VERSION_CODE' -DLIBGTOP_SERVER=\"'"$LIBGTOP_SERVER"'\"'
 | 
			
		||||
 | 
			
		||||
AC_SUBST(INCLUDES)
 | 
			
		||||
 | 
			
		||||
AC_SUBST(LIBGTOP_EXTRA_LIBS)
 | 
			
		||||
 | 
			
		||||
AC_SUBST(LIBGTOP_LIBS)
 | 
			
		||||
AC_SUBST(LIBGTOP_INCS)
 | 
			
		||||
AC_SUBST(LIBGTOP_NAMES_LIBS)
 | 
			
		||||
AC_SUBST(LIBGTOP_NAMES_INCS)
 | 
			
		||||
AC_SUBST(LIBGTOP_GUILE_LIBS)
 | 
			
		||||
AC_SUBST(LIBGTOP_GUILE_INCS)
 | 
			
		||||
AC_SUBST(LIBGTOP_GUILE_NAMES_LIBS)
 | 
			
		||||
AC_SUBST(LIBGTOP_GUILE_NAMES_INCS)
 | 
			
		||||
AC_SUBST(LIBGTOP_BINDIR)
 | 
			
		||||
AC_SUBST(LIBGTOP_SERVER)
 | 
			
		||||
 | 
			
		||||
if test x$libgtop_need_server = xyes ; then
 | 
			
		||||
   sysdeps_suid_lib="\$(top_builddir)/sysdeps/\$(sysdeps_dir)/libgtop_sysdeps_suid.la"
 | 
			
		||||
   server_programs='libgtop_server'
 | 
			
		||||
else
 | 
			
		||||
   sysdeps_suid_lib=
 | 
			
		||||
   server_programs=
 | 
			
		||||
fi
 | 
			
		||||
AC_SUBST(sysdeps_suid_lib)
 | 
			
		||||
AC_SUBST(server_programs)
 | 
			
		||||
 | 
			
		||||
AC_OUTPUT([
 | 
			
		||||
Makefile
 | 
			
		||||
libgtop.spec
 | 
			
		||||
po/Makefile.in
 | 
			
		||||
intl/Makefile
 | 
			
		||||
misc/Makefile
 | 
			
		||||
include/Makefile
 | 
			
		||||
include/glibtop/Makefile
 | 
			
		||||
sysdeps/Makefile
 | 
			
		||||
sysdeps/common/Makefile
 | 
			
		||||
sysdeps/names/Makefile
 | 
			
		||||
sysdeps/guile/Makefile
 | 
			
		||||
sysdeps/guile/names/Makefile
 | 
			
		||||
sysdeps/stub/Makefile
 | 
			
		||||
sysdeps/stub_suid/Makefile
 | 
			
		||||
sysdeps/sun4/Makefile
 | 
			
		||||
sysdeps/osf1/Makefile
 | 
			
		||||
sysdeps/linux/Makefile
 | 
			
		||||
sysdeps/kernel/Makefile
 | 
			
		||||
sysdeps/freebsd/Makefile
 | 
			
		||||
src/Makefile
 | 
			
		||||
src/daemon/Makefile
 | 
			
		||||
src/inodedb/Makefile
 | 
			
		||||
lib/Makefile
 | 
			
		||||
examples/Makefile
 | 
			
		||||
doc/Makefile
 | 
			
		||||
support/Makefile
 | 
			
		||||
macros/Makefile])
 | 
			
		||||
							
								
								
									
										23
									
								
								copyright.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								copyright.txt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,23 @@
 | 
			
		||||
/* $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.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										16
									
								
								examples/.cvsignore
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								examples/.cvsignore
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,16 @@
 | 
			
		||||
.deps
 | 
			
		||||
.libs
 | 
			
		||||
Makefile
 | 
			
		||||
Makefile.in
 | 
			
		||||
first
 | 
			
		||||
first_linux
 | 
			
		||||
first_static
 | 
			
		||||
second
 | 
			
		||||
third
 | 
			
		||||
third_linux
 | 
			
		||||
third_static
 | 
			
		||||
second_static
 | 
			
		||||
second_linux
 | 
			
		||||
smp_static sysdeps_static netload_static procmap_static mountlist_static
 | 
			
		||||
smp sysdeps netload procmap mountlist
 | 
			
		||||
timings timings_static
 | 
			
		||||
							
								
								
									
										86
									
								
								examples/ChangeLog
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										86
									
								
								examples/ChangeLog
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,86 @@
 | 
			
		||||
1999-05-28  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* first.c, second.c, sysdeps.c: Use LibGTop version conditionals
 | 
			
		||||
 	so we can more easily merge the code into LIBGTOP_STABLE_1_0.
 | 
			
		||||
 | 
			
		||||
1999-05-07  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* timings.c (timersub): Renamed this to `libgtop_timersub' and define
 | 
			
		||||
	it on all systems.
 | 
			
		||||
 | 
			
		||||
Fri Apr  9 00:14:52 1999 Timur Bakeyev  <timur@gnu.org>
 | 
			
		||||
 | 
			
		||||
	* timings.c: Added timersub defenition, to make code compilable on 
 | 
			
		||||
	BSDI.
 | 
			
		||||
 | 
			
		||||
1999-03-24  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* timings.c: New example.
 | 
			
		||||
 | 
			
		||||
1999-03-17  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* first.c, second.c: Fixed a bug that caused a core dump when
 | 
			
		||||
	the sysdeps code does not return all data.
 | 
			
		||||
 | 
			
		||||
1998-11-22  Martin Baulig  <baulig@taurus.uni-trier.de>
 | 
			
		||||
 | 
			
		||||
	* netload.c: Call inet_ntoa () to get address and subnet
 | 
			
		||||
	in quatted dot notation (like 136.199.14.201) and not just
 | 
			
		||||
	as a number (like 0xc90ec788).
 | 
			
		||||
 | 
			
		||||
1998-11-02  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* sysdeps.c: New example.
 | 
			
		||||
 | 
			
		||||
1998-10-26  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* netload.c: New file. Gets network load for the interface
 | 
			
		||||
	given as command line argument.
 | 
			
		||||
 | 
			
		||||
1998-10-26  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* first.c (glibtop_get_proc_args): Get command line arguments.
 | 
			
		||||
	* second.c: Likewise.
 | 
			
		||||
 | 
			
		||||
1998-10-25  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* first.c (glibtop_get_ppp): Get PPP/ISDN statistics.
 | 
			
		||||
 | 
			
		||||
1998-09-28  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* Makefile.am: Install everything in $(libexecdir)/libgtop.
 | 
			
		||||
 | 
			
		||||
1998-09-09  Martin Baulig <baulig@Stud.Informatik.uni-trier.de>
 | 
			
		||||
 | 
			
		||||
	* smp.c: New file. Nice tool to show CPU statistics on SMP systems.
 | 
			
		||||
 | 
			
		||||
1998-08-25  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* first.c, second.c, procmap.c: Fixed some compiler warnings.
 | 
			
		||||
 | 
			
		||||
1998-08-18  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* procmap.c: We now display filenames when compiled
 | 
			
		||||
	`--with-libgtop-inodedb'.
 | 
			
		||||
 | 
			
		||||
1998-08-12  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* second.c: Works a little bit more like `ps' - you can
 | 
			
		||||
	give an optional command line argument to get information
 | 
			
		||||
	about a single process.
 | 
			
		||||
 | 
			
		||||
1998-07-22  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* mountlist.c: New file.
 | 
			
		||||
 | 
			
		||||
1998-06-12  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* test.scm: New file.
 | 
			
		||||
	
 | 
			
		||||
1998-06-07  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* Makefile.am (CFLAGS): Disable optimize.
 | 
			
		||||
	
 | 
			
		||||
	* first.c (PROFILE_COUNT): Number of times each function
 | 
			
		||||
	should be called. Defaults to 1; to profile the code, you
 | 
			
		||||
	can increase this when compiling.
 | 
			
		||||
							
								
								
									
										121
									
								
								examples/Makefile.am
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										121
									
								
								examples/Makefile.am
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,121 @@
 | 
			
		||||
## Process this file with automake to produce Makefile.in
 | 
			
		||||
 | 
			
		||||
LINK			= $(LIBTOOL) --mode=link $(CC) $(CFLAGS) $(LDFLAGS) -o $@
 | 
			
		||||
 | 
			
		||||
INCLUDES		= @INCLUDES@
 | 
			
		||||
 | 
			
		||||
DEFS			= @DEFS@
 | 
			
		||||
 | 
			
		||||
# We install it in `libexec' since this will make it more easy
 | 
			
		||||
# to put the examples into an extra RPM package.
 | 
			
		||||
 | 
			
		||||
libgtopdir		= $(libexecdir)/libgtop
 | 
			
		||||
 | 
			
		||||
libgtop_PROGRAMS	= first second\
 | 
			
		||||
			  mountlist procmap netload sysdeps timings \
 | 
			
		||||
			  @static_targets@ @guile_examples@ @smp_examples@
 | 
			
		||||
 | 
			
		||||
EXTRA_PROGRAMS		= first_static second_static \
 | 
			
		||||
			  mountlist_static procmap_static \
 | 
			
		||||
			  third third_static smp smp_static \
 | 
			
		||||
			  netload_static sysdeps_static \
 | 
			
		||||
			  timings_static
 | 
			
		||||
 | 
			
		||||
first_SOURCES		= first.c
 | 
			
		||||
first_LDADD		= $(top_builddir)/lib/libgtop.la \
 | 
			
		||||
			  $(top_builddir)/sysdeps/common/libgtop_common.la \
 | 
			
		||||
			  $(top_builddir)/sysdeps/@sysdeps_dir@/libgtop_sysdeps.la \
 | 
			
		||||
			  @LIBSUPPORT@ @INTLLIBS@
 | 
			
		||||
 | 
			
		||||
first_static_SOURCES	= $(first_SOURCES)
 | 
			
		||||
first_static_LDADD	= $(first_LDADD)
 | 
			
		||||
first_static_LDFLAGS	= -static
 | 
			
		||||
 | 
			
		||||
second_SOURCES		= second.c
 | 
			
		||||
second_LDADD		= $(top_builddir)/lib/libgtop.la \
 | 
			
		||||
			  $(top_builddir)/sysdeps/common/libgtop_common.la \
 | 
			
		||||
			  $(top_builddir)/sysdeps/@sysdeps_dir@/libgtop_sysdeps.la \
 | 
			
		||||
			  @LIBSUPPORT@ @INTLLIBS@
 | 
			
		||||
 | 
			
		||||
second_static_SOURCES	= $(second_SOURCES)
 | 
			
		||||
second_static_LDADD	= $(second_LDADD)
 | 
			
		||||
second_static_LDFLAGS	= -static
 | 
			
		||||
 | 
			
		||||
procmap_SOURCES		= procmap.c
 | 
			
		||||
procmap_LDADD		= $(top_builddir)/lib/libgtop.la \
 | 
			
		||||
			  $(top_builddir)/sysdeps/common/libgtop_common.la \
 | 
			
		||||
			  $(top_builddir)/sysdeps/@sysdeps_dir@/libgtop_sysdeps.la \
 | 
			
		||||
			  @LIBSUPPORT@ @INTLLIBS@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
procmap_static_SOURCES	= $(procmap_SOURCES)
 | 
			
		||||
procmap_static_LDADD	= $(procmap_LDADD)
 | 
			
		||||
procmap_static_LDFLAGS	= -static
 | 
			
		||||
 | 
			
		||||
netload_SOURCES		= netload.c
 | 
			
		||||
netload_LDADD		= $(top_builddir)/lib/libgtop.la \
 | 
			
		||||
			  $(top_builddir)/sysdeps/common/libgtop_common.la \
 | 
			
		||||
			  $(top_builddir)/sysdeps/@sysdeps_dir@/libgtop_sysdeps.la \
 | 
			
		||||
			  @LIBSUPPORT@ @INTLLIBS@
 | 
			
		||||
 | 
			
		||||
netload_static_SOURCES	= $(netload_SOURCES)
 | 
			
		||||
netload_static_LDADD	= $(netload_LDADD)
 | 
			
		||||
netload_static_LDFLAGS	= -static
 | 
			
		||||
 | 
			
		||||
sysdeps_SOURCES		= sysdeps.c
 | 
			
		||||
sysdeps_LDADD		= $(top_builddir)/lib/libgtop.la \
 | 
			
		||||
			  $(top_builddir)/sysdeps/common/libgtop_common.la \
 | 
			
		||||
			  $(top_builddir)/sysdeps/@sysdeps_dir@/libgtop_sysdeps.la \
 | 
			
		||||
			  @LIBSUPPORT@ @INTLLIBS@
 | 
			
		||||
 | 
			
		||||
sysdeps_static_SOURCES	= $(sysdeps_SOURCES)
 | 
			
		||||
sysdeps_static_LDADD	= $(sysdeps_LDADD)
 | 
			
		||||
sysdeps_static_LDFLAGS	= -static
 | 
			
		||||
 | 
			
		||||
third_guile_names_LIBS	= $(top_builddir)/sysdeps/guile/names/libgtop_guile_names.la
 | 
			
		||||
third_names_LIBS	= $(top_builddir)/sysdeps/names/libgtop_names.la
 | 
			
		||||
 | 
			
		||||
third_SOURCES		= third.c
 | 
			
		||||
third_LDADD		= $(top_builddir)/sysdeps/guile/libgtop_guile.la \
 | 
			
		||||
			  $(third_guile_names_LIBS) $(third_names_LIBS) \
 | 
			
		||||
			  $(top_builddir)/lib/libgtop.la \
 | 
			
		||||
			  $(top_builddir)/sysdeps/common/libgtop_common.la \
 | 
			
		||||
			  $(top_builddir)/sysdeps/@sysdeps_dir@/libgtop_sysdeps.la \
 | 
			
		||||
			  @GUILE_LIBS@ @LIBSUPPORT@ @INTLLIBS@
 | 
			
		||||
 | 
			
		||||
third_static_SOURCES	= $(third_SOURCES)
 | 
			
		||||
third_static_LDADD	= $(third_LDADD)
 | 
			
		||||
third_static_LDFLAGS	= -static
 | 
			
		||||
 | 
			
		||||
mountlist_SOURCES	= mountlist.c
 | 
			
		||||
mountlist_LDADD		= $(top_builddir)/lib/libgtop.la \
 | 
			
		||||
			  $(top_builddir)/sysdeps/common/libgtop_common.la \
 | 
			
		||||
			  $(top_builddir)/sysdeps/@sysdeps_dir@/libgtop_sysdeps.la \
 | 
			
		||||
			  @LIBSUPPORT@ @INTLLIBS@
 | 
			
		||||
 | 
			
		||||
mountlist_static_SOURCES= $(mountlist_SOURCES)
 | 
			
		||||
mountlist_static_LDADD	= $(mountlist_LDADD)
 | 
			
		||||
mountlist_static_LDFLAGS= -static
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
smp_SOURCES		= smp.c
 | 
			
		||||
smp_LDADD		= $(top_builddir)/lib/libgtop.la \
 | 
			
		||||
			  $(top_builddir)/sysdeps/common/libgtop_common.la \
 | 
			
		||||
			  $(top_builddir)/sysdeps/@sysdeps_dir@/libgtop_sysdeps.la \
 | 
			
		||||
			  @LIBSUPPORT@ @INTLLIBS@
 | 
			
		||||
 | 
			
		||||
smp_static_SOURCES	= $(smp_SOURCES)
 | 
			
		||||
smp_static_LDADD	= $(smp_LDADD)
 | 
			
		||||
smp_static_LDFLAGS	= -static
 | 
			
		||||
 | 
			
		||||
timings_SOURCES		= timings.c
 | 
			
		||||
timings_LDADD		= $(top_builddir)/lib/libgtop.la \
 | 
			
		||||
			  $(top_builddir)/sysdeps/common/libgtop_common.la \
 | 
			
		||||
			  $(top_builddir)/sysdeps/@sysdeps_dir@/libgtop_sysdeps.la \
 | 
			
		||||
			  @LIBSUPPORT@ @INTLLIBS@
 | 
			
		||||
 | 
			
		||||
timings_static_SOURCES	= $(timings_SOURCES)
 | 
			
		||||
timings_static_LDADD	= $(timings_LDADD)
 | 
			
		||||
timings_static_LDFLAGS	= -static
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										813
									
								
								examples/first.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										813
									
								
								examples/first.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,813 @@
 | 
			
		||||
/* $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 <locale.h>
 | 
			
		||||
 | 
			
		||||
#include <glibtop.h>
 | 
			
		||||
#include <glibtop/open.h>
 | 
			
		||||
#include <glibtop/close.h>
 | 
			
		||||
#include <glibtop/xmalloc.h>
 | 
			
		||||
 | 
			
		||||
#include <glibtop/parameter.h>
 | 
			
		||||
 | 
			
		||||
#include <glibtop/union.h>
 | 
			
		||||
#include <glibtop/sysdeps.h>
 | 
			
		||||
 | 
			
		||||
#include <sys/resource.h>
 | 
			
		||||
 | 
			
		||||
#ifndef PROFILE_COUNT
 | 
			
		||||
#define PROFILE_COUNT	1
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
int
 | 
			
		||||
main (int argc, char *argv [])
 | 
			
		||||
{
 | 
			
		||||
	glibtop_union data;
 | 
			
		||||
	glibtop_sysdeps sysdeps;
 | 
			
		||||
	unsigned c, method, count, port, i, *ptr;
 | 
			
		||||
	char buffer [BUFSIZ];
 | 
			
		||||
	pid_t pid, ppid;
 | 
			
		||||
	char *args;
 | 
			
		||||
 | 
			
		||||
	count = PROFILE_COUNT;
 | 
			
		||||
 | 
			
		||||
	setlocale (LC_ALL, "");
 | 
			
		||||
	bindtextdomain (PACKAGE, GTOPLOCALEDIR);
 | 
			
		||||
	textdomain (PACKAGE);
 | 
			
		||||
	
 | 
			
		||||
	glibtop_init_r (&glibtop_global_server, 0, GLIBTOP_INIT_NO_OPEN);
 | 
			
		||||
 | 
			
		||||
	glibtop_get_parameter (GLIBTOP_PARAM_METHOD, &method, sizeof (method));
 | 
			
		||||
 | 
			
		||||
	printf ("Method = %d\n", method);
 | 
			
		||||
 | 
			
		||||
	count = glibtop_get_parameter (GLIBTOP_PARAM_COMMAND, buffer, BUFSIZ);
 | 
			
		||||
	buffer [count] = 0;
 | 
			
		||||
 | 
			
		||||
	printf ("Command = '%s'\n", buffer);
 | 
			
		||||
 | 
			
		||||
	count = glibtop_get_parameter (GLIBTOP_PARAM_HOST, buffer, BUFSIZ);
 | 
			
		||||
	buffer [count] = 0;
 | 
			
		||||
 | 
			
		||||
	glibtop_get_parameter (GLIBTOP_PARAM_PORT, &port, sizeof (port));
 | 
			
		||||
 | 
			
		||||
	printf ("Host = '%s' - %u\n\n", buffer, port);
 | 
			
		||||
 | 
			
		||||
	glibtop_init_r (&glibtop_global_server, 0, 0);
 | 
			
		||||
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT; c++)
 | 
			
		||||
	  	glibtop_get_cpu (&data.cpu);
 | 
			
		||||
 | 
			
		||||
	printf ("CPU          (0x%08lx): %lu, %lu, %lu, %lu, %lu, %lu\n",
 | 
			
		||||
		(unsigned long) data.cpu.flags,
 | 
			
		||||
		(unsigned long) data.cpu.total,
 | 
			
		||||
		(unsigned long) data.cpu.user,
 | 
			
		||||
		(unsigned long) data.cpu.nice,
 | 
			
		||||
		(unsigned long) data.cpu.sys,
 | 
			
		||||
		(unsigned long) data.cpu.idle,
 | 
			
		||||
		(unsigned long) data.cpu.frequency);
 | 
			
		||||
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT; c++)
 | 
			
		||||
		glibtop_get_mem (&data.mem);
 | 
			
		||||
 | 
			
		||||
	printf ("Memory       (0x%08lx): "
 | 
			
		||||
		"%lu, %lu, %lu, %lu, %lu, %lu, %lu, %lu\n",
 | 
			
		||||
		(unsigned long) data.mem.flags,
 | 
			
		||||
		(unsigned long) data.mem.total,
 | 
			
		||||
		(unsigned long) data.mem.used,
 | 
			
		||||
		(unsigned long) data.mem.free,
 | 
			
		||||
		(unsigned long) data.mem.shared,
 | 
			
		||||
		(unsigned long) data.mem.buffer,
 | 
			
		||||
		(unsigned long) data.mem.cached,
 | 
			
		||||
		(unsigned long) data.mem.user,
 | 
			
		||||
		(unsigned long) data.mem.locked);
 | 
			
		||||
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT; c++)
 | 
			
		||||
		glibtop_get_swap (&data.swap);
 | 
			
		||||
 | 
			
		||||
	printf ("Swap         (0x%08lx): %lu, %lu, %lu, %lu, %lu\n",
 | 
			
		||||
		(unsigned long) data.swap.flags,
 | 
			
		||||
		(unsigned long) data.swap.total,
 | 
			
		||||
		(unsigned long) data.swap.used,
 | 
			
		||||
		(unsigned long) data.swap.free,
 | 
			
		||||
		(unsigned long) data.swap.pagein,
 | 
			
		||||
		(unsigned long) data.swap.pageout);
 | 
			
		||||
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT; c++)
 | 
			
		||||
		glibtop_get_uptime (&data.uptime);
 | 
			
		||||
 | 
			
		||||
#if LIBGTOP_VERSION_CODE > 1001000
 | 
			
		||||
	printf ("Uptime       (0x%08lx): %f, %f, %lu\n",
 | 
			
		||||
		(unsigned long) data.uptime.flags,
 | 
			
		||||
		data.uptime.uptime, data.uptime.idletime,
 | 
			
		||||
		(unsigned long) data.uptime.boot_time);
 | 
			
		||||
#else
 | 
			
		||||
	printf ("Uptime       (0x%08lx): %f, %f\n",
 | 
			
		||||
		(unsigned long) data.uptime.flags,
 | 
			
		||||
		data.uptime.uptime, data.uptime.idletime);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT; c++)
 | 
			
		||||
		glibtop_get_loadavg (&data.loadavg);
 | 
			
		||||
 | 
			
		||||
	printf ("Loadavg      (0x%08lx): %f, %f, %f - %lu, %lu, %lu\n",
 | 
			
		||||
		(unsigned long) data.loadavg.flags,
 | 
			
		||||
		(double) data.loadavg.loadavg [0],
 | 
			
		||||
		(double) data.loadavg.loadavg [1],
 | 
			
		||||
		(double) data.loadavg.loadavg [2],
 | 
			
		||||
		(unsigned long) data.loadavg.nr_running,
 | 
			
		||||
		(unsigned long) data.loadavg.nr_tasks,
 | 
			
		||||
		(unsigned long) data.loadavg.last_pid);
 | 
			
		||||
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT; c++)
 | 
			
		||||
		glibtop_get_shm_limits (&data.shm_limits);
 | 
			
		||||
	
 | 
			
		||||
	printf ("Shm Limits   (0x%08lx): %lu, %lu, %lu, %lu, %lu\n",
 | 
			
		||||
		(unsigned long) data.shm_limits.flags,
 | 
			
		||||
		(unsigned long) data.shm_limits.shmmax,
 | 
			
		||||
		(unsigned long) data.shm_limits.shmmin,
 | 
			
		||||
		(unsigned long) data.shm_limits.shmmni,
 | 
			
		||||
		(unsigned long) data.shm_limits.shmseg,
 | 
			
		||||
		(unsigned long) data.shm_limits.shmall);
 | 
			
		||||
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT; c++)
 | 
			
		||||
		glibtop_get_msg_limits (&data.msg_limits);
 | 
			
		||||
 | 
			
		||||
	printf ("Msg Limits   (0x%08lx): %lu, %lu, %lu, %lu, %lu, %lu, %lu\n",
 | 
			
		||||
		(unsigned long) data.msg_limits.flags,
 | 
			
		||||
		(unsigned long) data.msg_limits.msgpool,
 | 
			
		||||
		(unsigned long) data.msg_limits.msgmap,
 | 
			
		||||
		(unsigned long) data.msg_limits.msgmax,
 | 
			
		||||
		(unsigned long) data.msg_limits.msgmnb,
 | 
			
		||||
		(unsigned long) data.msg_limits.msgmni,
 | 
			
		||||
		(unsigned long) data.msg_limits.msgssz,
 | 
			
		||||
		(unsigned long)  data.msg_limits.msgtql);
 | 
			
		||||
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT; c++)
 | 
			
		||||
		glibtop_get_sem_limits (&data.sem_limits);
 | 
			
		||||
	
 | 
			
		||||
	printf ("Sem Limits   (0x%08lx): "
 | 
			
		||||
		"%lu, %lu, %lu, %lu, %lu, %lu, %lu, %lu, %lu, %lu\n",
 | 
			
		||||
		(unsigned long) data.sem_limits.flags,
 | 
			
		||||
		(unsigned long) data.sem_limits.semmap,
 | 
			
		||||
		(unsigned long) data.sem_limits.semmni,
 | 
			
		||||
		(unsigned long) data.sem_limits.semmns,
 | 
			
		||||
		(unsigned long) data.sem_limits.semmnu,
 | 
			
		||||
		(unsigned long) data.sem_limits.semmsl,
 | 
			
		||||
		(unsigned long) data.sem_limits.semopm,
 | 
			
		||||
		(unsigned long) data.sem_limits.semume,
 | 
			
		||||
		(unsigned long) data.sem_limits.semusz,
 | 
			
		||||
		(unsigned long) data.sem_limits.semvmx,
 | 
			
		||||
		(unsigned long) data.sem_limits.semaem);
 | 
			
		||||
 | 
			
		||||
	printf ("\n");
 | 
			
		||||
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT; c++)
 | 
			
		||||
		glibtop_get_ppp (&data.ppp, 0);
 | 
			
		||||
 | 
			
		||||
	printf ("PPP          (0x%08lx): %lu, %lu, %lu\n",
 | 
			
		||||
		(unsigned long) data.ppp.flags,
 | 
			
		||||
		(unsigned long) data.ppp.state,
 | 
			
		||||
		(unsigned long) data.ppp.bytes_in,
 | 
			
		||||
		(unsigned long) data.ppp.bytes_out);
 | 
			
		||||
 | 
			
		||||
	printf ("\n");
 | 
			
		||||
 | 
			
		||||
	glibtop_get_sysdeps (&sysdeps);
 | 
			
		||||
 | 
			
		||||
	printf ("Sysdeps      (0x%08lx): %lu, %lu, %lu, %lu, %lu, "
 | 
			
		||||
		"%lu, %lu, %lu, %lu, %lu, %lu, %lu, %lu, %lu, %lu, %lu, "
 | 
			
		||||
		"%lu, %lu, %lu, %lu, %lu, %lu\n",
 | 
			
		||||
		(unsigned long) sysdeps.flags,
 | 
			
		||||
		(unsigned long) sysdeps.cpu,
 | 
			
		||||
		(unsigned long) sysdeps.mem,
 | 
			
		||||
		(unsigned long) sysdeps.swap,
 | 
			
		||||
		(unsigned long) sysdeps.uptime,
 | 
			
		||||
		(unsigned long) sysdeps.loadavg,
 | 
			
		||||
		(unsigned long) sysdeps.shm_limits,
 | 
			
		||||
		(unsigned long) sysdeps.msg_limits,
 | 
			
		||||
		(unsigned long) sysdeps.sem_limits,
 | 
			
		||||
		(unsigned long) sysdeps.proclist,
 | 
			
		||||
		(unsigned long) sysdeps.proc_state,
 | 
			
		||||
		(unsigned long) sysdeps.proc_uid,
 | 
			
		||||
		(unsigned long) sysdeps.proc_mem,
 | 
			
		||||
		(unsigned long) sysdeps.proc_time,
 | 
			
		||||
		(unsigned long) sysdeps.proc_signal,
 | 
			
		||||
		(unsigned long) sysdeps.proc_kernel,
 | 
			
		||||
		(unsigned long) sysdeps.proc_segment,
 | 
			
		||||
		(unsigned long) sysdeps.proc_args,
 | 
			
		||||
		(unsigned long) sysdeps.proc_map,
 | 
			
		||||
		(unsigned long) sysdeps.mountlist,
 | 
			
		||||
		(unsigned long) sysdeps.fsusage,
 | 
			
		||||
		(unsigned long) sysdeps.netload,
 | 
			
		||||
		(unsigned long) sysdeps.ppp);
 | 
			
		||||
 | 
			
		||||
	printf ("\n");
 | 
			
		||||
	
 | 
			
		||||
	ptr = glibtop_get_proclist (&data.proclist, 0, 0);
 | 
			
		||||
 | 
			
		||||
	printf ("Proclist     (0x%08lx): %lu, %lu, %lu\n",
 | 
			
		||||
		(unsigned long) data.proclist.flags,
 | 
			
		||||
		(unsigned long) data.proclist.number,
 | 
			
		||||
		(unsigned long) data.proclist.size,
 | 
			
		||||
		(unsigned long) data.proclist.total);
 | 
			
		||||
 | 
			
		||||
	if (ptr) {
 | 
			
		||||
		printf ("\nProcess: ");
 | 
			
		||||
		for (i = 0; i < data.proclist.number; i++)
 | 
			
		||||
			printf ("%s%u", i ? ", " : "", ptr [i]);
 | 
			
		||||
		printf ("\n");
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	glibtop_free (ptr);
 | 
			
		||||
 | 
			
		||||
	pid = getpid ();
 | 
			
		||||
	ppid = getppid ();
 | 
			
		||||
 | 
			
		||||
	printf ("\n");
 | 
			
		||||
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT; c++)
 | 
			
		||||
		glibtop_get_proc_state (&data.proc_state, pid);
 | 
			
		||||
 | 
			
		||||
#if LIBGTOP_VERSION_CODE > 1001000
 | 
			
		||||
	printf ("Proc_State   PID  %5d (0x%08lx): '%s', %u - "
 | 
			
		||||
		"%u, %u, %u, %u - %u, %u, %u\n", (int) pid,
 | 
			
		||||
		(unsigned long) data.proc_state.flags,
 | 
			
		||||
		data.proc_state.cmd, data.proc_state.state,
 | 
			
		||||
		data.proc_state.uid, data.proc_state.gid,
 | 
			
		||||
		data.proc_state.ruid, data.proc_state.rgid,
 | 
			
		||||
		data.proc_state.has_cpu, data.proc_state.processor,
 | 
			
		||||
		data.proc_state.last_processor);
 | 
			
		||||
#else
 | 
			
		||||
	printf ("Proc_State   PID  %5d (0x%08lx): '%s', %c, %lu, %lu\n",
 | 
			
		||||
		(int) pid, (unsigned long) data.proc_state.flags,
 | 
			
		||||
		data.proc_state.cmd, data.proc_state.state,
 | 
			
		||||
		(unsigned long) data.proc_state.uid,
 | 
			
		||||
		(unsigned long) data.proc_state.gid);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT; c++)
 | 
			
		||||
		glibtop_get_proc_uid (&data.proc_uid, pid);
 | 
			
		||||
 | 
			
		||||
#if LIBGTOP_VERSION_CODE > 1001000
 | 
			
		||||
	printf ("Proc_Uid     PID  %5d (0x%08lx): "
 | 
			
		||||
		"%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d - %d",
 | 
			
		||||
		(int) pid, (unsigned long) data.proc_uid.flags,
 | 
			
		||||
		data.proc_uid.uid, data.proc_uid.euid,
 | 
			
		||||
		data.proc_uid.gid, data.proc_uid.egid,
 | 
			
		||||
		data.proc_uid.suid, data.proc_uid.sgid,
 | 
			
		||||
		data.proc_uid.fsuid, data.proc_uid.fsgid,
 | 
			
		||||
		data.proc_uid.pid, data.proc_uid.ppid,
 | 
			
		||||
		data.proc_uid.pgrp, data.proc_uid.session,
 | 
			
		||||
		data.proc_uid.tty, data.proc_uid.tpgid,
 | 
			
		||||
		data.proc_uid.priority, data.proc_uid.nice,
 | 
			
		||||
		data.proc_uid.ngroups);
 | 
			
		||||
 | 
			
		||||
	if (data.proc_uid.ngroups) {
 | 
			
		||||
		for (i = 0; i < data.proc_uid.ngroups; i++) {
 | 
			
		||||
			if (i)
 | 
			
		||||
				printf (" %d", data.proc_uid.groups [i]);
 | 
			
		||||
			else
 | 
			
		||||
				printf (" (%d", data.proc_uid.groups [i]);
 | 
			
		||||
		}
 | 
			
		||||
		printf (")");
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	printf ("\n");
 | 
			
		||||
#else
 | 
			
		||||
	printf ("Proc_Uid     PID  %5d (0x%08lx): "
 | 
			
		||||
		"%d %d %d %d %d %d %d %d %d %d %d %d\n", (int) pid,
 | 
			
		||||
		(unsigned long) data.proc_uid.flags,
 | 
			
		||||
		data.proc_uid.uid, data.proc_uid.euid,
 | 
			
		||||
		data.proc_uid.gid, data.proc_uid.egid,
 | 
			
		||||
		data.proc_uid.pid, data.proc_uid.ppid,
 | 
			
		||||
		data.proc_uid.pgrp, data.proc_uid.session,
 | 
			
		||||
		data.proc_uid.tty, data.proc_uid.tpgid,
 | 
			
		||||
		data.proc_uid.priority, data.proc_uid.nice);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT; c++)
 | 
			
		||||
		glibtop_get_proc_mem (&data.proc_mem, pid);
 | 
			
		||||
 | 
			
		||||
	printf ("Proc_Mem     PID  %5d (0x%08lx): "
 | 
			
		||||
		"%lu %lu %lu %lu %lu %lu\n", (int) pid,
 | 
			
		||||
		(unsigned long) data.proc_mem.flags,
 | 
			
		||||
		(unsigned long) data.proc_mem.size,
 | 
			
		||||
		(unsigned long) data.proc_mem.vsize,
 | 
			
		||||
		(unsigned long) data.proc_mem.resident,
 | 
			
		||||
		(unsigned long) data.proc_mem.share,
 | 
			
		||||
		(unsigned long) data.proc_mem.rss,
 | 
			
		||||
		(unsigned long) data.proc_mem.rss_rlim);
 | 
			
		||||
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT; c++)
 | 
			
		||||
		glibtop_get_proc_segment (&data.proc_segment, pid);
 | 
			
		||||
 | 
			
		||||
#if LIBGTOP_VERSION_CODE > 1001000
 | 
			
		||||
	printf ("Proc_Segment PID  %5d (0x%08lx): "
 | 
			
		||||
		"%lu %lu %lu %lu %lu 0x%lx 0x%lx 0x%lx "
 | 
			
		||||
		"0x%lx 0x%lx 0x%lx 0x%lx 0x%lx "
 | 
			
		||||
		"0x%lx 0x%lx 0x%lx 0x%lx\n", (int) pid,
 | 
			
		||||
		(unsigned long) data.proc_segment.flags,
 | 
			
		||||
		(unsigned long) data.proc_segment.text_rss,
 | 
			
		||||
		(unsigned long) data.proc_segment.shlib_rss,
 | 
			
		||||
		(unsigned long) data.proc_segment.data_rss,
 | 
			
		||||
		(unsigned long) data.proc_segment.stack_rss,
 | 
			
		||||
		(unsigned long) data.proc_segment.dirty_size,
 | 
			
		||||
		(unsigned long) data.proc_segment.start_code,
 | 
			
		||||
		(unsigned long) data.proc_segment.end_code,
 | 
			
		||||
		(unsigned long) data.proc_segment.start_data,
 | 
			
		||||
		(unsigned long) data.proc_segment.end_data,
 | 
			
		||||
		(unsigned long) data.proc_segment.start_brk,
 | 
			
		||||
		(unsigned long) data.proc_segment.end_brk,
 | 
			
		||||
		(unsigned long) data.proc_segment.start_stack,
 | 
			
		||||
		(unsigned long) data.proc_segment.start_mmap,
 | 
			
		||||
		(unsigned long) data.proc_segment.arg_start,
 | 
			
		||||
		(unsigned long) data.proc_segment.arg_end,
 | 
			
		||||
		(unsigned long) data.proc_segment.env_start,
 | 
			
		||||
		(unsigned long) data.proc_segment.env_end);
 | 
			
		||||
#else
 | 
			
		||||
	printf ("Proc_Segment PID  %5d (0x%08lx): "
 | 
			
		||||
		"%lu %lu %lu %lu %lu %lu %lu %lu\n", (int) pid,
 | 
			
		||||
		(unsigned long) data.proc_segment.flags,
 | 
			
		||||
		(unsigned long) data.proc_segment.text_rss,
 | 
			
		||||
		(unsigned long) data.proc_segment.shlib_rss,
 | 
			
		||||
		(unsigned long) data.proc_segment.data_rss,
 | 
			
		||||
		(unsigned long) data.proc_segment.stack_rss,
 | 
			
		||||
		(unsigned long) data.proc_segment.dirty_size,
 | 
			
		||||
		(unsigned long) data.proc_segment.start_code,
 | 
			
		||||
		(unsigned long) data.proc_segment.end_code,
 | 
			
		||||
		(unsigned long) data.proc_segment.start_stack);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT; c++)
 | 
			
		||||
		glibtop_get_proc_time (&data.proc_time, pid);
 | 
			
		||||
 | 
			
		||||
	printf ("Proc_Time    PID  %5d (0x%08lx): "
 | 
			
		||||
		"%lu %lu %lu %lu %lu %lu %lu %lu %lu\n", (int) pid,
 | 
			
		||||
		(unsigned long) data.proc_time.flags,
 | 
			
		||||
		(unsigned long) data.proc_time.start_time,
 | 
			
		||||
		(unsigned long) data.proc_time.rtime,
 | 
			
		||||
		(unsigned long) data.proc_time.utime,
 | 
			
		||||
		(unsigned long) data.proc_time.stime,
 | 
			
		||||
		(unsigned long) data.proc_time.cutime,
 | 
			
		||||
		(unsigned long) data.proc_time.cstime,
 | 
			
		||||
		(unsigned long) data.proc_time.timeout,
 | 
			
		||||
		(unsigned long) data.proc_time.it_real_value,
 | 
			
		||||
		(unsigned long) data.proc_time.frequency);
 | 
			
		||||
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT; c++)
 | 
			
		||||
		glibtop_get_proc_signal (&data.proc_signal, pid);
 | 
			
		||||
	
 | 
			
		||||
#if LIBGTOP_VERSION_CODE > 1001000
 | 
			
		||||
	printf ("Proc_Signal  PID  %5d (0x%08lx): "
 | 
			
		||||
		"%lx %lx %lx %lx %lx %lx %lx %lx\n", (int) pid,
 | 
			
		||||
		(unsigned long) data.proc_signal.flags,
 | 
			
		||||
		(unsigned long) data.proc_signal.signal [0],
 | 
			
		||||
		(unsigned long) data.proc_signal.signal [1],
 | 
			
		||||
		(unsigned long) data.proc_signal.blocked [0],
 | 
			
		||||
		(unsigned long) data.proc_signal.blocked [1],
 | 
			
		||||
		(unsigned long) data.proc_signal.sigignore [0],
 | 
			
		||||
		(unsigned long) data.proc_signal.sigignore [1],
 | 
			
		||||
		(unsigned long) data.proc_signal.sigcatch [0],
 | 
			
		||||
		(unsigned long) data.proc_signal.sigcatch [1]);
 | 
			
		||||
#else
 | 
			
		||||
	printf ("Proc_Signal  PID  %5d (0x%08lx): "
 | 
			
		||||
		"%lu %lu %lu %lu\n", (int) pid,
 | 
			
		||||
		(unsigned long) data.proc_signal.flags,
 | 
			
		||||
		(unsigned long) data.proc_signal.signal,
 | 
			
		||||
		(unsigned long) data.proc_signal.blocked,
 | 
			
		||||
		(unsigned long) data.proc_signal.sigignore,
 | 
			
		||||
		(unsigned long) data.proc_signal.sigcatch);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT; c++)
 | 
			
		||||
		glibtop_get_proc_kernel (&data.proc_kernel, pid);
 | 
			
		||||
 | 
			
		||||
	printf ("Proc_Kernel  PID  %5d (0x%08lx): "
 | 
			
		||||
		"%lu %lu %lu %lu %lu 0x%lx 0x%lx 0x%lx (%s)\n", (int) pid,
 | 
			
		||||
		(unsigned long) data.proc_kernel.flags,
 | 
			
		||||
		(unsigned long) data.proc_kernel.k_flags,
 | 
			
		||||
		(unsigned long) data.proc_kernel.min_flt,
 | 
			
		||||
		(unsigned long) data.proc_kernel.maj_flt,
 | 
			
		||||
		(unsigned long) data.proc_kernel.cmin_flt,
 | 
			
		||||
		(unsigned long) data.proc_kernel.cmaj_flt,
 | 
			
		||||
		(unsigned long) data.proc_kernel.kstk_esp,
 | 
			
		||||
		(unsigned long) data.proc_kernel.kstk_eip,
 | 
			
		||||
		(unsigned long) data.proc_kernel.nwchan,
 | 
			
		||||
		data.proc_kernel.wchan);
 | 
			
		||||
 | 
			
		||||
	printf ("\n");
 | 
			
		||||
 | 
			
		||||
	args = glibtop_get_proc_args (&data.proc_args, pid, 0);
 | 
			
		||||
 | 
			
		||||
	for (i = 0; i < data.proc_args.size; i++) {
 | 
			
		||||
		if (args [i]) continue;
 | 
			
		||||
		args [i] = '|';
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	printf ("Proc_Args    PID  %5d (0x%08lx): %lu - '%s'\n", (int) pid,
 | 
			
		||||
		(unsigned long) data.proc_args.flags,
 | 
			
		||||
		(unsigned long) data.proc_args.size,
 | 
			
		||||
		args ? args : "");
 | 
			
		||||
 | 
			
		||||
	glibtop_free (args);
 | 
			
		||||
 | 
			
		||||
	printf ("\n");
 | 
			
		||||
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT; c++)
 | 
			
		||||
		glibtop_get_proc_state (&data.proc_state, ppid);
 | 
			
		||||
 | 
			
		||||
#if LIBGTOP_VERSION_CODE > 1001000
 | 
			
		||||
	printf ("Proc_State   PPID %5d (0x%08lx): '%s', %u - "
 | 
			
		||||
		"%u, %u, %u, %u - %u, %u, %u\n", (int) ppid,
 | 
			
		||||
		(unsigned long) data.proc_state.flags,
 | 
			
		||||
		data.proc_state.cmd, data.proc_state.state,
 | 
			
		||||
		data.proc_state.uid, data.proc_state.gid,
 | 
			
		||||
		data.proc_state.ruid, data.proc_state.rgid,
 | 
			
		||||
		data.proc_state.has_cpu, data.proc_state.processor,
 | 
			
		||||
		data.proc_state.last_processor);
 | 
			
		||||
#else
 | 
			
		||||
	printf ("Proc_State   PPID %5d (0x%08lx): '%s', %c, %lu, %lu\n",
 | 
			
		||||
		(int) ppid, (unsigned long) data.proc_state.flags,
 | 
			
		||||
		data.proc_state.cmd, data.proc_state.state,
 | 
			
		||||
		(unsigned long) data.proc_state.uid,
 | 
			
		||||
		(unsigned long) data.proc_state.gid);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT; c++)
 | 
			
		||||
		glibtop_get_proc_uid (&data.proc_uid, ppid);
 | 
			
		||||
 | 
			
		||||
#if LIBGTOP_VERSION_CODE > 1001000
 | 
			
		||||
	printf ("Proc_Uid     PPID %5d (0x%08lx): "
 | 
			
		||||
		"%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d - %d",
 | 
			
		||||
		(int) ppid, (unsigned long) data.proc_uid.flags,
 | 
			
		||||
		data.proc_uid.uid, data.proc_uid.euid,
 | 
			
		||||
		data.proc_uid.gid, data.proc_uid.egid,
 | 
			
		||||
		data.proc_uid.suid, data.proc_uid.sgid,
 | 
			
		||||
		data.proc_uid.fsuid, data.proc_uid.fsgid,
 | 
			
		||||
		data.proc_uid.pid, data.proc_uid.ppid,
 | 
			
		||||
		data.proc_uid.pgrp, data.proc_uid.session,
 | 
			
		||||
		data.proc_uid.tty, data.proc_uid.tpgid,
 | 
			
		||||
		data.proc_uid.priority, data.proc_uid.nice,
 | 
			
		||||
		data.proc_uid.ngroups);
 | 
			
		||||
 | 
			
		||||
	if (data.proc_uid.ngroups) {
 | 
			
		||||
		for (i = 0; i < data.proc_uid.ngroups; i++) {
 | 
			
		||||
			if (i)
 | 
			
		||||
				printf (" %d", data.proc_uid.groups [i]);
 | 
			
		||||
			else
 | 
			
		||||
				printf (" (%d", data.proc_uid.groups [i]);
 | 
			
		||||
		}
 | 
			
		||||
		printf (")");
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	printf ("\n");
 | 
			
		||||
#else
 | 
			
		||||
	printf ("Proc_Uid     PPID %5d (0x%08lx): "
 | 
			
		||||
		"%d %d %d %d %d %d %d %d %d %d %d %d\n", (int) ppid,
 | 
			
		||||
		(unsigned long) data.proc_uid.flags,
 | 
			
		||||
		data.proc_uid.uid, data.proc_uid.euid,
 | 
			
		||||
		data.proc_uid.gid, data.proc_uid.egid,
 | 
			
		||||
		data.proc_uid.pid, data.proc_uid.ppid,
 | 
			
		||||
		data.proc_uid.pgrp, data.proc_uid.session,
 | 
			
		||||
		data.proc_uid.tty, data.proc_uid.tpgid,
 | 
			
		||||
		data.proc_uid.priority, data.proc_uid.nice);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT; c++)
 | 
			
		||||
		glibtop_get_proc_mem (&data.proc_mem, ppid);
 | 
			
		||||
 | 
			
		||||
	printf ("Proc_Mem     PPID %5d (0x%08lx): "
 | 
			
		||||
		"%lu %lu %lu %lu %lu %lu\n", (int) ppid,
 | 
			
		||||
		(unsigned long) data.proc_mem.flags,
 | 
			
		||||
		(unsigned long) data.proc_mem.size,
 | 
			
		||||
		(unsigned long) data.proc_mem.vsize,
 | 
			
		||||
		(unsigned long) data.proc_mem.resident,
 | 
			
		||||
		(unsigned long) data.proc_mem.share,
 | 
			
		||||
		(unsigned long) data.proc_mem.rss,
 | 
			
		||||
		(unsigned long) data.proc_mem.rss_rlim);
 | 
			
		||||
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT; c++)
 | 
			
		||||
		glibtop_get_proc_segment (&data.proc_segment, ppid);
 | 
			
		||||
 | 
			
		||||
#if LIBGTOP_VERSION_CODE > 1001000
 | 
			
		||||
	printf ("Proc_Segment PPID %5d (0x%08lx): "
 | 
			
		||||
		"%lu %lu %lu %lu %lu 0x%lx 0x%lx 0x%lx "
 | 
			
		||||
		"0x%lx 0x%lx 0x%lx 0x%lx 0x%lx "
 | 
			
		||||
		"0x%lx 0x%lx 0x%lx 0x%lx\n", (int) ppid,
 | 
			
		||||
		(unsigned long) data.proc_segment.flags,
 | 
			
		||||
		(unsigned long) data.proc_segment.text_rss,
 | 
			
		||||
		(unsigned long) data.proc_segment.shlib_rss,
 | 
			
		||||
		(unsigned long) data.proc_segment.data_rss,
 | 
			
		||||
		(unsigned long) data.proc_segment.stack_rss,
 | 
			
		||||
		(unsigned long) data.proc_segment.dirty_size,
 | 
			
		||||
		(unsigned long) data.proc_segment.start_code,
 | 
			
		||||
		(unsigned long) data.proc_segment.end_code,
 | 
			
		||||
		(unsigned long) data.proc_segment.start_data,
 | 
			
		||||
		(unsigned long) data.proc_segment.end_data,
 | 
			
		||||
		(unsigned long) data.proc_segment.start_brk,
 | 
			
		||||
		(unsigned long) data.proc_segment.end_brk,
 | 
			
		||||
		(unsigned long) data.proc_segment.start_stack,
 | 
			
		||||
		(unsigned long) data.proc_segment.start_mmap,
 | 
			
		||||
		(unsigned long) data.proc_segment.arg_start,
 | 
			
		||||
		(unsigned long) data.proc_segment.arg_end,
 | 
			
		||||
		(unsigned long) data.proc_segment.env_start,
 | 
			
		||||
		(unsigned long) data.proc_segment.env_end);
 | 
			
		||||
#else
 | 
			
		||||
	printf ("Proc_Segment PPID %5d (0x%08lx): "
 | 
			
		||||
		"%lu %lu %lu %lu %lu %lu %lu %lu\n", (int) ppid,
 | 
			
		||||
		(unsigned long) data.proc_segment.flags,
 | 
			
		||||
		(unsigned long) data.proc_segment.text_rss,
 | 
			
		||||
		(unsigned long) data.proc_segment.shlib_rss,
 | 
			
		||||
		(unsigned long) data.proc_segment.data_rss,
 | 
			
		||||
		(unsigned long) data.proc_segment.stack_rss,
 | 
			
		||||
		(unsigned long) data.proc_segment.dirty_size,
 | 
			
		||||
		(unsigned long) data.proc_segment.start_code,
 | 
			
		||||
		(unsigned long) data.proc_segment.end_code,
 | 
			
		||||
		(unsigned long) data.proc_segment.start_stack);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT; c++)
 | 
			
		||||
		glibtop_get_proc_time (&data.proc_time, ppid);
 | 
			
		||||
 | 
			
		||||
	printf ("Proc_Time    PPID %5d (0x%08lx): "
 | 
			
		||||
		"%lu %lu %lu %lu %lu %lu %lu %lu %lu\n", (int) ppid,
 | 
			
		||||
		(unsigned long) data.proc_time.flags,
 | 
			
		||||
		(unsigned long) data.proc_time.start_time,
 | 
			
		||||
		(unsigned long) data.proc_time.rtime,
 | 
			
		||||
		(unsigned long) data.proc_time.utime,
 | 
			
		||||
		(unsigned long) data.proc_time.stime,
 | 
			
		||||
		(unsigned long) data.proc_time.cutime,
 | 
			
		||||
		(unsigned long) data.proc_time.cstime,
 | 
			
		||||
		(unsigned long) data.proc_time.timeout,
 | 
			
		||||
		(unsigned long) data.proc_time.it_real_value,
 | 
			
		||||
		(unsigned long) data.proc_time.frequency);
 | 
			
		||||
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT; c++)
 | 
			
		||||
		glibtop_get_proc_signal (&data.proc_signal, ppid);
 | 
			
		||||
 | 
			
		||||
#if LIBGTOP_VERSION_CODE > 1001000
 | 
			
		||||
	printf ("Proc_Signal  PPID %5d (0x%08lx): "
 | 
			
		||||
		"%lx %lx %lx %lx %lx %lx %lx %lx\n",
 | 
			
		||||
		(int) ppid, (unsigned long) data.proc_signal.flags,
 | 
			
		||||
		(unsigned long) data.proc_signal.signal [0],
 | 
			
		||||
		(unsigned long) data.proc_signal.signal [1],
 | 
			
		||||
		(unsigned long) data.proc_signal.blocked [0],
 | 
			
		||||
		(unsigned long) data.proc_signal.blocked [1],
 | 
			
		||||
		(unsigned long) data.proc_signal.sigignore [0],
 | 
			
		||||
		(unsigned long) data.proc_signal.sigignore [1],
 | 
			
		||||
		(unsigned long) data.proc_signal.sigcatch [0],
 | 
			
		||||
		(unsigned long) data.proc_signal.sigcatch [1]);
 | 
			
		||||
#else
 | 
			
		||||
	printf ("Proc_Signal  PPID %5d (0x%08lx): %lu %lu %lu %lu\n",
 | 
			
		||||
		(int) ppid, (unsigned long) data.proc_signal.flags,
 | 
			
		||||
		(unsigned long) data.proc_signal.signal,
 | 
			
		||||
		(unsigned long) data.proc_signal.blocked,
 | 
			
		||||
		(unsigned long) data.proc_signal.sigignore,
 | 
			
		||||
		(unsigned long) data.proc_signal.sigcatch);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT; c++)
 | 
			
		||||
		glibtop_get_proc_kernel (&data.proc_kernel, ppid);
 | 
			
		||||
 | 
			
		||||
	printf ("Proc_Kernel  PPID %5d (0x%08lx): "
 | 
			
		||||
		"%lu %lu %lu %lu %lu 0x%lx 0x%lx 0x%lx (%s)\n", (int) ppid,
 | 
			
		||||
		(unsigned long) data.proc_kernel.flags,
 | 
			
		||||
		(unsigned long) data.proc_kernel.k_flags,
 | 
			
		||||
		(unsigned long) data.proc_kernel.min_flt,
 | 
			
		||||
		(unsigned long) data.proc_kernel.maj_flt,
 | 
			
		||||
		(unsigned long) data.proc_kernel.cmin_flt,
 | 
			
		||||
		(unsigned long) data.proc_kernel.cmaj_flt,
 | 
			
		||||
		(unsigned long) data.proc_kernel.kstk_esp,
 | 
			
		||||
		(unsigned long) data.proc_kernel.kstk_eip,
 | 
			
		||||
		(unsigned long) data.proc_kernel.nwchan,
 | 
			
		||||
		data.proc_kernel.wchan);
 | 
			
		||||
 | 
			
		||||
	printf ("\n");
 | 
			
		||||
 | 
			
		||||
	args = glibtop_get_proc_args (&data.proc_args, ppid, 0);
 | 
			
		||||
 | 
			
		||||
	for (i = 0; i < data.proc_args.size; i++) {
 | 
			
		||||
		if (args [i]) continue;
 | 
			
		||||
		args [i] = '|';
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	printf ("Proc_Args    PID  %5d (0x%08lx): %lu - '%s'\n", (int) ppid,
 | 
			
		||||
		(unsigned long) data.proc_args.flags,
 | 
			
		||||
		(unsigned long) data.proc_args.size,
 | 
			
		||||
		args ? args : "");
 | 
			
		||||
 | 
			
		||||
	glibtop_free (args);
 | 
			
		||||
 | 
			
		||||
	printf ("\n");
 | 
			
		||||
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT; c++)
 | 
			
		||||
		glibtop_get_proc_state (&data.proc_state, 1);
 | 
			
		||||
 | 
			
		||||
#if LIBGTOP_VERSION_CODE > 1001000
 | 
			
		||||
	printf ("Proc_State   INIT %5d (0x%08lx): '%s', %u - "
 | 
			
		||||
		"%u, %u, %u, %u - %u, %u, %u\n", 1,
 | 
			
		||||
		(unsigned long) data.proc_state.flags,
 | 
			
		||||
		data.proc_state.cmd, data.proc_state.state,
 | 
			
		||||
		data.proc_state.uid, data.proc_state.gid,
 | 
			
		||||
		data.proc_state.ruid, data.proc_state.rgid,
 | 
			
		||||
		data.proc_state.has_cpu, data.proc_state.processor,
 | 
			
		||||
		data.proc_state.last_processor);
 | 
			
		||||
#else
 | 
			
		||||
	printf ("Proc_State   INIT %5d (0x%08lx): '%s', %c, %lu, %lu\n", 1,
 | 
			
		||||
		(unsigned long) data.proc_state.flags,
 | 
			
		||||
		data.proc_state.cmd, data.proc_state.state,
 | 
			
		||||
		(unsigned long) data.proc_state.uid,
 | 
			
		||||
		(unsigned long) data.proc_state.gid);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT; c++)
 | 
			
		||||
		glibtop_get_proc_uid (&data.proc_uid, 1);
 | 
			
		||||
 | 
			
		||||
#if LIBGTOP_VERSION_CODE > 1001000
 | 
			
		||||
	printf ("Proc_Uid     INIT %5d (0x%08lx): "
 | 
			
		||||
		"%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d - %d", 1,
 | 
			
		||||
		(unsigned long) data.proc_uid.flags,
 | 
			
		||||
		data.proc_uid.uid, data.proc_uid.euid,
 | 
			
		||||
		data.proc_uid.gid, data.proc_uid.egid,
 | 
			
		||||
		data.proc_uid.suid, data.proc_uid.sgid,
 | 
			
		||||
		data.proc_uid.fsuid, data.proc_uid.fsgid,
 | 
			
		||||
		data.proc_uid.pid, data.proc_uid.ppid,
 | 
			
		||||
		data.proc_uid.pgrp, data.proc_uid.session,
 | 
			
		||||
		data.proc_uid.tty, data.proc_uid.tpgid,
 | 
			
		||||
		data.proc_uid.priority, data.proc_uid.nice,
 | 
			
		||||
		data.proc_uid.ngroups);
 | 
			
		||||
 | 
			
		||||
	if (data.proc_uid.ngroups) {
 | 
			
		||||
		for (i = 0; i < data.proc_uid.ngroups; i++) {
 | 
			
		||||
			if (i)
 | 
			
		||||
				printf (" %d", data.proc_uid.groups [i]);
 | 
			
		||||
			else
 | 
			
		||||
				printf (" (%d", data.proc_uid.groups [i]);
 | 
			
		||||
		}
 | 
			
		||||
		printf (")");
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	printf ("\n");
 | 
			
		||||
#else
 | 
			
		||||
	printf ("Proc_Uid     INIT %5d (0x%08lx): "
 | 
			
		||||
		"%d %d %d %d %d %d %d %d %d %d %d %d\n", 1,
 | 
			
		||||
		(unsigned long) data.proc_uid.flags,
 | 
			
		||||
		data.proc_uid.uid, data.proc_uid.euid,
 | 
			
		||||
		data.proc_uid.gid, data.proc_uid.egid,
 | 
			
		||||
		data.proc_uid.pid, data.proc_uid.ppid,
 | 
			
		||||
		data.proc_uid.pgrp, data.proc_uid.session,
 | 
			
		||||
		data.proc_uid.tty, data.proc_uid.tpgid,
 | 
			
		||||
		data.proc_uid.priority, data.proc_uid.nice);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT; c++)
 | 
			
		||||
		glibtop_get_proc_mem (&data.proc_mem, 1);
 | 
			
		||||
 | 
			
		||||
	printf ("Proc_Mem     INIT %5d (0x%08lx): "
 | 
			
		||||
		"%lu %lu %lu %lu %lu %lu\n", 1,
 | 
			
		||||
		(unsigned long) data.proc_mem.flags,
 | 
			
		||||
		(unsigned long) data.proc_mem.size,
 | 
			
		||||
		(unsigned long) data.proc_mem.vsize,
 | 
			
		||||
		(unsigned long) data.proc_mem.resident,
 | 
			
		||||
		(unsigned long) data.proc_mem.share,
 | 
			
		||||
		(unsigned long) data.proc_mem.rss,
 | 
			
		||||
		(unsigned long) data.proc_mem.rss_rlim);
 | 
			
		||||
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT; c++)
 | 
			
		||||
		glibtop_get_proc_segment (&data.proc_segment, 1);
 | 
			
		||||
 | 
			
		||||
#if LIBGTOP_VERSION_CODE > 1001000
 | 
			
		||||
	printf ("Proc_Segment INIT %5d (0x%08lx): "
 | 
			
		||||
		"%lu %lu %lu %lu %lu 0x%lx 0x%lx 0x%lx "
 | 
			
		||||
		"0x%lx 0x%lx 0x%lx 0x%lx 0x%lx "
 | 
			
		||||
		"0x%lx 0x%lx 0x%lx 0x%lx\n", 1,
 | 
			
		||||
		(unsigned long) data.proc_segment.flags,
 | 
			
		||||
		(unsigned long) data.proc_segment.text_rss,
 | 
			
		||||
		(unsigned long) data.proc_segment.shlib_rss,
 | 
			
		||||
		(unsigned long) data.proc_segment.data_rss,
 | 
			
		||||
		(unsigned long) data.proc_segment.stack_rss,
 | 
			
		||||
		(unsigned long) data.proc_segment.dirty_size,
 | 
			
		||||
		(unsigned long) data.proc_segment.start_code,
 | 
			
		||||
		(unsigned long) data.proc_segment.end_code,
 | 
			
		||||
		(unsigned long) data.proc_segment.start_data,
 | 
			
		||||
		(unsigned long) data.proc_segment.end_data,
 | 
			
		||||
		(unsigned long) data.proc_segment.start_brk,
 | 
			
		||||
		(unsigned long) data.proc_segment.end_brk,
 | 
			
		||||
		(unsigned long) data.proc_segment.start_stack,
 | 
			
		||||
		(unsigned long) data.proc_segment.start_mmap,
 | 
			
		||||
		(unsigned long) data.proc_segment.arg_start,
 | 
			
		||||
		(unsigned long) data.proc_segment.arg_end,
 | 
			
		||||
		(unsigned long) data.proc_segment.env_start,
 | 
			
		||||
		(unsigned long) data.proc_segment.env_end);
 | 
			
		||||
#else
 | 
			
		||||
	printf ("Proc_Segment INIT %5d (0x%08lx): "
 | 
			
		||||
		"%lu %lu %lu %lu %lu %lu %lu %lu\n", 1,
 | 
			
		||||
		(unsigned long) data.proc_segment.flags,
 | 
			
		||||
		(unsigned long) data.proc_segment.text_rss,
 | 
			
		||||
		(unsigned long) data.proc_segment.shlib_rss,
 | 
			
		||||
		(unsigned long) data.proc_segment.data_rss,
 | 
			
		||||
		(unsigned long) data.proc_segment.stack_rss,
 | 
			
		||||
		(unsigned long) data.proc_segment.dirty_size,
 | 
			
		||||
		(unsigned long) data.proc_segment.start_code,
 | 
			
		||||
		(unsigned long) data.proc_segment.end_code,
 | 
			
		||||
		(unsigned long) data.proc_segment.start_stack);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT; c++)
 | 
			
		||||
		glibtop_get_proc_time (&data.proc_time, 1);
 | 
			
		||||
 | 
			
		||||
	printf ("Proc_Time    INIT %5d (0x%08lx): "
 | 
			
		||||
		"%lu %lu %lu %lu %lu %lu %lu %lu %lu\n", 1,
 | 
			
		||||
		(unsigned long) data.proc_time.flags,
 | 
			
		||||
		(unsigned long) data.proc_time.start_time,
 | 
			
		||||
		(unsigned long) data.proc_time.rtime,
 | 
			
		||||
		(unsigned long) data.proc_time.utime,
 | 
			
		||||
		(unsigned long) data.proc_time.stime,
 | 
			
		||||
		(unsigned long) data.proc_time.cutime,
 | 
			
		||||
		(unsigned long) data.proc_time.cstime,
 | 
			
		||||
		(unsigned long) data.proc_time.timeout,
 | 
			
		||||
		(unsigned long) data.proc_time.it_real_value,
 | 
			
		||||
		(unsigned long) data.proc_time.frequency);
 | 
			
		||||
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT; c++)
 | 
			
		||||
		glibtop_get_proc_signal (&data.proc_signal, 1);
 | 
			
		||||
 | 
			
		||||
#if LIBGTOP_VERSION_CODE > 1001000
 | 
			
		||||
	printf ("Proc_Signal  INIT %5d (0x%08lx): "
 | 
			
		||||
		"%lx %lx %lx %lx %lx %lx %lx %lx\n", 1,
 | 
			
		||||
		(unsigned long) data.proc_signal.flags,
 | 
			
		||||
		(unsigned long) data.proc_signal.signal [0],
 | 
			
		||||
		(unsigned long) data.proc_signal.signal [1],
 | 
			
		||||
		(unsigned long) data.proc_signal.blocked [0],
 | 
			
		||||
		(unsigned long) data.proc_signal.blocked [1],
 | 
			
		||||
		(unsigned long) data.proc_signal.sigignore [0],
 | 
			
		||||
		(unsigned long) data.proc_signal.sigignore [1],
 | 
			
		||||
		(unsigned long) data.proc_signal.sigcatch [0],
 | 
			
		||||
		(unsigned long) data.proc_signal.sigcatch [1]);
 | 
			
		||||
#else
 | 
			
		||||
	printf ("Proc_Signal  INIT %5d (0x%08lx): "
 | 
			
		||||
		"%lu %lu %lu %lu\n", 1,
 | 
			
		||||
		(unsigned long) data.proc_signal.flags,
 | 
			
		||||
		(unsigned long) data.proc_signal.signal,
 | 
			
		||||
		(unsigned long) data.proc_signal.blocked,
 | 
			
		||||
		(unsigned long) data.proc_signal.sigignore,
 | 
			
		||||
		(unsigned long) data.proc_signal.sigcatch);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT; c++)
 | 
			
		||||
		glibtop_get_proc_kernel (&data.proc_kernel, 1);
 | 
			
		||||
 | 
			
		||||
	printf ("Proc_Kernel  INIT %5d (0x%08lx): "
 | 
			
		||||
		"%lu %lu %lu %lu %lu 0x%lx 0x%lx 0x%lx (%s)\n", 1,
 | 
			
		||||
		(unsigned long) data.proc_kernel.flags,
 | 
			
		||||
		(unsigned long) data.proc_kernel.k_flags,
 | 
			
		||||
		(unsigned long) data.proc_kernel.min_flt,
 | 
			
		||||
		(unsigned long) data.proc_kernel.maj_flt,
 | 
			
		||||
		(unsigned long) data.proc_kernel.cmin_flt,
 | 
			
		||||
		(unsigned long) data.proc_kernel.cmaj_flt,
 | 
			
		||||
		(unsigned long) data.proc_kernel.kstk_esp,
 | 
			
		||||
		(unsigned long) data.proc_kernel.kstk_eip,
 | 
			
		||||
		(unsigned long) data.proc_kernel.nwchan,
 | 
			
		||||
		data.proc_kernel.wchan);
 | 
			
		||||
 | 
			
		||||
	printf ("\n");
 | 
			
		||||
 | 
			
		||||
	args = glibtop_get_proc_args (&data.proc_args, 1, 0);
 | 
			
		||||
 | 
			
		||||
	for (i = 0; i < data.proc_args.size; i++) {
 | 
			
		||||
		if (args [i]) continue;
 | 
			
		||||
		args [i] = '|';
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	printf ("Proc_Args    PID  %5d (0x%08lx): %lu - '%s'\n", 1,
 | 
			
		||||
		(unsigned long) data.proc_args.flags,
 | 
			
		||||
		(unsigned long) data.proc_args.size,
 | 
			
		||||
		args ? args : "");
 | 
			
		||||
 | 
			
		||||
	glibtop_free (args);
 | 
			
		||||
 | 
			
		||||
	glibtop_close ();
 | 
			
		||||
 | 
			
		||||
	exit (0);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										113
									
								
								examples/mountlist.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										113
									
								
								examples/mountlist.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,113 @@
 | 
			
		||||
/* $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 <locale.h>
 | 
			
		||||
 | 
			
		||||
#include <glibtop.h>
 | 
			
		||||
#include <glibtop/open.h>
 | 
			
		||||
#include <glibtop/close.h>
 | 
			
		||||
#include <glibtop/xmalloc.h>
 | 
			
		||||
 | 
			
		||||
#include <glibtop/parameter.h>
 | 
			
		||||
 | 
			
		||||
#include <glibtop/mountlist.h>
 | 
			
		||||
#include <glibtop/fsusage.h>
 | 
			
		||||
 | 
			
		||||
#ifndef PROFILE_COUNT
 | 
			
		||||
#define PROFILE_COUNT	1000
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
int
 | 
			
		||||
main (int argc, char *argv [])
 | 
			
		||||
{
 | 
			
		||||
	glibtop_fsusage fsusage;
 | 
			
		||||
	glibtop_mountlist mount_list;
 | 
			
		||||
	glibtop_mountentry *mount_entries;
 | 
			
		||||
	unsigned c, index, method, count, port;
 | 
			
		||||
	char buffer [BUFSIZ];
 | 
			
		||||
 | 
			
		||||
	setlocale (LC_ALL, "");
 | 
			
		||||
	bindtextdomain (PACKAGE, GTOPLOCALEDIR);
 | 
			
		||||
	textdomain (PACKAGE);
 | 
			
		||||
	
 | 
			
		||||
	glibtop_init_r (&glibtop_global_server, 0, GLIBTOP_INIT_NO_OPEN);
 | 
			
		||||
 | 
			
		||||
	glibtop_get_parameter (GLIBTOP_PARAM_METHOD, &method, sizeof (method));
 | 
			
		||||
	
 | 
			
		||||
	printf ("Method = %d\n", method);
 | 
			
		||||
 | 
			
		||||
	count = glibtop_get_parameter (GLIBTOP_PARAM_COMMAND, buffer, BUFSIZ);
 | 
			
		||||
	buffer [count] = 0;
 | 
			
		||||
 | 
			
		||||
	printf ("Command = '%s'\n", buffer);
 | 
			
		||||
 | 
			
		||||
	count = glibtop_get_parameter (GLIBTOP_PARAM_HOST, buffer, BUFSIZ);
 | 
			
		||||
	buffer [count] = 0;
 | 
			
		||||
 | 
			
		||||
	glibtop_get_parameter (GLIBTOP_PARAM_PORT, &port, sizeof (port));
 | 
			
		||||
 | 
			
		||||
	printf ("Host = '%s' - %u\n\n", buffer, port);
 | 
			
		||||
 | 
			
		||||
	printf ("sbrk (0) = %p\n\n", sbrk (0));
 | 
			
		||||
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT; c++) {
 | 
			
		||||
		mount_entries = glibtop_get_mountlist (&mount_list, 1);
 | 
			
		||||
 | 
			
		||||
		glibtop_free (mount_entries);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	printf ("sbrk (0) = %p\n\n", sbrk (0));
 | 
			
		||||
 | 
			
		||||
	mount_entries = glibtop_get_mountlist (&mount_list, 1);
 | 
			
		||||
 | 
			
		||||
	if (mount_entries == NULL)
 | 
			
		||||
		_exit (1);
 | 
			
		||||
 | 
			
		||||
	for (index = 0; index < mount_list.number; index++)
 | 
			
		||||
		printf ("Mount_Entry: %-30s %-10s %-20s\n",
 | 
			
		||||
			mount_entries [index].mountdir,
 | 
			
		||||
			mount_entries [index].type,
 | 
			
		||||
			mount_entries [index].devname);
 | 
			
		||||
 | 
			
		||||
	printf ("\n\n%-23s %9s %9s %9s %9s %9s\n\n",
 | 
			
		||||
		"", "Blocks", "Free", "Avail", "Files", "Free");
 | 
			
		||||
 | 
			
		||||
	for (index = 0; index < mount_list.number; index++) {
 | 
			
		||||
		glibtop_get_fsusage (&fsusage,
 | 
			
		||||
				     mount_entries [index].mountdir);
 | 
			
		||||
 | 
			
		||||
		printf ("Usage: %-16s %9Lu %9Lu %9Lu %9Lu %9Lu\n",
 | 
			
		||||
			mount_entries [index].mountdir,
 | 
			
		||||
			fsusage.blocks, fsusage.bfree,
 | 
			
		||||
			fsusage.bavail, fsusage.files,
 | 
			
		||||
			fsusage.ffree);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	glibtop_free (mount_entries);
 | 
			
		||||
 | 
			
		||||
	printf ("\nsbrk (0) = %p\n\n", sbrk (0));
 | 
			
		||||
 | 
			
		||||
	glibtop_close ();
 | 
			
		||||
 | 
			
		||||
	exit (0);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										125
									
								
								examples/netload.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										125
									
								
								examples/netload.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,125 @@
 | 
			
		||||
/* $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 <locale.h>
 | 
			
		||||
 | 
			
		||||
#include <glibtop.h>
 | 
			
		||||
#include <glibtop/open.h>
 | 
			
		||||
#include <glibtop/close.h>
 | 
			
		||||
#include <glibtop/xmalloc.h>
 | 
			
		||||
 | 
			
		||||
#include <glibtop/parameter.h>
 | 
			
		||||
 | 
			
		||||
#include <glibtop/netload.h>
 | 
			
		||||
 | 
			
		||||
#include <netinet/in.h>
 | 
			
		||||
#include <arpa/inet.h>
 | 
			
		||||
 | 
			
		||||
#ifndef PROFILE_COUNT
 | 
			
		||||
#define PROFILE_COUNT	1
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
int
 | 
			
		||||
main (int argc, char *argv [])
 | 
			
		||||
{
 | 
			
		||||
	glibtop_netload netload;
 | 
			
		||||
	unsigned method, count, port;
 | 
			
		||||
	struct in_addr addr, subnet;
 | 
			
		||||
	char *address_string, *subnet_string;
 | 
			
		||||
	char buffer [BUFSIZ];
 | 
			
		||||
 | 
			
		||||
	count = PROFILE_COUNT;
 | 
			
		||||
 | 
			
		||||
	setlocale (LC_ALL, "");
 | 
			
		||||
	bindtextdomain (PACKAGE, GTOPLOCALEDIR);
 | 
			
		||||
	textdomain (PACKAGE);
 | 
			
		||||
	
 | 
			
		||||
	glibtop_init_r (&glibtop_global_server, 0, GLIBTOP_INIT_NO_OPEN);
 | 
			
		||||
 | 
			
		||||
	glibtop_get_parameter (GLIBTOP_PARAM_METHOD, &method, sizeof (method));
 | 
			
		||||
 | 
			
		||||
	printf ("Method = %d\n", method);
 | 
			
		||||
 | 
			
		||||
	count = glibtop_get_parameter (GLIBTOP_PARAM_COMMAND, buffer, BUFSIZ);
 | 
			
		||||
	buffer [count] = 0;
 | 
			
		||||
 | 
			
		||||
	printf ("Command = '%s'\n", buffer);
 | 
			
		||||
 | 
			
		||||
	count = glibtop_get_parameter (GLIBTOP_PARAM_HOST, buffer, BUFSIZ);
 | 
			
		||||
	buffer [count] = 0;
 | 
			
		||||
 | 
			
		||||
	glibtop_get_parameter (GLIBTOP_PARAM_PORT, &port, sizeof (port));
 | 
			
		||||
 | 
			
		||||
	printf ("Host = '%s' - %u\n\n", buffer, port);
 | 
			
		||||
 | 
			
		||||
	glibtop_init_r (&glibtop_global_server, 0, 0);
 | 
			
		||||
 | 
			
		||||
	if (argc != 2)
 | 
			
		||||
		glibtop_error ("Usage: %s interface", argv [0]);
 | 
			
		||||
	
 | 
			
		||||
	glibtop_get_netload (&netload, argv [1]);
 | 
			
		||||
 | 
			
		||||
	addr.s_addr = netload.address;
 | 
			
		||||
	subnet.s_addr = netload.subnet;
 | 
			
		||||
 | 
			
		||||
	address_string = glibtop_strdup (inet_ntoa (addr));
 | 
			
		||||
	subnet_string  = glibtop_strdup (inet_ntoa (subnet));
 | 
			
		||||
 | 
			
		||||
	printf ("Network Load (0x%08lx):\n\n"
 | 
			
		||||
		"\tInterface Flags:\t0x%08lx\n"
 | 
			
		||||
		"\tAddress:\t\t0x%08lx - %s\n"
 | 
			
		||||
		"\tSubnet:\t\t\t0x%08lx - %s\n\n"
 | 
			
		||||
		"\tMTU:\t\t\t%ld\n"
 | 
			
		||||
		"\tCollisions:\t\t%ld\n\n"
 | 
			
		||||
		"\tPackets In:\t\t%ld\n"
 | 
			
		||||
		"\tPackets Out:\t\t%ld\n"
 | 
			
		||||
		"\tPackets Total:\t\t%ld\n\n"
 | 
			
		||||
		"\tBytes In:\t\t%ld\n"
 | 
			
		||||
		"\tBytes Out:\t\t%ld\n"
 | 
			
		||||
		"\tBytes Total:\t\t%ld\n\n"
 | 
			
		||||
		"\tErrors In:\t\t%ld\n"
 | 
			
		||||
		"\tErrors Out:\t\t%ld\n"
 | 
			
		||||
		"\tErrors Total:\t\t%ld\n\n",
 | 
			
		||||
		(unsigned long) netload.flags,
 | 
			
		||||
		(unsigned long) netload.if_flags,
 | 
			
		||||
		(unsigned long) netload.address, address_string,
 | 
			
		||||
		(unsigned long) netload.subnet,  subnet_string,
 | 
			
		||||
		(unsigned long) netload.mtu,
 | 
			
		||||
		(unsigned long) netload.collisions,
 | 
			
		||||
		(unsigned long) netload.packets_in,
 | 
			
		||||
		(unsigned long) netload.packets_out,
 | 
			
		||||
		(unsigned long) netload.packets_total,
 | 
			
		||||
		(unsigned long) netload.bytes_in,
 | 
			
		||||
		(unsigned long) netload.bytes_out,
 | 
			
		||||
		(unsigned long) netload.bytes_total,
 | 
			
		||||
		(unsigned long) netload.errors_in,
 | 
			
		||||
		(unsigned long) netload.errors_out,
 | 
			
		||||
		(unsigned long) netload.errors_total);
 | 
			
		||||
 | 
			
		||||
	glibtop_free (address_string);
 | 
			
		||||
	glibtop_free (subnet_string);
 | 
			
		||||
 | 
			
		||||
	glibtop_close ();
 | 
			
		||||
 | 
			
		||||
	exit (0);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										164
									
								
								examples/procmap.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										164
									
								
								examples/procmap.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,164 @@
 | 
			
		||||
/* $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 <locale.h>
 | 
			
		||||
 | 
			
		||||
#include <glibtop.h>
 | 
			
		||||
#include <glibtop/open.h>
 | 
			
		||||
#include <glibtop/close.h>
 | 
			
		||||
#include <glibtop/xmalloc.h>
 | 
			
		||||
 | 
			
		||||
#include <glibtop/parameter.h>
 | 
			
		||||
 | 
			
		||||
#include <glibtop/procmap.h>
 | 
			
		||||
 | 
			
		||||
#ifdef GLIBTOP_INODEDB
 | 
			
		||||
#include <glibtop/inodedb.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <sys/resource.h>
 | 
			
		||||
#include <sys/mman.h>
 | 
			
		||||
 | 
			
		||||
#ifndef PROFILE_COUNT
 | 
			
		||||
#define PROFILE_COUNT	1
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
int
 | 
			
		||||
main (int argc, char *argv [])
 | 
			
		||||
{
 | 
			
		||||
#ifdef GLIBTOP_INODEDB
 | 
			
		||||
	glibtop_inodedb *inodedb;
 | 
			
		||||
#endif
 | 
			
		||||
	glibtop_proc_map procmap;
 | 
			
		||||
	glibtop_map_entry *maps;
 | 
			
		||||
	unsigned method, count, port, i;
 | 
			
		||||
	char buffer [BUFSIZ];
 | 
			
		||||
	pid_t pid;
 | 
			
		||||
 | 
			
		||||
	count = PROFILE_COUNT;
 | 
			
		||||
 | 
			
		||||
	setlocale (LC_ALL, "");
 | 
			
		||||
	bindtextdomain (PACKAGE, GTOPLOCALEDIR);
 | 
			
		||||
	textdomain (PACKAGE);
 | 
			
		||||
	
 | 
			
		||||
	glibtop_init_r (&glibtop_global_server, 0, GLIBTOP_INIT_NO_OPEN);
 | 
			
		||||
 | 
			
		||||
	glibtop_get_parameter (GLIBTOP_PARAM_METHOD, &method, sizeof (method));
 | 
			
		||||
 | 
			
		||||
	printf ("Method = %d\n", method);
 | 
			
		||||
 | 
			
		||||
	count = glibtop_get_parameter (GLIBTOP_PARAM_COMMAND, buffer, BUFSIZ);
 | 
			
		||||
	buffer [count] = 0;
 | 
			
		||||
 | 
			
		||||
	printf ("Command = '%s'\n", buffer);
 | 
			
		||||
 | 
			
		||||
	count = glibtop_get_parameter (GLIBTOP_PARAM_HOST, buffer, BUFSIZ);
 | 
			
		||||
	buffer [count] = 0;
 | 
			
		||||
 | 
			
		||||
	glibtop_get_parameter (GLIBTOP_PARAM_PORT, &port, sizeof (port));
 | 
			
		||||
 | 
			
		||||
	printf ("Host = '%s' - %u\n\n", buffer, port);
 | 
			
		||||
 | 
			
		||||
	glibtop_init_r (&glibtop_global_server, 0, 0);
 | 
			
		||||
 | 
			
		||||
	if ((argc != 2) || (sscanf (argv [1], "%d", (int *) &pid) != 1))
 | 
			
		||||
		glibtop_error ("Usage: %s pid", argv [0]);
 | 
			
		||||
 | 
			
		||||
#ifdef GLIBTOP_INODEDB
 | 
			
		||||
	inodedb = glibtop_inodedb_open (0, 0);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	fprintf (stderr, "Getting memory maps for pid %d.\n\n", (int) pid);
 | 
			
		||||
 | 
			
		||||
	maps = glibtop_get_proc_map (&procmap, pid);
 | 
			
		||||
 | 
			
		||||
	for (i = 0; i < procmap.number; i++) {
 | 
			
		||||
		const char *filename = NULL;
 | 
			
		||||
		unsigned device, device_major, device_minor;
 | 
			
		||||
		char perm [5];
 | 
			
		||||
		
 | 
			
		||||
		if (maps [i].flags & (1L << GLIBTOP_MAP_ENTRY_FILENAME))
 | 
			
		||||
			filename = maps [i].filename;
 | 
			
		||||
 | 
			
		||||
#ifdef GLIBTOP_INODEDB
 | 
			
		||||
		if (inodedb && !filename)
 | 
			
		||||
			filename = glibtop_inodedb_lookup
 | 
			
		||||
				(inodedb, maps [i].device, maps [i].inode);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
		perm [0] = (maps [i].perm & GLIBTOP_MAP_PERM_READ) ? 'r' : '-';
 | 
			
		||||
		perm [1] = (maps [i].perm & GLIBTOP_MAP_PERM_WRITE) ? 'w' : '-';
 | 
			
		||||
		perm [2] = (maps [i].perm & GLIBTOP_MAP_PERM_EXECUTE) ? 'x' : '-';
 | 
			
		||||
		perm [3] = (maps [i].perm & GLIBTOP_MAP_PERM_SHARED) ? 's' : '-';
 | 
			
		||||
		perm [4] = (maps [i].perm & GLIBTOP_MAP_PERM_PRIVATE) ? 'p' : '-';
 | 
			
		||||
 | 
			
		||||
		device = (unsigned long) maps [i].device;
 | 
			
		||||
		device_minor = (device & 255);
 | 
			
		||||
		device_major = ((device >> 8) & 255);
 | 
			
		||||
 | 
			
		||||
		if (filename) {
 | 
			
		||||
			char *format;
 | 
			
		||||
 | 
			
		||||
			if (sizeof (void*) == 8)
 | 
			
		||||
				format = "%016lx-%016lx %016lx - "
 | 
			
		||||
					 "%02x:%02x %08lu - %4s - %s\n";
 | 
			
		||||
			else
 | 
			
		||||
				format = "%08lx-%08lx %08lx - "
 | 
			
		||||
					 "%02x:%02x %08lu - %4s - %s\n";
 | 
			
		||||
 | 
			
		||||
			fprintf (stderr, format,
 | 
			
		||||
				 (unsigned long) maps [i].start,
 | 
			
		||||
				 (unsigned long) maps [i].end,
 | 
			
		||||
				 (unsigned long) maps [i].offset,
 | 
			
		||||
				 device_major, device_minor,
 | 
			
		||||
				 (unsigned long) maps [i].inode,
 | 
			
		||||
				 perm, filename);
 | 
			
		||||
		} else {
 | 
			
		||||
			char * format;
 | 
			
		||||
 | 
			
		||||
			if (sizeof (void*) == 8)
 | 
			
		||||
				format = "%016lx-%016lx %016lx - "
 | 
			
		||||
					 "%02x:%02x %08lu - %4s\n";
 | 
			
		||||
			else
 | 
			
		||||
				format = "%08lx-%08lx %08lx - "
 | 
			
		||||
					 "%02x:%02x %08lu - %4s\n";
 | 
			
		||||
 | 
			
		||||
			fprintf (stderr, format,
 | 
			
		||||
				 (unsigned long) maps [i].start,
 | 
			
		||||
				 (unsigned long) maps [i].end,
 | 
			
		||||
				 (unsigned long) maps [i].offset,
 | 
			
		||||
				 device_major, device_minor,
 | 
			
		||||
				 (unsigned long) maps [i].inode,
 | 
			
		||||
				 perm);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (filename && (filename != maps [i].filename))
 | 
			
		||||
			glibtop_free (filename);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	glibtop_free (maps);
 | 
			
		||||
 | 
			
		||||
	glibtop_close ();
 | 
			
		||||
 | 
			
		||||
	exit (0);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										376
									
								
								examples/second.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										376
									
								
								examples/second.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,376 @@
 | 
			
		||||
/* $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 <locale.h>
 | 
			
		||||
 | 
			
		||||
#include <glibtop.h>
 | 
			
		||||
#include <glibtop/open.h>
 | 
			
		||||
#include <glibtop/close.h>
 | 
			
		||||
#include <glibtop/xmalloc.h>
 | 
			
		||||
 | 
			
		||||
#include <glibtop/union.h>
 | 
			
		||||
#include <glibtop/sysdeps.h>
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
output (pid_t pid)
 | 
			
		||||
{
 | 
			
		||||
	glibtop_union data;
 | 
			
		||||
	char *args;
 | 
			
		||||
	unsigned i;
 | 
			
		||||
 | 
			
		||||
#if HAVE_LIBGTOP_SMP
 | 
			
		||||
	unsigned long total;
 | 
			
		||||
	double p_total, p_utime, p_stime;
 | 
			
		||||
	double b_total, b_utime, b_stime;
 | 
			
		||||
	double s_total, s_utime, s_stime;
 | 
			
		||||
	double my_utime, my_stime;
 | 
			
		||||
	int ncpu;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	printf ("\n");
 | 
			
		||||
		
 | 
			
		||||
	glibtop_get_proc_state (&data.proc_state, pid);
 | 
			
		||||
 | 
			
		||||
#if LIBGTOP_VERSION_CODE > 1001000		
 | 
			
		||||
	printf ("Proc_State   PID  %5d (0x%08lx): '%s', %u - "
 | 
			
		||||
		"%u, %u, %u, %u - %u, %u, %u\n", (int) pid,
 | 
			
		||||
		(unsigned long) data.proc_state.flags,
 | 
			
		||||
		data.proc_state.cmd, data.proc_state.state,
 | 
			
		||||
		data.proc_state.uid, data.proc_state.gid,
 | 
			
		||||
		data.proc_state.ruid, data.proc_state.rgid,
 | 
			
		||||
		data.proc_state.has_cpu, data.proc_state.processor,
 | 
			
		||||
		data.proc_state.last_processor);
 | 
			
		||||
#else
 | 
			
		||||
	printf ("Proc_State   PID  %5d (0x%08lx): "
 | 
			
		||||
		"'%s', %c, %lu, %lu\n", (int) pid,
 | 
			
		||||
		(unsigned long) data.proc_state.flags,
 | 
			
		||||
		data.proc_state.cmd, data.proc_state.state,
 | 
			
		||||
		(unsigned long) data.proc_state.uid,
 | 
			
		||||
		(unsigned long) data.proc_state.gid);
 | 
			
		||||
#endif
 | 
			
		||||
		
 | 
			
		||||
	glibtop_get_proc_uid (&data.proc_uid, pid);
 | 
			
		||||
	
 | 
			
		||||
#if LIBGTOP_VERSION_CODE > 1001000	
 | 
			
		||||
	printf ("Proc_Uid     PID  %5d (0x%08lx): "
 | 
			
		||||
		"%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d - %d",
 | 
			
		||||
		(int) pid, (unsigned long) data.proc_uid.flags,
 | 
			
		||||
		data.proc_uid.uid, data.proc_uid.euid,
 | 
			
		||||
		data.proc_uid.gid, data.proc_uid.egid,
 | 
			
		||||
		data.proc_uid.suid, data.proc_uid.sgid,
 | 
			
		||||
		data.proc_uid.fsuid, data.proc_uid.fsgid,
 | 
			
		||||
		data.proc_uid.pid, data.proc_uid.ppid,
 | 
			
		||||
		data.proc_uid.pgrp, data.proc_uid.session,
 | 
			
		||||
		data.proc_uid.tty, data.proc_uid.tpgid,
 | 
			
		||||
		data.proc_uid.priority, data.proc_uid.nice,
 | 
			
		||||
		data.proc_uid.ngroups);
 | 
			
		||||
		
 | 
			
		||||
	if (data.proc_uid.ngroups) {
 | 
			
		||||
		for (i = 0; i < data.proc_uid.ngroups; i++) {
 | 
			
		||||
			if (i)
 | 
			
		||||
				printf (" %d", data.proc_uid.groups [i]);
 | 
			
		||||
			else
 | 
			
		||||
				printf (" (%d", data.proc_uid.groups [i]);
 | 
			
		||||
		}
 | 
			
		||||
		printf (")");
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	printf ("\n");
 | 
			
		||||
#else
 | 
			
		||||
	printf ("Proc_Uid     PID  %5d (0x%08lx): "
 | 
			
		||||
		"%d %d %d %d %d %d %d %d %d %d %d %d\n", (int) pid,
 | 
			
		||||
		(unsigned long) data.proc_uid.flags,
 | 
			
		||||
		data.proc_uid.uid, data.proc_uid.euid,
 | 
			
		||||
		data.proc_uid.gid, data.proc_uid.egid,
 | 
			
		||||
		data.proc_uid.pid, data.proc_uid.ppid,
 | 
			
		||||
		data.proc_uid.pgrp, data.proc_uid.session,
 | 
			
		||||
		data.proc_uid.tty, data.proc_uid.tpgid,
 | 
			
		||||
		data.proc_uid.priority, data.proc_uid.nice);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	glibtop_get_proc_mem (&data.proc_mem, pid);
 | 
			
		||||
		
 | 
			
		||||
	printf ("Proc_Mem     PID  %5d (0x%08lx): "
 | 
			
		||||
		"%lu %lu %lu %lu %lu %lu\n", (int) pid,
 | 
			
		||||
		(unsigned long) data.proc_mem.flags,
 | 
			
		||||
		(unsigned long) data.proc_mem.size,
 | 
			
		||||
		(unsigned long) data.proc_mem.vsize,
 | 
			
		||||
		(unsigned long) data.proc_mem.resident,
 | 
			
		||||
		(unsigned long) data.proc_mem.share,
 | 
			
		||||
		(unsigned long) data.proc_mem.rss,
 | 
			
		||||
		(unsigned long) data.proc_mem.rss_rlim);
 | 
			
		||||
		
 | 
			
		||||
	glibtop_get_proc_segment (&data.proc_segment, pid);
 | 
			
		||||
 | 
			
		||||
#if LIBGTOP_VERSION_CODE > 1001000
 | 
			
		||||
	printf ("Proc_Segment PID  %5d (0x%08lx): "
 | 
			
		||||
		"%lu %lu %lu %lu %lu 0x%lx 0x%lx 0x%lx "
 | 
			
		||||
		"0x%lx 0x%lx 0x%lx 0x%lx 0x%lx "
 | 
			
		||||
		"0x%lx 0x%lx 0x%lx 0x%lx\n", (int) pid,
 | 
			
		||||
		(unsigned long) data.proc_segment.flags,
 | 
			
		||||
		(unsigned long) data.proc_segment.text_rss,
 | 
			
		||||
		(unsigned long) data.proc_segment.shlib_rss,
 | 
			
		||||
		(unsigned long) data.proc_segment.data_rss,
 | 
			
		||||
		(unsigned long) data.proc_segment.stack_rss,
 | 
			
		||||
		(unsigned long) data.proc_segment.dirty_size,
 | 
			
		||||
		(unsigned long) data.proc_segment.start_code,
 | 
			
		||||
		(unsigned long) data.proc_segment.end_code,
 | 
			
		||||
		(unsigned long) data.proc_segment.start_data,
 | 
			
		||||
		(unsigned long) data.proc_segment.end_data,
 | 
			
		||||
		(unsigned long) data.proc_segment.start_brk,
 | 
			
		||||
		(unsigned long) data.proc_segment.end_brk,
 | 
			
		||||
		(unsigned long) data.proc_segment.start_stack,
 | 
			
		||||
		(unsigned long) data.proc_segment.start_mmap,
 | 
			
		||||
		(unsigned long) data.proc_segment.arg_start,
 | 
			
		||||
		(unsigned long) data.proc_segment.arg_end,
 | 
			
		||||
		(unsigned long) data.proc_segment.env_start,
 | 
			
		||||
		(unsigned long) data.proc_segment.env_end);
 | 
			
		||||
#else
 | 
			
		||||
	printf ("Proc_Segment PID  %5d (0x%08lx): "
 | 
			
		||||
		"%lu %lu %lu %lu %lu %lu %lu %lu\n", (int) pid,
 | 
			
		||||
		(unsigned long) data.proc_segment.flags,
 | 
			
		||||
		(unsigned long) data.proc_segment.text_rss,
 | 
			
		||||
		(unsigned long) data.proc_segment.shlib_rss,
 | 
			
		||||
		(unsigned long) data.proc_segment.data_rss,
 | 
			
		||||
		(unsigned long) data.proc_segment.stack_rss,
 | 
			
		||||
		(unsigned long) data.proc_segment.dirty_size,
 | 
			
		||||
		(unsigned long) data.proc_segment.start_code,
 | 
			
		||||
		(unsigned long) data.proc_segment.end_code,
 | 
			
		||||
		(unsigned long) data.proc_segment.start_stack);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	glibtop_get_proc_time (&data.proc_time, pid);
 | 
			
		||||
		
 | 
			
		||||
	printf ("Proc_Time    PID  %5d (0x%08lx): "
 | 
			
		||||
		"%lu %lu %lu %lu %lu %lu %lu %lu %lu\n", (int) pid,
 | 
			
		||||
		(unsigned long) data.proc_time.flags,
 | 
			
		||||
		(unsigned long) data.proc_time.start_time,
 | 
			
		||||
		(unsigned long) data.proc_time.rtime,
 | 
			
		||||
		(unsigned long) data.proc_time.utime,
 | 
			
		||||
		(unsigned long) data.proc_time.stime,
 | 
			
		||||
		(unsigned long) data.proc_time.cutime,
 | 
			
		||||
		(unsigned long) data.proc_time.cstime,
 | 
			
		||||
		(unsigned long) data.proc_time.timeout,
 | 
			
		||||
		(unsigned long) data.proc_time.it_real_value,
 | 
			
		||||
		(unsigned long) data.proc_time.frequency);
 | 
			
		||||
 | 
			
		||||
	glibtop_get_proc_signal (&data.proc_signal, pid);
 | 
			
		||||
	
 | 
			
		||||
#if LIBGTOP_VERSION_CODE > 1001000
 | 
			
		||||
	printf ("Proc_Signal  PID  %5d (0x%08lx): "
 | 
			
		||||
		"%lx %lx %lx %lx %lx %lx %lx %lx\n", (int) pid,
 | 
			
		||||
		(unsigned long) data.proc_signal.flags,
 | 
			
		||||
		(unsigned long) data.proc_signal.signal [0],
 | 
			
		||||
		(unsigned long) data.proc_signal.signal [1],
 | 
			
		||||
		(unsigned long) data.proc_signal.blocked [0],
 | 
			
		||||
		(unsigned long) data.proc_signal.blocked [1],
 | 
			
		||||
		(unsigned long) data.proc_signal.sigignore [0],
 | 
			
		||||
		(unsigned long) data.proc_signal.sigignore [1],
 | 
			
		||||
		(unsigned long) data.proc_signal.sigcatch [0],
 | 
			
		||||
		(unsigned long) data.proc_signal.sigcatch [1]);
 | 
			
		||||
#else
 | 
			
		||||
	printf ("Proc_Signal  PID  %5d (0x%08lx): "
 | 
			
		||||
		"%lu %lu %lu %lu\n", (int) pid,
 | 
			
		||||
		(unsigned long) data.proc_signal.flags,
 | 
			
		||||
		(unsigned long) data.proc_signal.signal,
 | 
			
		||||
		(unsigned long) data.proc_signal.blocked,
 | 
			
		||||
		(unsigned long) data.proc_signal.sigignore,
 | 
			
		||||
		(unsigned long) data.proc_signal.sigcatch);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	glibtop_get_proc_kernel (&data.proc_kernel, pid);
 | 
			
		||||
 | 
			
		||||
	printf ("Proc_Kernel  PID  %5d (0x%08lx): "
 | 
			
		||||
		"%lu %lu %lu %lu %lu 0x%lx 0x%lx 0x%lx (%s)\n", (int) pid,
 | 
			
		||||
		(unsigned long) data.proc_kernel.flags,
 | 
			
		||||
		(unsigned long) data.proc_kernel.k_flags,
 | 
			
		||||
		(unsigned long) data.proc_kernel.min_flt,
 | 
			
		||||
		(unsigned long) data.proc_kernel.maj_flt,
 | 
			
		||||
		(unsigned long) data.proc_kernel.cmin_flt,
 | 
			
		||||
		(unsigned long) data.proc_kernel.cmaj_flt,
 | 
			
		||||
		(unsigned long) data.proc_kernel.kstk_esp,
 | 
			
		||||
		(unsigned long) data.proc_kernel.kstk_eip,
 | 
			
		||||
		(unsigned long) data.proc_kernel.nwchan,
 | 
			
		||||
		data.proc_kernel.wchan);
 | 
			
		||||
 | 
			
		||||
	printf ("\n");
 | 
			
		||||
 | 
			
		||||
	args = glibtop_get_proc_args (&data.proc_args, pid, 0);
 | 
			
		||||
 | 
			
		||||
	for (i = 0; i < data.proc_args.size; i++) {
 | 
			
		||||
		if (args [i]) continue;
 | 
			
		||||
		args [i] = '|';
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	printf ("Proc_Args    PID  %5d (0x%08lx): %lu - '%s'\n", (int) pid,
 | 
			
		||||
		(unsigned long) data.proc_args.flags,
 | 
			
		||||
		(unsigned long) data.proc_args.size,
 | 
			
		||||
		args ? args : "");
 | 
			
		||||
 | 
			
		||||
	glibtop_free (args);
 | 
			
		||||
 | 
			
		||||
	printf ("\n");
 | 
			
		||||
 | 
			
		||||
#if HAVE_LIBGTOP_SMP
 | 
			
		||||
	ncpu = glibtop_global_server->ncpu;
 | 
			
		||||
 | 
			
		||||
	glibtop_get_proc_time (&data.proc_time, pid);
 | 
			
		||||
		
 | 
			
		||||
	total = (unsigned long) data.proc_time.utime +
 | 
			
		||||
		(unsigned long) data.proc_time.stime;
 | 
			
		||||
 | 
			
		||||
	p_total = total ? (double) total : 1.0;
 | 
			
		||||
 | 
			
		||||
	p_utime = (double) data.proc_time.utime * 100.0 / p_total;
 | 
			
		||||
	p_stime = (double) data.proc_time.stime * 100.0 / p_total;
 | 
			
		||||
 | 
			
		||||
	b_total = p_total / ncpu;
 | 
			
		||||
	b_utime = (double) data.proc_time.utime / ncpu;
 | 
			
		||||
	b_stime = (double) data.proc_time.stime / ncpu;
 | 
			
		||||
 | 
			
		||||
	s_total = 0.0; s_utime = 0.0; s_stime = 0.0;
 | 
			
		||||
 | 
			
		||||
	printf ("Proc_Time    PID  %5d (0x%08lx): %12lu   %12lu   %12lu\n", (int) pid,
 | 
			
		||||
		(unsigned long) data.proc_time.flags, total,
 | 
			
		||||
		(unsigned long) data.proc_time.utime,
 | 
			
		||||
		(unsigned long) data.proc_time.stime);
 | 
			
		||||
 | 
			
		||||
	for (i = 0; i < ncpu; i++) {
 | 
			
		||||
		unsigned long this_total;
 | 
			
		||||
 | 
			
		||||
		this_total = (unsigned long) data.proc_time.xcpu_utime [i] +
 | 
			
		||||
			(unsigned long) data.proc_time.xcpu_stime [i];
 | 
			
		||||
 | 
			
		||||
		printf ("CPU %3d      PID  %5d (0x%08lx): %12lu   %12lu   %12lu\n", i,
 | 
			
		||||
			(int) pid, (unsigned long) data.proc_time.flags, this_total,
 | 
			
		||||
			(unsigned long) data.proc_time.xcpu_utime [i],
 | 
			
		||||
			(unsigned long) data.proc_time.xcpu_stime [i]);
 | 
			
		||||
 | 
			
		||||
		s_total += fabs (((double) this_total) - b_total);
 | 
			
		||||
		s_utime += fabs (((double) data.proc_time.xcpu_utime [i]) - b_utime);
 | 
			
		||||
		s_stime += fabs (((double) data.proc_time.xcpu_stime [i]) - b_stime);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	printf ("\n");
 | 
			
		||||
 | 
			
		||||
	printf ("Proc_Time    PID  %5d (0x%08lx): %12.3f   %12.3f   %12.3f\n", (int) pid,
 | 
			
		||||
		(unsigned long) data.proc_time.flags, 100.0, p_utime, p_stime);
 | 
			
		||||
 | 
			
		||||
	for (i = 0; i < ncpu; i++) {
 | 
			
		||||
		double this_p_total, this_p_utime, this_p_stime;
 | 
			
		||||
		unsigned long this_total;
 | 
			
		||||
 | 
			
		||||
		this_total = (unsigned long) data.proc_time.xcpu_utime [i] +
 | 
			
		||||
			(unsigned long) data.proc_time.xcpu_stime [i];
 | 
			
		||||
 | 
			
		||||
		this_p_total = (double) this_total * 100.0 / p_total;
 | 
			
		||||
 | 
			
		||||
		this_p_utime = (double) data.proc_time.xcpu_utime [i] * 100.0 / p_total;
 | 
			
		||||
		this_p_stime = (double) data.proc_time.xcpu_stime [i] * 100.0 / p_total;
 | 
			
		||||
 | 
			
		||||
		printf ("CPU %3d      PID  %5d (0x%08lx): %12.3f   %12.3f   %12.3f\n", i,
 | 
			
		||||
			(int) pid, (unsigned long) data.proc_time.flags,
 | 
			
		||||
			this_p_total, this_p_utime, this_p_stime);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	printf ("\n");
 | 
			
		||||
 | 
			
		||||
	my_utime = (unsigned long) data.proc_time.utime ?
 | 
			
		||||
		(double) data.proc_time.utime : 1.0;
 | 
			
		||||
	my_stime = (unsigned long) data.proc_time.stime ?
 | 
			
		||||
		(double) data.proc_time.stime : 1.0;
 | 
			
		||||
 | 
			
		||||
	printf ("SPIN: %31s %12.3f   %12.3f   %12.3f\n", "", s_total * 100.0 / p_total,
 | 
			
		||||
		s_utime * 100.0 / my_utime, s_stime * 100.0 / my_stime);
 | 
			
		||||
 | 
			
		||||
	printf ("\n");
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int
 | 
			
		||||
main (int argc, char *argv [])
 | 
			
		||||
{
 | 
			
		||||
	glibtop_proclist proclist;
 | 
			
		||||
	glibtop_sysdeps sysdeps;
 | 
			
		||||
	unsigned *ptr, pid, i;
 | 
			
		||||
 | 
			
		||||
	setlocale (LC_ALL, "");
 | 
			
		||||
	bindtextdomain (PACKAGE, GTOPLOCALEDIR);
 | 
			
		||||
	textdomain (PACKAGE);
 | 
			
		||||
	
 | 
			
		||||
	glibtop_init ();
 | 
			
		||||
 | 
			
		||||
	glibtop_get_sysdeps (&sysdeps);
 | 
			
		||||
 | 
			
		||||
	printf ("Sysdeps      (0x%08lx): %lu, %lu, %lu, %lu, %lu, "
 | 
			
		||||
		"%lu, %lu, %lu, %lu, %lu, %lu, %lu, %lu, %lu, %lu, %lu\n",
 | 
			
		||||
		(unsigned long) sysdeps.flags,
 | 
			
		||||
		(unsigned long) sysdeps.cpu,
 | 
			
		||||
		(unsigned long) sysdeps.mem,
 | 
			
		||||
		(unsigned long) sysdeps.swap,
 | 
			
		||||
		(unsigned long) sysdeps.uptime,
 | 
			
		||||
		(unsigned long) sysdeps.loadavg,
 | 
			
		||||
		(unsigned long) sysdeps.shm_limits,
 | 
			
		||||
		(unsigned long) sysdeps.msg_limits,
 | 
			
		||||
		(unsigned long) sysdeps.sem_limits,
 | 
			
		||||
		(unsigned long) sysdeps.proclist,
 | 
			
		||||
		(unsigned long) sysdeps.proc_state,
 | 
			
		||||
		(unsigned long) sysdeps.proc_uid,
 | 
			
		||||
		(unsigned long) sysdeps.proc_mem,
 | 
			
		||||
		(unsigned long) sysdeps.proc_time,
 | 
			
		||||
		(unsigned long) sysdeps.proc_signal,
 | 
			
		||||
		(unsigned long) sysdeps.proc_kernel,
 | 
			
		||||
		(unsigned long) sysdeps.proc_segment);
 | 
			
		||||
 | 
			
		||||
	if ((argc == 2) && (sscanf (argv [1], "%d", &pid) == 1)) {
 | 
			
		||||
		output (pid);
 | 
			
		||||
 | 
			
		||||
		exit (0);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	printf ("\n");
 | 
			
		||||
 | 
			
		||||
	ptr = glibtop_get_proclist (&proclist, 0, 0);
 | 
			
		||||
 | 
			
		||||
	printf ("Proclist     (0x%08lx): %lu, %lu, %lu\n",
 | 
			
		||||
		(unsigned long) proclist.flags,
 | 
			
		||||
		(unsigned long) proclist.number,
 | 
			
		||||
		(unsigned long) proclist.size,
 | 
			
		||||
		(unsigned long) proclist.total);
 | 
			
		||||
 | 
			
		||||
	if (!ptr) exit (1);
 | 
			
		||||
 | 
			
		||||
	for (i = 0; i < proclist.number; i++) {
 | 
			
		||||
 | 
			
		||||
		pid = ptr [i];
 | 
			
		||||
		
 | 
			
		||||
		output (pid);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	glibtop_free (ptr);
 | 
			
		||||
 | 
			
		||||
	exit (0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										124
									
								
								examples/smp.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										124
									
								
								examples/smp.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,124 @@
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright (C) 1998-99 Martin Baulig
 | 
			
		||||
   This file is part of LibGTop 1.0.
 | 
			
		||||
 | 
			
		||||
   Contributed by Martin Baulig <martin@home-of-linux.org>, September 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 <locale.h>
 | 
			
		||||
 | 
			
		||||
#include <glibtop.h>
 | 
			
		||||
#include <glibtop/cpu.h>
 | 
			
		||||
#include <glibtop/xmalloc.h>
 | 
			
		||||
 | 
			
		||||
int
 | 
			
		||||
main (int argc, char *argv [])
 | 
			
		||||
{
 | 
			
		||||
	glibtop_cpu cpu;
 | 
			
		||||
	unsigned long frequency;
 | 
			
		||||
	double total, user, nice, sys, idle;
 | 
			
		||||
	double b_total, b_user, b_nice, b_sys, b_idle;
 | 
			
		||||
	double s_total, s_user, s_nice, s_sys, s_idle;
 | 
			
		||||
	char separator [BUFSIZ], buffer [BUFSIZ];
 | 
			
		||||
	int ncpu, i;
 | 
			
		||||
 | 
			
		||||
	setlocale (LC_ALL, "");
 | 
			
		||||
	bindtextdomain (PACKAGE, GTOPLOCALEDIR);
 | 
			
		||||
	textdomain (PACKAGE);
 | 
			
		||||
	
 | 
			
		||||
	glibtop_get_cpu (&cpu);
 | 
			
		||||
 | 
			
		||||
	ncpu = glibtop_global_server->ncpu ? glibtop_global_server->ncpu : 1;
 | 
			
		||||
 | 
			
		||||
	frequency = (unsigned long) cpu.frequency;
 | 
			
		||||
 | 
			
		||||
	total = ((unsigned long) cpu.total) ? ((double) cpu.total) : 1.0;
 | 
			
		||||
	user  = ((unsigned long) cpu.user)  ? ((double) cpu.user)  : 1.0;
 | 
			
		||||
	nice  = ((unsigned long) cpu.nice)  ? ((double) cpu.nice)  : 1.0;
 | 
			
		||||
	sys   = ((unsigned long) cpu.sys)   ? ((double) cpu.sys)   : 1.0;
 | 
			
		||||
	idle  = ((unsigned long) cpu.idle)  ? ((double) cpu.idle)  : 1.0;
 | 
			
		||||
 | 
			
		||||
	s_total = s_user = s_nice = s_sys = s_idle = 0.0;
 | 
			
		||||
 | 
			
		||||
	b_total = total / ncpu;
 | 
			
		||||
	b_user  = user  / ncpu;
 | 
			
		||||
	b_nice  = nice  / ncpu;
 | 
			
		||||
	b_sys   = sys   / ncpu;
 | 
			
		||||
	b_idle  = idle  / ncpu;
 | 
			
		||||
 | 
			
		||||
	memset (separator, '-', 91);
 | 
			
		||||
	separator [92] = '\0';
 | 
			
		||||
 | 
			
		||||
	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);
 | 
			
		||||
 | 
			
		||||
	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,
 | 
			
		||||
			(unsigned long) cpu.flags,
 | 
			
		||||
			(unsigned long) cpu.xcpu_total [i],
 | 
			
		||||
			(unsigned long) cpu.xcpu_user  [i],
 | 
			
		||||
			(unsigned long) cpu.xcpu_nice  [i],
 | 
			
		||||
			(unsigned long) cpu.xcpu_sys   [i],
 | 
			
		||||
			(unsigned long) cpu.xcpu_idle  [i]);
 | 
			
		||||
 | 
			
		||||
		s_total += fabs (((double) cpu.xcpu_total [i]) - b_total);
 | 
			
		||||
		s_user  += fabs (((double) cpu.xcpu_user  [i]) - b_user);
 | 
			
		||||
		s_nice  += fabs (((double) cpu.xcpu_nice  [i]) - b_nice);
 | 
			
		||||
		s_sys   += fabs (((double) cpu.xcpu_sys   [i]) - b_sys);
 | 
			
		||||
		s_idle  += fabs (((double) cpu.xcpu_idle  [i]) - b_idle);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	printf ("%s\n\n\n", 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"),
 | 
			
		||||
		(unsigned long) cpu.flags, (double) total * 100.0 / total,
 | 
			
		||||
		(double) user  * 100.0 / total,
 | 
			
		||||
		(double) nice  * 100.0 / total,
 | 
			
		||||
		(double) sys   * 100.0 / total,
 | 
			
		||||
		(double) idle  * 100.0 / total);
 | 
			
		||||
 | 
			
		||||
	for (i = 0; i < glibtop_global_server->ncpu; i++) {
 | 
			
		||||
		double p_total, p_user, p_nice, p_sys, p_idle;
 | 
			
		||||
 | 
			
		||||
		p_total = ((double) cpu.xcpu_total [i]) * 100.0 / total;
 | 
			
		||||
		p_user  = ((double) cpu.xcpu_user  [i]) * 100.0 / user;
 | 
			
		||||
		p_nice  = ((double) cpu.xcpu_nice  [i]) * 100.0 / nice;
 | 
			
		||||
		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"),
 | 
			
		||||
			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,
 | 
			
		||||
		s_nice * 100.0 / nice, s_sys * 100.0 / sys, s_idle * 100.0 / idle);
 | 
			
		||||
 | 
			
		||||
	exit (0);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										154
									
								
								examples/sysdeps.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										154
									
								
								examples/sysdeps.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,154 @@
 | 
			
		||||
/* $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 <locale.h>
 | 
			
		||||
 | 
			
		||||
#include <glibtop.h>
 | 
			
		||||
#include <glibtop/open.h>
 | 
			
		||||
#include <glibtop/close.h>
 | 
			
		||||
#include <glibtop/xmalloc.h>
 | 
			
		||||
 | 
			
		||||
#include <glibtop/parameter.h>
 | 
			
		||||
 | 
			
		||||
#ifndef PROFILE_COUNT
 | 
			
		||||
#define PROFILE_COUNT	1
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
int
 | 
			
		||||
main (int argc, char *argv [])
 | 
			
		||||
{
 | 
			
		||||
	glibtop_sysdeps sysdeps;
 | 
			
		||||
	unsigned method, count, port;
 | 
			
		||||
	char buffer [BUFSIZ];
 | 
			
		||||
 | 
			
		||||
	count = PROFILE_COUNT;
 | 
			
		||||
 | 
			
		||||
	setlocale (LC_ALL, "");
 | 
			
		||||
	bindtextdomain (PACKAGE, GTOPLOCALEDIR);
 | 
			
		||||
	textdomain (PACKAGE);
 | 
			
		||||
	
 | 
			
		||||
	glibtop_init_r (&glibtop_global_server, 0, GLIBTOP_INIT_NO_OPEN);
 | 
			
		||||
 | 
			
		||||
	glibtop_get_parameter (GLIBTOP_PARAM_METHOD, &method, sizeof (method));
 | 
			
		||||
 | 
			
		||||
	printf ("Method = %d\n", method);
 | 
			
		||||
 | 
			
		||||
	count = glibtop_get_parameter (GLIBTOP_PARAM_COMMAND, buffer, BUFSIZ);
 | 
			
		||||
	buffer [count] = 0;
 | 
			
		||||
 | 
			
		||||
	printf ("Command = '%s'\n", buffer);
 | 
			
		||||
 | 
			
		||||
	count = glibtop_get_parameter (GLIBTOP_PARAM_HOST, buffer, BUFSIZ);
 | 
			
		||||
	buffer [count] = 0;
 | 
			
		||||
 | 
			
		||||
	glibtop_get_parameter (GLIBTOP_PARAM_PORT, &port, sizeof (port));
 | 
			
		||||
 | 
			
		||||
	printf ("Host = '%s' - %u\n\n", buffer, port);
 | 
			
		||||
 | 
			
		||||
	glibtop_init_r (&glibtop_global_server, 0, 0);
 | 
			
		||||
 | 
			
		||||
	glibtop_get_sysdeps (&sysdeps);
 | 
			
		||||
 | 
			
		||||
#define FEATURE_CHECK(f) ((sysdeps.features & (1L << GLIBTOP_SYSDEPS_##f##)) ? 1 : 0)
 | 
			
		||||
 | 
			
		||||
	printf ("Sysdeps (0x%08lx):\n\n"
 | 
			
		||||
		"\tfeatures:\t\t0x%08lx\n\n"
 | 
			
		||||
#if LIBGTOP_VERSION_CODE > 1001000
 | 
			
		||||
		"\tpointer_size:\t\t0x%08lx\n\n"
 | 
			
		||||
#endif
 | 
			
		||||
		"\tcpu:\t\t%d\t0x%08lx\n"
 | 
			
		||||
		"\tmem:\t\t%d\t0x%08lx\n"
 | 
			
		||||
		"\tswap:\t\t%d\t0x%08lx\n\n"
 | 
			
		||||
		"\tuptime:\t\t%d\t0x%08lx\n"
 | 
			
		||||
		"\tloadavg:\t%d\t0x%08lx\n\n"
 | 
			
		||||
		"\tshm_limits:\t%d\t0x%08lx\n"
 | 
			
		||||
		"\tmsg_limits:\t%d\t0x%08lx\n"
 | 
			
		||||
		"\tsem_limits:\t%d\t0x%08lx\n\n"
 | 
			
		||||
		"\tproclist:\t%d\t0x%08lx\n\n"
 | 
			
		||||
		"\tproc_state:\t%d\t0x%08lx\n"
 | 
			
		||||
		"\tproc_uid:\t%d\t0x%08lx\n"
 | 
			
		||||
		"\tproc_mem:\t%d\t0x%08lx\n"
 | 
			
		||||
		"\tproc_time:\t%d\t0x%08lx\n"
 | 
			
		||||
		"\tproc_signal:\t%d\t0x%08lx\n"
 | 
			
		||||
		"\tproc_kernel:\t%d\t0x%08lx\n"
 | 
			
		||||
		"\tproc_segment:\t%d\t0x%08lx\n\n"
 | 
			
		||||
		"\tproc_args:\t%d\t0x%08lx\n"
 | 
			
		||||
		"\tproc_map:\t%d\t0x%08lx\n\n"
 | 
			
		||||
		"\tmountlist:\t%d\t0x%08lx\n"
 | 
			
		||||
		"\tfsusage:\t%d\t0x%08lx\n\n"
 | 
			
		||||
		"\tnetload:\t%d\t0x%08lx\n"
 | 
			
		||||
		"\tppp:\t\t%d\t0x%08lx\n\n",
 | 
			
		||||
		(unsigned long) sysdeps.flags,
 | 
			
		||||
		(unsigned long) sysdeps.features,
 | 
			
		||||
#if LIBGTOP_VERSION_CODE > 1001000
 | 
			
		||||
		(unsigned long) sysdeps.pointer_size,
 | 
			
		||||
#endif
 | 
			
		||||
		FEATURE_CHECK(CPU),
 | 
			
		||||
		(unsigned long) sysdeps.cpu,
 | 
			
		||||
		FEATURE_CHECK(MEM),
 | 
			
		||||
		(unsigned long) sysdeps.mem,
 | 
			
		||||
		FEATURE_CHECK(SWAP),
 | 
			
		||||
		(unsigned long) sysdeps.swap,
 | 
			
		||||
		FEATURE_CHECK(UPTIME),
 | 
			
		||||
		(unsigned long) sysdeps.uptime,
 | 
			
		||||
		FEATURE_CHECK(LOADAVG),
 | 
			
		||||
		(unsigned long) sysdeps.loadavg,
 | 
			
		||||
		FEATURE_CHECK(SHM_LIMITS),
 | 
			
		||||
		(unsigned long) sysdeps.shm_limits,
 | 
			
		||||
		FEATURE_CHECK(MSG_LIMITS),
 | 
			
		||||
		(unsigned long) sysdeps.msg_limits,
 | 
			
		||||
		FEATURE_CHECK(SEM_LIMITS),
 | 
			
		||||
		(unsigned long) sysdeps.sem_limits,
 | 
			
		||||
		FEATURE_CHECK(PROCLIST),
 | 
			
		||||
		(unsigned long) sysdeps.proclist,
 | 
			
		||||
		FEATURE_CHECK(PROC_STATE),
 | 
			
		||||
		(unsigned long) sysdeps.proc_state,
 | 
			
		||||
		FEATURE_CHECK(PROC_UID),
 | 
			
		||||
		(unsigned long) sysdeps.proc_uid,
 | 
			
		||||
		FEATURE_CHECK(PROC_MEM),
 | 
			
		||||
		(unsigned long) sysdeps.proc_mem,
 | 
			
		||||
		FEATURE_CHECK(PROC_TIME),
 | 
			
		||||
		(unsigned long) sysdeps.proc_time,
 | 
			
		||||
		FEATURE_CHECK(PROC_SIGNAL),
 | 
			
		||||
		(unsigned long) sysdeps.proc_signal,
 | 
			
		||||
		FEATURE_CHECK(PROC_KERNEL),
 | 
			
		||||
		(unsigned long) sysdeps.proc_kernel,
 | 
			
		||||
		FEATURE_CHECK(PROC_SEGMENT),
 | 
			
		||||
		(unsigned long) sysdeps.proc_segment,
 | 
			
		||||
		FEATURE_CHECK(PROC_ARGS),
 | 
			
		||||
		(unsigned long) sysdeps.proc_args,
 | 
			
		||||
		FEATURE_CHECK(PROC_MAP),
 | 
			
		||||
		(unsigned long) sysdeps.proc_map,
 | 
			
		||||
		FEATURE_CHECK(MOUNTLIST),
 | 
			
		||||
		(unsigned long) sysdeps.mountlist,
 | 
			
		||||
		FEATURE_CHECK(FSUSAGE),
 | 
			
		||||
		(unsigned long) sysdeps.fsusage,
 | 
			
		||||
		FEATURE_CHECK(NETLOAD),
 | 
			
		||||
		(unsigned long) sysdeps.netload,
 | 
			
		||||
		FEATURE_CHECK(PPP),
 | 
			
		||||
		(unsigned long) sysdeps.ppp);
 | 
			
		||||
 | 
			
		||||
	glibtop_close ();
 | 
			
		||||
 | 
			
		||||
	exit (0);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										80
									
								
								examples/test.scm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										80
									
								
								examples/test.scm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,80 @@
 | 
			
		||||
(display (glibtop-names-sysdeps)) (newline)
 | 
			
		||||
(display (glibtop-labels-sysdeps)) (newline)
 | 
			
		||||
(display (glibtop-descriptions-sysdeps)) (newline)
 | 
			
		||||
(display (glibtop-types-sysdeps)) (newline)
 | 
			
		||||
 | 
			
		||||
(newline)
 | 
			
		||||
 | 
			
		||||
(display (glibtop-names-cpu)) (newline)
 | 
			
		||||
(display (glibtop-names-mem)) (newline)
 | 
			
		||||
(display (glibtop-names-swap)) (newline)
 | 
			
		||||
(display (glibtop-names-uptime)) (newline)
 | 
			
		||||
(display (glibtop-names-loadavg)) (newline)
 | 
			
		||||
(display (glibtop-names-shm_limits)) (newline)
 | 
			
		||||
(display (glibtop-names-msg_limits)) (newline)
 | 
			
		||||
(display (glibtop-names-sem_limits)) (newline)
 | 
			
		||||
(display (glibtop-names-proclist)) (newline)
 | 
			
		||||
(display (glibtop-names-proc_state)) (newline)
 | 
			
		||||
(display (glibtop-names-proc_uid)) (newline)
 | 
			
		||||
(display (glibtop-names-proc_mem)) (newline)
 | 
			
		||||
(display (glibtop-names-proc_time)) (newline)
 | 
			
		||||
(display (glibtop-names-proc_signal)) (newline)
 | 
			
		||||
(display (glibtop-names-proc_kernel)) (newline)
 | 
			
		||||
(display (glibtop-names-proc_segment)) (newline)
 | 
			
		||||
 | 
			
		||||
(newline)
 | 
			
		||||
 | 
			
		||||
(display (glibtop-labels-cpu)) (newline)
 | 
			
		||||
(display (glibtop-labels-mem)) (newline)
 | 
			
		||||
(display (glibtop-labels-swap)) (newline)
 | 
			
		||||
(display (glibtop-labels-uptime)) (newline)
 | 
			
		||||
(display (glibtop-labels-loadavg)) (newline)
 | 
			
		||||
(display (glibtop-labels-shm_limits)) (newline)
 | 
			
		||||
(display (glibtop-labels-msg_limits)) (newline)
 | 
			
		||||
(display (glibtop-labels-sem_limits)) (newline)
 | 
			
		||||
(display (glibtop-labels-proclist)) (newline)
 | 
			
		||||
(display (glibtop-labels-proc_state)) (newline)
 | 
			
		||||
(display (glibtop-labels-proc_uid)) (newline)
 | 
			
		||||
(display (glibtop-labels-proc_mem)) (newline)
 | 
			
		||||
(display (glibtop-labels-proc_time)) (newline)
 | 
			
		||||
(display (glibtop-labels-proc_signal)) (newline)
 | 
			
		||||
(display (glibtop-labels-proc_kernel)) (newline)
 | 
			
		||||
(display (glibtop-labels-proc_segment)) (newline)
 | 
			
		||||
 | 
			
		||||
(newline)
 | 
			
		||||
 | 
			
		||||
(display (glibtop-descriptions-cpu)) (newline)
 | 
			
		||||
(display (glibtop-descriptions-mem)) (newline)
 | 
			
		||||
(display (glibtop-descriptions-swap)) (newline)
 | 
			
		||||
(display (glibtop-descriptions-uptime)) (newline)
 | 
			
		||||
(display (glibtop-descriptions-loadavg)) (newline)
 | 
			
		||||
(display (glibtop-descriptions-shm_limits)) (newline)
 | 
			
		||||
(display (glibtop-descriptions-msg_limits)) (newline)
 | 
			
		||||
(display (glibtop-descriptions-sem_limits)) (newline)
 | 
			
		||||
(display (glibtop-descriptions-proclist)) (newline)
 | 
			
		||||
(display (glibtop-descriptions-proc_state)) (newline)
 | 
			
		||||
(display (glibtop-descriptions-proc_uid)) (newline)
 | 
			
		||||
(display (glibtop-descriptions-proc_mem)) (newline)
 | 
			
		||||
(display (glibtop-descriptions-proc_time)) (newline)
 | 
			
		||||
(display (glibtop-descriptions-proc_signal)) (newline)
 | 
			
		||||
(display (glibtop-descriptions-proc_kernel)) (newline)
 | 
			
		||||
(display (glibtop-descriptions-proc_segment)) (newline)
 | 
			
		||||
 | 
			
		||||
(newline)
 | 
			
		||||
 | 
			
		||||
(display (glibtop-types-cpu)) (newline)
 | 
			
		||||
(display (glibtop-types-mem)) (newline)
 | 
			
		||||
(display (glibtop-types-swap)) (newline)
 | 
			
		||||
(display (glibtop-types-uptime)) (newline)
 | 
			
		||||
(display (glibtop-types-loadavg)) (newline)
 | 
			
		||||
(display (glibtop-types-shm_limits)) (newline)
 | 
			
		||||
(display (glibtop-types-msg_limits)) (newline)
 | 
			
		||||
(display (glibtop-types-sem_limits)) (newline)
 | 
			
		||||
(display (glibtop-types-proclist)) (newline)
 | 
			
		||||
(display (glibtop-types-proc_state)) (newline)
 | 
			
		||||
(display (glibtop-types-proc_uid)) (newline)
 | 
			
		||||
(display (glibtop-types-proc_mem)) (newline)
 | 
			
		||||
(display (glibtop-types-proc_time)) (newline)
 | 
			
		||||
(display (glibtop-types-proc_signal)) (newline)
 | 
			
		||||
(display (glibtop-types-proc_kernel)) (newline)
 | 
			
		||||
(display (glibtop-types-proc_segment)) (newline)
 | 
			
		||||
							
								
								
									
										57
									
								
								examples/third.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								examples/third.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,57 @@
 | 
			
		||||
/* $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 <locale.h>
 | 
			
		||||
 | 
			
		||||
#include <glibtop.h>
 | 
			
		||||
     
 | 
			
		||||
#include <glibtop/open.h>
 | 
			
		||||
#include <glibtop/close.h>
 | 
			
		||||
#include <glibtop/xmalloc.h>
 | 
			
		||||
 | 
			
		||||
#include <glibtop/union.h>
 | 
			
		||||
#include <glibtop/sysdeps.h>
 | 
			
		||||
 | 
			
		||||
void main_prog(int argc, char *argv[]);
 | 
			
		||||
 | 
			
		||||
int     
 | 
			
		||||
main (int argc, char *argv[])
 | 
			
		||||
{
 | 
			
		||||
	setlocale (LC_ALL, "");
 | 
			
		||||
	bindtextdomain (PACKAGE, GTOPLOCALEDIR);
 | 
			
		||||
	textdomain (PACKAGE);
 | 
			
		||||
 | 
			
		||||
	gh_enter (argc, argv, main_prog);
 | 
			
		||||
	exit (0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
main_prog (int argc, char *argv[])
 | 
			
		||||
{
 | 
			
		||||
	glibtop_boot_guile ();
 | 
			
		||||
#ifdef GLIBTOP_GUILE_NAMES
 | 
			
		||||
	glibtop_boot_guile_names ();
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	gh_repl (argc, argv);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										357
									
								
								examples/timings.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										357
									
								
								examples/timings.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,357 @@
 | 
			
		||||
/* $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 <locale.h>
 | 
			
		||||
 | 
			
		||||
#include <glibtop.h>
 | 
			
		||||
#include <glibtop/open.h>
 | 
			
		||||
#include <glibtop/close.h>
 | 
			
		||||
#include <glibtop/xmalloc.h>
 | 
			
		||||
 | 
			
		||||
#include <glibtop/parameter.h>
 | 
			
		||||
 | 
			
		||||
#include <glibtop/union.h>
 | 
			
		||||
#include <glibtop/sysdeps.h>
 | 
			
		||||
 | 
			
		||||
#include <sys/times.h>
 | 
			
		||||
#include <sys/resource.h>
 | 
			
		||||
 | 
			
		||||
#ifndef PROFILE_COUNT
 | 
			
		||||
#define PROFILE_COUNT			100000L
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef PROFILE_COUNT_EXPENSIVE
 | 
			
		||||
#define PROFILE_COUNT_EXPENSIVE		10000L
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define ELAPSED_UTIME ((unsigned long) elapsed_utime.tv_sec * 1000000 +	(unsigned long) elapsed_utime.tv_usec)
 | 
			
		||||
#define ELAPSED_STIME ((unsigned long) elapsed_stime.tv_sec * 1000000 + (unsigned long) elapsed_stime.tv_usec)
 | 
			
		||||
 | 
			
		||||
#define libgtop_timeradd(tvp, uvp, vvp)						\
 | 
			
		||||
	do {								\
 | 
			
		||||
		(vvp)->tv_sec = (tvp)->tv_sec + (uvp)->tv_sec;		\
 | 
			
		||||
		(vvp)->tv_usec = (tvp)->tv_usec + (uvp)->tv_usec;	\
 | 
			
		||||
		if ((vvp)->tv_usec >= 1000000) {			\
 | 
			
		||||
			(vvp)->tv_sec++;				\
 | 
			
		||||
			(vvp)->tv_usec -= 1000000;			\
 | 
			
		||||
		}							\
 | 
			
		||||
	} while (0)
 | 
			
		||||
#define libgtop_timersub(tvp, uvp, vvp)						\
 | 
			
		||||
	do {								\
 | 
			
		||||
		(vvp)->tv_sec = (tvp)->tv_sec - (uvp)->tv_sec;		\
 | 
			
		||||
		(vvp)->tv_usec = (tvp)->tv_usec - (uvp)->tv_usec;	\
 | 
			
		||||
		if ((vvp)->tv_usec < 0) {				\
 | 
			
		||||
			(vvp)->tv_sec--;				\
 | 
			
		||||
			(vvp)->tv_usec += 1000000;			\
 | 
			
		||||
		}							\
 | 
			
		||||
	} while (0)
 | 
			
		||||
 | 
			
		||||
int
 | 
			
		||||
main (int argc, char *argv [])
 | 
			
		||||
{
 | 
			
		||||
	glibtop_union data;
 | 
			
		||||
	unsigned c, count, *ptr;
 | 
			
		||||
	struct rusage total_start, total_end;
 | 
			
		||||
	struct rusage rusage_start, rusage_end;
 | 
			
		||||
	struct timeval elapsed_utime, elapsed_stime;
 | 
			
		||||
	pid_t pid;
 | 
			
		||||
 | 
			
		||||
	count = PROFILE_COUNT;
 | 
			
		||||
 | 
			
		||||
	setlocale (LC_ALL, "");
 | 
			
		||||
	bindtextdomain (PACKAGE, GTOPLOCALEDIR);
 | 
			
		||||
	textdomain (PACKAGE);
 | 
			
		||||
 | 
			
		||||
	printf ("%-12s (%-10s): %7s - %9s - %9s\n",
 | 
			
		||||
		"Feature", "Flags", "Count", "utime", "stime");
 | 
			
		||||
	printf ("-------------------------------------------"
 | 
			
		||||
		"---------------\n");
 | 
			
		||||
	
 | 
			
		||||
	glibtop_init_r (&glibtop_global_server, 0, 0);
 | 
			
		||||
 | 
			
		||||
	getrusage (RUSAGE_SELF, &total_start);
 | 
			
		||||
 | 
			
		||||
	getrusage (RUSAGE_SELF, &rusage_start);
 | 
			
		||||
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT; c++)
 | 
			
		||||
		glibtop_get_cpu (&data.cpu);
 | 
			
		||||
 | 
			
		||||
	getrusage (RUSAGE_SELF, &rusage_end);
 | 
			
		||||
 | 
			
		||||
	libgtop_timersub (&rusage_end.ru_utime, &rusage_start.ru_utime,
 | 
			
		||||
			  &elapsed_utime);
 | 
			
		||||
 | 
			
		||||
	libgtop_timersub (&rusage_end.ru_stime, &rusage_start.ru_stime,
 | 
			
		||||
			  &elapsed_stime);
 | 
			
		||||
 | 
			
		||||
	printf ("CPU          (0x%08lx): %7lu - %9.2Lf - %9.2Lf\n",
 | 
			
		||||
		(unsigned long) data.cpu.flags, PROFILE_COUNT,
 | 
			
		||||
		(long double) ELAPSED_UTIME / PROFILE_COUNT,
 | 
			
		||||
		(long double) ELAPSED_STIME / PROFILE_COUNT);
 | 
			
		||||
 | 
			
		||||
	getrusage (RUSAGE_SELF, &rusage_start);
 | 
			
		||||
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT_EXPENSIVE; c++)
 | 
			
		||||
		glibtop_get_mem (&data.mem);
 | 
			
		||||
 | 
			
		||||
	getrusage (RUSAGE_SELF, &rusage_end);
 | 
			
		||||
 | 
			
		||||
	libgtop_timersub (&rusage_end.ru_utime, &rusage_start.ru_utime,
 | 
			
		||||
			  &elapsed_utime);
 | 
			
		||||
 | 
			
		||||
	libgtop_timersub (&rusage_end.ru_stime, &rusage_start.ru_stime,
 | 
			
		||||
			  &elapsed_stime);
 | 
			
		||||
 | 
			
		||||
	printf ("Memory       (0x%08lx): %7lu - %9.2Lf - %9.2Lf\n",
 | 
			
		||||
		(unsigned long) data.mem.flags, PROFILE_COUNT_EXPENSIVE,
 | 
			
		||||
		(long double) ELAPSED_UTIME / PROFILE_COUNT_EXPENSIVE,
 | 
			
		||||
		(long double) ELAPSED_STIME / PROFILE_COUNT_EXPENSIVE);
 | 
			
		||||
 | 
			
		||||
	getrusage (RUSAGE_SELF, &rusage_start);
 | 
			
		||||
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT_EXPENSIVE; c++)
 | 
			
		||||
		glibtop_get_swap (&data.swap);
 | 
			
		||||
 | 
			
		||||
	getrusage (RUSAGE_SELF, &rusage_end);
 | 
			
		||||
 | 
			
		||||
	libgtop_timersub (&rusage_end.ru_utime, &rusage_start.ru_utime,
 | 
			
		||||
			  &elapsed_utime);
 | 
			
		||||
 | 
			
		||||
	libgtop_timersub (&rusage_end.ru_stime, &rusage_start.ru_stime,
 | 
			
		||||
			  &elapsed_stime);
 | 
			
		||||
 | 
			
		||||
	printf ("Swap         (0x%08lx): %7lu - %9.2Lf - %9.2Lf\n",
 | 
			
		||||
		(unsigned long) data.swap.flags, PROFILE_COUNT_EXPENSIVE,
 | 
			
		||||
		(long double) ELAPSED_UTIME / PROFILE_COUNT_EXPENSIVE,
 | 
			
		||||
		(long double) ELAPSED_STIME / PROFILE_COUNT_EXPENSIVE);
 | 
			
		||||
 | 
			
		||||
	getrusage (RUSAGE_SELF, &rusage_start);
 | 
			
		||||
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT; c++)
 | 
			
		||||
		glibtop_get_uptime (&data.uptime);
 | 
			
		||||
 | 
			
		||||
	getrusage (RUSAGE_SELF, &rusage_end);
 | 
			
		||||
 | 
			
		||||
	libgtop_timersub (&rusage_end.ru_utime, &rusage_start.ru_utime,
 | 
			
		||||
			  &elapsed_utime);
 | 
			
		||||
 | 
			
		||||
	libgtop_timersub (&rusage_end.ru_stime, &rusage_start.ru_stime,
 | 
			
		||||
			  &elapsed_stime);
 | 
			
		||||
 | 
			
		||||
	printf ("Uptime       (0x%08lx): %7lu - %9.2Lf - %9.2Lf\n",
 | 
			
		||||
		(unsigned long) data.uptime.flags, PROFILE_COUNT,
 | 
			
		||||
		(long double) ELAPSED_UTIME / PROFILE_COUNT,
 | 
			
		||||
		(long double) ELAPSED_STIME / PROFILE_COUNT);
 | 
			
		||||
 | 
			
		||||
	getrusage (RUSAGE_SELF, &rusage_start);
 | 
			
		||||
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT; c++)
 | 
			
		||||
		glibtop_get_loadavg (&data.loadavg);
 | 
			
		||||
 | 
			
		||||
	getrusage (RUSAGE_SELF, &rusage_end);
 | 
			
		||||
 | 
			
		||||
	libgtop_timersub (&rusage_end.ru_utime, &rusage_start.ru_utime,
 | 
			
		||||
			  &elapsed_utime);
 | 
			
		||||
 | 
			
		||||
	libgtop_timersub (&rusage_end.ru_stime, &rusage_start.ru_stime,
 | 
			
		||||
			  &elapsed_stime);
 | 
			
		||||
 | 
			
		||||
	printf ("Loadavg      (0x%08lx): %7lu - %9.2Lf - %9.2Lf\n",
 | 
			
		||||
		(unsigned long) data.loadavg.flags, PROFILE_COUNT,
 | 
			
		||||
		(long double) ELAPSED_UTIME / PROFILE_COUNT,
 | 
			
		||||
		(long double) ELAPSED_STIME / PROFILE_COUNT);
 | 
			
		||||
 | 
			
		||||
	printf ("\n");
 | 
			
		||||
 | 
			
		||||
	getrusage (RUSAGE_SELF, &rusage_start);
 | 
			
		||||
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT_EXPENSIVE; c++) {
 | 
			
		||||
		ptr = glibtop_get_proclist (&data.proclist, 0, 0);
 | 
			
		||||
		glibtop_free (ptr);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	getrusage (RUSAGE_SELF, &rusage_end);
 | 
			
		||||
 | 
			
		||||
	libgtop_timersub (&rusage_end.ru_utime, &rusage_start.ru_utime,
 | 
			
		||||
			  &elapsed_utime);
 | 
			
		||||
 | 
			
		||||
	libgtop_timersub (&rusage_end.ru_stime, &rusage_start.ru_stime,
 | 
			
		||||
			  &elapsed_stime);
 | 
			
		||||
 | 
			
		||||
	printf ("Proclist     (0x%08lx): %7lu - %9.2Lf - %9.2Lf\n",
 | 
			
		||||
		(unsigned long) data.proclist.flags,
 | 
			
		||||
		PROFILE_COUNT_EXPENSIVE,
 | 
			
		||||
		(long double) ELAPSED_UTIME / PROFILE_COUNT_EXPENSIVE,
 | 
			
		||||
		(long double) ELAPSED_STIME / PROFILE_COUNT_EXPENSIVE);
 | 
			
		||||
 | 
			
		||||
	pid = getpid ();
 | 
			
		||||
 | 
			
		||||
	printf ("\n");
 | 
			
		||||
 | 
			
		||||
	getrusage (RUSAGE_SELF, &rusage_start);
 | 
			
		||||
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT; c++)
 | 
			
		||||
		glibtop_get_proc_state (&data.proc_state, pid);
 | 
			
		||||
 | 
			
		||||
	getrusage (RUSAGE_SELF, &rusage_end);
 | 
			
		||||
 | 
			
		||||
	libgtop_timersub (&rusage_end.ru_utime, &rusage_start.ru_utime,
 | 
			
		||||
			  &elapsed_utime);
 | 
			
		||||
 | 
			
		||||
	libgtop_timersub (&rusage_end.ru_stime, &rusage_start.ru_stime,
 | 
			
		||||
			  &elapsed_stime);
 | 
			
		||||
 | 
			
		||||
	printf ("Proc_State   (0x%08lx): %7lu - %9.2Lf - %9.2Lf\n",
 | 
			
		||||
		(unsigned long) data.proc_state.flags, PROFILE_COUNT,
 | 
			
		||||
		(long double) ELAPSED_UTIME / PROFILE_COUNT,
 | 
			
		||||
		(long double) ELAPSED_STIME / PROFILE_COUNT);
 | 
			
		||||
 | 
			
		||||
	getrusage (RUSAGE_SELF, &rusage_start);
 | 
			
		||||
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT; c++)
 | 
			
		||||
		glibtop_get_proc_uid (&data.proc_uid, pid);
 | 
			
		||||
 | 
			
		||||
	getrusage (RUSAGE_SELF, &rusage_end);
 | 
			
		||||
 | 
			
		||||
	libgtop_timersub (&rusage_end.ru_utime, &rusage_start.ru_utime,
 | 
			
		||||
			  &elapsed_utime);
 | 
			
		||||
 | 
			
		||||
	libgtop_timersub (&rusage_end.ru_stime, &rusage_start.ru_stime,
 | 
			
		||||
			  &elapsed_stime);
 | 
			
		||||
 | 
			
		||||
	printf ("Proc_Uid     (0x%08lx): %7lu - %9.2Lf - %9.2Lf\n",
 | 
			
		||||
		(unsigned long) data.proc_uid.flags, PROFILE_COUNT,
 | 
			
		||||
		(long double) ELAPSED_UTIME / PROFILE_COUNT,
 | 
			
		||||
		(long double) ELAPSED_STIME / PROFILE_COUNT);
 | 
			
		||||
 | 
			
		||||
	getrusage (RUSAGE_SELF, &rusage_start);
 | 
			
		||||
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT; c++)
 | 
			
		||||
		glibtop_get_proc_mem (&data.proc_mem, pid);
 | 
			
		||||
 | 
			
		||||
	getrusage (RUSAGE_SELF, &rusage_end);
 | 
			
		||||
 | 
			
		||||
	libgtop_timersub (&rusage_end.ru_utime, &rusage_start.ru_utime,
 | 
			
		||||
			  &elapsed_utime);
 | 
			
		||||
 | 
			
		||||
	libgtop_timersub (&rusage_end.ru_stime, &rusage_start.ru_stime,
 | 
			
		||||
			  &elapsed_stime);
 | 
			
		||||
 | 
			
		||||
	printf ("Proc_Mem     (0x%08lx): %7lu - %9.2Lf - %9.2Lf\n",
 | 
			
		||||
		(unsigned long) data.proc_mem.flags, PROFILE_COUNT,
 | 
			
		||||
		(long double) ELAPSED_UTIME / PROFILE_COUNT,
 | 
			
		||||
		(long double) ELAPSED_STIME / PROFILE_COUNT);
 | 
			
		||||
 | 
			
		||||
	getrusage (RUSAGE_SELF, &rusage_start);
 | 
			
		||||
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT; c++)
 | 
			
		||||
		glibtop_get_proc_segment (&data.proc_segment, pid);
 | 
			
		||||
 | 
			
		||||
	getrusage (RUSAGE_SELF, &rusage_end);
 | 
			
		||||
 | 
			
		||||
	libgtop_timersub (&rusage_end.ru_utime, &rusage_start.ru_utime,
 | 
			
		||||
			  &elapsed_utime);
 | 
			
		||||
 | 
			
		||||
	libgtop_timersub (&rusage_end.ru_stime, &rusage_start.ru_stime,
 | 
			
		||||
			  &elapsed_stime);
 | 
			
		||||
 | 
			
		||||
	printf ("Proc_Segment (0x%08lx): %7lu - %9.2Lf - %9.2Lf\n",
 | 
			
		||||
		(unsigned long) data.proc_segment.flags, PROFILE_COUNT,
 | 
			
		||||
		(long double) ELAPSED_UTIME / PROFILE_COUNT,
 | 
			
		||||
		(long double) ELAPSED_STIME / PROFILE_COUNT);
 | 
			
		||||
 | 
			
		||||
	getrusage (RUSAGE_SELF, &rusage_start);
 | 
			
		||||
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT; c++)
 | 
			
		||||
		glibtop_get_proc_time (&data.proc_time, pid);
 | 
			
		||||
 | 
			
		||||
	getrusage (RUSAGE_SELF, &rusage_end);
 | 
			
		||||
 | 
			
		||||
	libgtop_timersub (&rusage_end.ru_utime, &rusage_start.ru_utime,
 | 
			
		||||
			  &elapsed_utime);
 | 
			
		||||
 | 
			
		||||
	libgtop_timersub (&rusage_end.ru_stime, &rusage_start.ru_stime,
 | 
			
		||||
			  &elapsed_stime);
 | 
			
		||||
 | 
			
		||||
	printf ("Proc_Time    (0x%08lx): %7lu - %9.2Lf - %9.2Lf\n",
 | 
			
		||||
		(unsigned long) data.proc_time.flags, PROFILE_COUNT,
 | 
			
		||||
		(long double) ELAPSED_UTIME / PROFILE_COUNT,
 | 
			
		||||
		(long double) ELAPSED_STIME / PROFILE_COUNT);
 | 
			
		||||
 | 
			
		||||
	getrusage (RUSAGE_SELF, &rusage_start);
 | 
			
		||||
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT; c++)
 | 
			
		||||
		glibtop_get_proc_signal (&data.proc_signal, pid);
 | 
			
		||||
	
 | 
			
		||||
	getrusage (RUSAGE_SELF, &rusage_end);
 | 
			
		||||
 | 
			
		||||
	libgtop_timersub (&rusage_end.ru_utime, &rusage_start.ru_utime,
 | 
			
		||||
			  &elapsed_utime);
 | 
			
		||||
 | 
			
		||||
	libgtop_timersub (&rusage_end.ru_stime, &rusage_start.ru_stime,
 | 
			
		||||
			  &elapsed_stime);
 | 
			
		||||
 | 
			
		||||
	printf ("Proc_Signal  (0x%08lx): %7lu - %9.2Lf - %9.2Lf\n",
 | 
			
		||||
		(unsigned long) data.proc_signal.flags, PROFILE_COUNT,
 | 
			
		||||
		(long double) ELAPSED_UTIME / PROFILE_COUNT,
 | 
			
		||||
		(long double) ELAPSED_STIME / PROFILE_COUNT);
 | 
			
		||||
 | 
			
		||||
	getrusage (RUSAGE_SELF, &rusage_start);
 | 
			
		||||
 | 
			
		||||
	for (c = 0; c < PROFILE_COUNT; c++)
 | 
			
		||||
		glibtop_get_proc_kernel (&data.proc_kernel, pid);
 | 
			
		||||
 | 
			
		||||
	getrusage (RUSAGE_SELF, &rusage_end);
 | 
			
		||||
 | 
			
		||||
	libgtop_timersub (&rusage_end.ru_utime, &rusage_start.ru_utime,
 | 
			
		||||
			  &elapsed_utime);
 | 
			
		||||
 | 
			
		||||
	libgtop_timersub (&rusage_end.ru_stime, &rusage_start.ru_stime,
 | 
			
		||||
			  &elapsed_stime);
 | 
			
		||||
 | 
			
		||||
	printf ("Proc_Kernel  (0x%08lx): %7lu - %9.2Lf - %9.2Lf\n",
 | 
			
		||||
		(unsigned long) data.proc_kernel.flags, PROFILE_COUNT,
 | 
			
		||||
		(long double) ELAPSED_UTIME / PROFILE_COUNT,
 | 
			
		||||
		(long double) ELAPSED_STIME / PROFILE_COUNT);
 | 
			
		||||
	
 | 
			
		||||
	getrusage (RUSAGE_SELF, &total_end);
 | 
			
		||||
 | 
			
		||||
	libgtop_timersub (&total_end.ru_utime, &total_start.ru_utime,
 | 
			
		||||
			  &elapsed_utime);
 | 
			
		||||
 | 
			
		||||
	libgtop_timersub (&total_end.ru_stime, &total_start.ru_stime,
 | 
			
		||||
			  &elapsed_stime);
 | 
			
		||||
 | 
			
		||||
	printf ("-------------------------------------------"
 | 
			
		||||
		"---------------\n");
 | 
			
		||||
 | 
			
		||||
	printf ("%-36s %9lu - %9lu\n\n", "TOTAL",
 | 
			
		||||
		ELAPSED_UTIME, ELAPSED_STIME);
 | 
			
		||||
 | 
			
		||||
	printf ("All timings are in clock ticks "
 | 
			
		||||
		"(1000000 ticks per second).\n\n");
 | 
			
		||||
 | 
			
		||||
	glibtop_close ();
 | 
			
		||||
 | 
			
		||||
	exit (0);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										22
									
								
								features.def
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								features.def
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,22 @@
 | 
			
		||||
void|cpu|ulong(total,user,nice,sys,idle,frequency,xcpu_total[4],xcpu_user[4],xcpu_nice[4],xcpu_sys[4],xcpu_idle[4])
 | 
			
		||||
void|mem|ulong(total,used,free,shared,buffer,cached,user,locked)
 | 
			
		||||
void|swap|ulong(total,used,free,pagein,pageout)
 | 
			
		||||
void|uptime|double(uptime,idletime)
 | 
			
		||||
void|loadavg|double(loadavg[3]):ulong(nr_running,nr_tasks,last_pid)
 | 
			
		||||
void|shm_limits|ulong(shmmax,shmmin,shmmni,shmseg,shmall)
 | 
			
		||||
void|msg_limits|ulong(msgpool,msgmap,msgmax,msgmnb,msgmni,msgssz,msgtql)
 | 
			
		||||
void|sem_limits|ulong(semmap,semmni,semmns,semmnu,semmsl,semopm,semume,semusz,semvmx,semaem)
 | 
			
		||||
unsigned *|proclist|ulong(number,size,total)|long(which,arg)
 | 
			
		||||
void|proc_state|str(cmd):char(state):ulong(uid,gid)|pid_t(pid)
 | 
			
		||||
void|proc_uid|long(uid,euid,gid,egid,pid,ppid,pgrp,session,tty,tpgid,priority,nice)|pid_t(pid)
 | 
			
		||||
void|proc_mem|long(size,vsize,resident,share,rss,rss_rlim)|pid_t(pid)
 | 
			
		||||
void|proc_time|long(start_time,rtime,utime,stime,cutime,cstime,timeout,it_real_value,frequency,xcpu_utime[4],xcpu_stime[4])|pid_t(pid)
 | 
			
		||||
void|proc_signal|ulong(signal[2],blocked[2],sigignore[2],sigcatch[2])|pid_t(pid)
 | 
			
		||||
void|proc_kernel|ulong(k_flags,min_flt,maj_flt,cmin_flt,cmaj_flt,kstk_esp,kstk_eip,nwchan):str(wchan)|pid_t(pid)
 | 
			
		||||
void|proc_segment|ulong(text_rss,shlib_rss,data_rss,stack_rss,dirty_size,start_code,end_code,start_stack)|pid_t(pid)
 | 
			
		||||
char *|proc_args|ulong(size)|pid_t(pid):unsigned(max_len)
 | 
			
		||||
glibtop_map_entry *|proc_map|ulong(number,size,total)|pid_t(pid)
 | 
			
		||||
glibtop_mountentry *|@mountlist|ulong(number,size,total)|int(all_fs)
 | 
			
		||||
void|@fsusage|ulong(blocks,bfree,bavail,files,ffree)|string|mount_dir
 | 
			
		||||
void|netload|ulong(if_flags,mtu,subnet,address,packets_in,packets_out,packets_total,bytes_in,bytes_out,bytes_total,errors_in,errors_out,errors_total,collisions)|string|interface
 | 
			
		||||
void|ppp|ulong(state,bytes_in,bytes_out)|ushort(device)
 | 
			
		||||
							
								
								
									
										107
									
								
								glibtop.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										107
									
								
								glibtop.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,107 @@
 | 
			
		||||
/* $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_H__
 | 
			
		||||
#define __GLIBTOP_H__
 | 
			
		||||
 | 
			
		||||
#include <glibtop/global.h>
 | 
			
		||||
 | 
			
		||||
#include <glibtop_server.h>
 | 
			
		||||
#include <glibtop/types.h>
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_GLIBTOP_MACHINE_H
 | 
			
		||||
#include <glibtop_machine.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef GLIBTOP_MOUNTENTRY_LEN
 | 
			
		||||
#define GLIBTOP_MOUNTENTRY_LEN	79
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
typedef struct _glibtop		glibtop;
 | 
			
		||||
 | 
			
		||||
#include <glibtop/sysdeps.h>
 | 
			
		||||
 | 
			
		||||
struct _glibtop
 | 
			
		||||
{
 | 
			
		||||
	unsigned flags;
 | 
			
		||||
	unsigned method;		/* Server Method */
 | 
			
		||||
	unsigned error_method;		/* Error Method */
 | 
			
		||||
#ifdef HAVE_GLIBTOP_MACHINE_H
 | 
			
		||||
	glibtop_machine machine;	/* Machine dependent data */
 | 
			
		||||
#endif
 | 
			
		||||
	int input [2];			/* Pipe client <- server */
 | 
			
		||||
	int output [2];			/* Pipe client -> server */
 | 
			
		||||
	int socket;			/* Accepted connection of a socket */
 | 
			
		||||
	int ncpu;			/* Number of CPUs, zero if single-processor */
 | 
			
		||||
	unsigned long os_version_code;	/* Version code of the operating system */
 | 
			
		||||
	const char *name;		/* Program name for error messages */
 | 
			
		||||
	const char *server_command;	/* Command used to invoke server */
 | 
			
		||||
	const char *server_host;	/* Host the server should run on */
 | 
			
		||||
	const char *server_user;	/* Name of the user on the target host */
 | 
			
		||||
	const char *server_rsh;		/* Command used to connect to the target host */
 | 
			
		||||
	unsigned long features;		/* Server is required for this features */
 | 
			
		||||
	unsigned long server_port;	/* Port on which daemon is listening */
 | 
			
		||||
	glibtop_sysdeps sysdeps;	/* Detailed feature list */
 | 
			
		||||
	glibtop_sysdeps required;	/* Required feature list */
 | 
			
		||||
	pid_t pid;			/* PID of the server */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
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_r (glibtop **server_ptr,
 | 
			
		||||
		unsigned long features,
 | 
			
		||||
		unsigned flags);
 | 
			
		||||
 | 
			
		||||
glibtop *
 | 
			
		||||
glibtop_init_s (glibtop **server_ptr,
 | 
			
		||||
		unsigned long features,
 | 
			
		||||
		unsigned flags);
 | 
			
		||||
 | 
			
		||||
#ifdef GLIBTOP_GUILE
 | 
			
		||||
 | 
			
		||||
/* You need to link with -lgtop_guile to get this stuff here. */
 | 
			
		||||
 | 
			
		||||
void glibtop_boot_guile (void);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef GLIBTOP_GUILE_NAMES
 | 
			
		||||
 | 
			
		||||
/* You need to link with -lgtop_guile_names to get this stuff here. */
 | 
			
		||||
 | 
			
		||||
void glibtop_boot_guile_names (void);
 | 
			
		||||
 | 
			
		||||
#ifndef GLIBTOP_NAMES
 | 
			
		||||
#define GLIBTOP_NAMES
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										2
									
								
								include/.cvsignore
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								include/.cvsignore
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,2 @@
 | 
			
		||||
Makefile
 | 
			
		||||
Makefile.in
 | 
			
		||||
							
								
								
									
										2
									
								
								include/Makefile.am
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								include/Makefile.am
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,2 @@
 | 
			
		||||
SUBDIRS		= glibtop
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										2
									
								
								include/glibtop/.cvsignore
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								include/glibtop/.cvsignore
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,2 @@
 | 
			
		||||
Makefile
 | 
			
		||||
Makefile.in
 | 
			
		||||
							
								
								
									
										10
									
								
								include/glibtop/Makefile.am
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								include/glibtop/Makefile.am
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,10 @@
 | 
			
		||||
glibtopdir		= $(includedir)/glibtop
 | 
			
		||||
 | 
			
		||||
glibtop_HEADERS		= close.h loadavg.h prockernel.h procstate.h \
 | 
			
		||||
			  sem_limits.h uptime.h command.h mem.h proclist.h \
 | 
			
		||||
			  proctime.h shm_limits.h version.h cpu.h msg_limits.h \
 | 
			
		||||
			  procmem.h procuid.h swap.h write.h error.h open.h \
 | 
			
		||||
			  procsegment.h read.h sysdeps.h xmalloc.h global.h \
 | 
			
		||||
			  procsignal.h read_data.h union.h types.h gnuserv.h \
 | 
			
		||||
			  parameter.h mountlist.h fsusage.h procmap.h signal.h \
 | 
			
		||||
			  inodedb.h sysinfo.h ppp.h procargs.h netload.h
 | 
			
		||||
							
								
								
									
										38
									
								
								include/glibtop/close.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								include/glibtop/close.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,38 @@
 | 
			
		||||
/* $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_CLOSE_H__
 | 
			
		||||
#define __GLIBTOP_CLOSE_H__
 | 
			
		||||
 | 
			
		||||
#include <glibtop.h>
 | 
			
		||||
 | 
			
		||||
BEGIN_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
void glibtop_close_r (glibtop *server);
 | 
			
		||||
 | 
			
		||||
void glibtop_close_s (glibtop *server);
 | 
			
		||||
void glibtop_close_p (glibtop *server);
 | 
			
		||||
 | 
			
		||||
END_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										102
									
								
								include/glibtop/command.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										102
									
								
								include/glibtop/command.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,102 @@
 | 
			
		||||
/* $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_COMMAND_H__
 | 
			
		||||
#define __GLIBTOP_COMMAND_H__
 | 
			
		||||
 | 
			
		||||
#include <glibtop.h>
 | 
			
		||||
#include <glibtop/sysdeps.h>
 | 
			
		||||
#include <glibtop/union.h>
 | 
			
		||||
 | 
			
		||||
BEGIN_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_CMND_QUIT		0
 | 
			
		||||
#define GLIBTOP_CMND_SYSDEPS		1
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_CMND_CPU		2
 | 
			
		||||
#define GLIBTOP_CMND_MEM		3
 | 
			
		||||
#define GLIBTOP_CMND_SWAP		4
 | 
			
		||||
#define GLIBTOP_CMND_UPTIME		5
 | 
			
		||||
#define GLIBTOP_CMND_LOADAVG		6
 | 
			
		||||
#define GLIBTOP_CMND_SHM_LIMITS		7
 | 
			
		||||
#define GLIBTOP_CMND_MSG_LIMITS		8
 | 
			
		||||
#define GLIBTOP_CMND_SEM_LIMITS		9
 | 
			
		||||
#define GLIBTOP_CMND_PROCLIST		10
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_CMND_PROC_STATE		11
 | 
			
		||||
#define GLIBTOP_CMND_PROC_UID		12
 | 
			
		||||
#define GLIBTOP_CMND_PROC_MEM		13
 | 
			
		||||
#define GLIBTOP_CMND_PROC_TIME		14
 | 
			
		||||
#define GLIBTOP_CMND_PROC_SIGNAL	15
 | 
			
		||||
#define GLIBTOP_CMND_PROC_KERNEL	16
 | 
			
		||||
#define GLIBTOP_CMND_PROC_SEGMENT	17
 | 
			
		||||
#define GLIBTOP_CMND_PROC_ARGS		18
 | 
			
		||||
#define GLIBTOP_CMND_PROC_MAP		19
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_CMND_MOUNTLIST		20
 | 
			
		||||
#define GLIBTOP_CMND_FSUSAGE		21
 | 
			
		||||
#define GLIBTOP_CMND_NETLOAD		22
 | 
			
		||||
#define GLIBTOP_CMND_PPP		23
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_MAX_CMND		24
 | 
			
		||||
 | 
			
		||||
#define _GLIBTOP_PARAM_SIZE		16
 | 
			
		||||
 | 
			
		||||
typedef struct _glibtop_command		glibtop_command;
 | 
			
		||||
 | 
			
		||||
typedef struct _glibtop_response	glibtop_response;
 | 
			
		||||
typedef union  _glibtop_response_union	glibtop_response_union;
 | 
			
		||||
 | 
			
		||||
struct _glibtop_command
 | 
			
		||||
{
 | 
			
		||||
	u_int64_t	command;
 | 
			
		||||
	u_int64_t	size, data_size;
 | 
			
		||||
	char		parameter [_GLIBTOP_PARAM_SIZE];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
union _glibtop_response_union
 | 
			
		||||
{
 | 
			
		||||
	glibtop_union	data;
 | 
			
		||||
	glibtop_sysdeps	sysdeps;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct _glibtop_response
 | 
			
		||||
{
 | 
			
		||||
	int64_t offset;
 | 
			
		||||
	u_int64_t size, data_size;
 | 
			
		||||
	glibtop_response_union u;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define glibtop_call(p1, p2, p3, p4)	glibtop_call_r(glibtop_global_server, p1, p2, p3, p4)
 | 
			
		||||
 | 
			
		||||
void *
 | 
			
		||||
glibtop_call_l (glibtop *server, unsigned command, size_t send_size,
 | 
			
		||||
		const void *send_buf, size_t recv_size, void *recv_buf);
 | 
			
		||||
 | 
			
		||||
void *
 | 
			
		||||
glibtop_call_s (glibtop *server, unsigned command, size_t send_size,
 | 
			
		||||
		const void *send_buf, size_t recv_size, void *recv_buf);
 | 
			
		||||
 | 
			
		||||
END_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										99
									
								
								include/glibtop/cpu.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										99
									
								
								include/glibtop/cpu.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,99 @@
 | 
			
		||||
/* $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_CPU_H__
 | 
			
		||||
#define __GLIBTOP_CPU_H__
 | 
			
		||||
 | 
			
		||||
#include <glibtop.h>
 | 
			
		||||
#include <glibtop/global.h>
 | 
			
		||||
 | 
			
		||||
BEGIN_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_CPU_TOTAL	0
 | 
			
		||||
#define GLIBTOP_CPU_USER	1
 | 
			
		||||
#define GLIBTOP_CPU_NICE	2
 | 
			
		||||
#define GLIBTOP_CPU_SYS		3
 | 
			
		||||
#define GLIBTOP_CPU_IDLE	4
 | 
			
		||||
#define GLIBTOP_CPU_FREQUENCY	5
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_XCPU_TOTAL	6
 | 
			
		||||
#define GLIBTOP_XCPU_USER	7
 | 
			
		||||
#define GLIBTOP_XCPU_NICE	8
 | 
			
		||||
#define GLIBTOP_XCPU_SYS	9
 | 
			
		||||
#define GLIBTOP_XCPU_IDLE	10
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_MAX_CPU		11
 | 
			
		||||
 | 
			
		||||
/* Nobody should really be using more than 4 processors. */
 | 
			
		||||
#define GLIBTOP_NCPU		4
 | 
			
		||||
 | 
			
		||||
typedef struct _glibtop_cpu	glibtop_cpu;
 | 
			
		||||
 | 
			
		||||
struct _glibtop_cpu
 | 
			
		||||
{
 | 
			
		||||
	u_int64_t	flags,
 | 
			
		||||
		total,				/* GLIBTOP_CPU_TOTAL		*/
 | 
			
		||||
		user,				/* GLIBTOP_CPU_USER		*/
 | 
			
		||||
		nice,				/* GLIBTOP_CPU_NICE		*/
 | 
			
		||||
		sys,				/* GLIBTOP_CPU_SYS		*/
 | 
			
		||||
		idle,				/* GLIBTOP_CPU_IDLE		*/
 | 
			
		||||
		frequency,			/* GLIBTOP_CPU_FREQUENCY	*/
 | 
			
		||||
		xcpu_total [GLIBTOP_NCPU],	/* GLIBTOP_XCPU_TOTAL		*/
 | 
			
		||||
		xcpu_user [GLIBTOP_NCPU],	/* GLIBTOP_XCPU_USER		*/
 | 
			
		||||
		xcpu_nice [GLIBTOP_NCPU],	/* GLIBTOP_XCPU_NICE		*/
 | 
			
		||||
		xcpu_sys  [GLIBTOP_NCPU],	/* GLIBTOP_XCPU_SYS		*/
 | 
			
		||||
		xcpu_idle [GLIBTOP_NCPU];	/* GLIBTOP_XCPU_IDLE		*/
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define glibtop_get_cpu(cpu)	glibtop_get_cpu_l(glibtop_global_server, cpu)
 | 
			
		||||
 | 
			
		||||
#if GLIBTOP_SUID_CPU
 | 
			
		||||
#define glibtop_get_cpu_r	glibtop_get_cpu_p
 | 
			
		||||
#else
 | 
			
		||||
#define glibtop_get_cpu_r	glibtop_get_cpu_s
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
void glibtop_get_cpu_l (glibtop *server, glibtop_cpu *buf);
 | 
			
		||||
 | 
			
		||||
#if GLIBTOP_SUID_CPU
 | 
			
		||||
void glibtop_init_cpu_p (glibtop *server);
 | 
			
		||||
void glibtop_get_cpu_p (glibtop *server, glibtop_cpu *buf);
 | 
			
		||||
#else
 | 
			
		||||
void glibtop_init_cpu_s (glibtop *server);
 | 
			
		||||
void glibtop_get_cpu_s (glibtop *server, glibtop_cpu *buf);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef GLIBTOP_NAMES
 | 
			
		||||
 | 
			
		||||
/* You need to link with -lgtop_names to get this stuff here. */
 | 
			
		||||
 | 
			
		||||
extern const char *glibtop_names_cpu [];
 | 
			
		||||
extern const unsigned glibtop_types_cpu [];
 | 
			
		||||
extern const char *glibtop_labels_cpu [];
 | 
			
		||||
extern const char *glibtop_descriptions_cpu [];
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
END_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										136
									
								
								include/glibtop/error.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										136
									
								
								include/glibtop/error.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,136 @@
 | 
			
		||||
/* $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_ERROR_H__
 | 
			
		||||
#define __GLIBTOP_ERROR_H__
 | 
			
		||||
 | 
			
		||||
#include <glibtop.h>
 | 
			
		||||
 | 
			
		||||
BEGIN_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#ifndef G_GNUC_UNUSED
 | 
			
		||||
#if	__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 4)
 | 
			
		||||
#define G_GNUC_UNUSED				\
 | 
			
		||||
  __attribute__((unused))
 | 
			
		||||
#else	/* !__GNUC__ */
 | 
			
		||||
#define	G_GNUC_UNUSED
 | 
			
		||||
#endif	/* !__GNUC__ */
 | 
			
		||||
#endif /* defined G_GNUC_UNUSED */
 | 
			
		||||
 | 
			
		||||
void glibtop_error_vr (glibtop *server, char *format, va_list args);
 | 
			
		||||
void glibtop_warn_vr (glibtop *server, char *format, va_list args);
 | 
			
		||||
 | 
			
		||||
void glibtop_error_io_vr (glibtop *server, char *format, int, va_list args);
 | 
			
		||||
void glibtop_warn_io_vr (glibtop *server, char *format, int, va_list args);
 | 
			
		||||
 | 
			
		||||
static void G_GNUC_UNUSED
 | 
			
		||||
glibtop_error_r (glibtop *server, char *format, ...)
 | 
			
		||||
{
 | 
			
		||||
	va_list args;
 | 
			
		||||
 | 
			
		||||
	va_start (args, format);
 | 
			
		||||
	glibtop_error_vr (server, format, args);
 | 
			
		||||
	va_end (args);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void G_GNUC_UNUSED
 | 
			
		||||
glibtop_warn_r (glibtop *server, char *format, ...)
 | 
			
		||||
{
 | 
			
		||||
	va_list args;
 | 
			
		||||
 | 
			
		||||
	va_start (args, format);
 | 
			
		||||
	glibtop_warn_vr (server, format, args);
 | 
			
		||||
	va_end (args);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void G_GNUC_UNUSED
 | 
			
		||||
glibtop_error_io_r (glibtop *server, char *format, ...)
 | 
			
		||||
{
 | 
			
		||||
	va_list args;
 | 
			
		||||
 | 
			
		||||
	va_start (args, format);
 | 
			
		||||
	glibtop_error_io_vr (server, format, errno, args);
 | 
			
		||||
	va_end (args);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void G_GNUC_UNUSED
 | 
			
		||||
glibtop_warn_io_r (glibtop *server, char *format, ...)
 | 
			
		||||
{
 | 
			
		||||
	va_list args;
 | 
			
		||||
 | 
			
		||||
	va_start (args, format);
 | 
			
		||||
	glibtop_warn_io_vr (server, format, errno, args);
 | 
			
		||||
	va_end (args);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#ifdef  __GNUC__
 | 
			
		||||
 | 
			
		||||
#define glibtop_error(p1, args...)	glibtop_error_r(glibtop_global_server , p1 , ## args)
 | 
			
		||||
#define glibtop_warn(p1, args...)	glibtop_warn_r(glibtop_global_server , p1 , ## args)
 | 
			
		||||
 | 
			
		||||
#define glibtop_error_io(p1, args...)	glibtop_error_io_r(glibtop_global_server , p1 , ## args)
 | 
			
		||||
#define glibtop_warn_io(p1, args...)	glibtop_warn_io_r(glibtop_global_server , p1 , ## args)
 | 
			
		||||
 | 
			
		||||
#else /* no __GNUC__ */
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
glibtop_error (char *format, ...)
 | 
			
		||||
{
 | 
			
		||||
	va_list args;
 | 
			
		||||
	va_start (args, format);
 | 
			
		||||
	glibtop_error_vr (glibtop_global_server, format, args);
 | 
			
		||||
	va_end (args);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
glibtop_warn (char *format, ...)
 | 
			
		||||
{
 | 
			
		||||
	va_list args;
 | 
			
		||||
	va_start (args, format);
 | 
			
		||||
	glibtop_warn_vr (glibtop_global_server, format, args);
 | 
			
		||||
	va_end (args);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
glibtop_error_io (char *format, ...)
 | 
			
		||||
{
 | 
			
		||||
	va_list args;
 | 
			
		||||
	va_start (args, format);
 | 
			
		||||
	glibtop_error_io_vr (glibtop_global_server, format, errno, args);
 | 
			
		||||
	va_end (args);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
glibtop_warn_io (char *format, ...)
 | 
			
		||||
{
 | 
			
		||||
	va_list args;
 | 
			
		||||
	va_start (args, format);
 | 
			
		||||
	glibtop_warn_io_vr (glibtop_global_server, format, errno, args);
 | 
			
		||||
	va_end (args);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif /* no __GNUC__ */
 | 
			
		||||
 | 
			
		||||
END_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										72
									
								
								include/glibtop/fsusage.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										72
									
								
								include/glibtop/fsusage.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,72 @@
 | 
			
		||||
/* $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_FSUSAGE_H__
 | 
			
		||||
#define __GLIBTOP_FSUSAGE_H__
 | 
			
		||||
 | 
			
		||||
#include <glibtop.h>
 | 
			
		||||
#include <glibtop/global.h>
 | 
			
		||||
 | 
			
		||||
BEGIN_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_FSUSAGE_BLOCKS		0
 | 
			
		||||
#define GLIBTOP_FSUSAGE_BFREE		1
 | 
			
		||||
#define GLIBTOP_FSUSAGE_BAVAIL		2
 | 
			
		||||
#define GLIBTOP_FSUSAGE_FILES		3
 | 
			
		||||
#define GLIBTOP_FSUSAGE_FFREE		4
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_MAX_FSUSAGE		5
 | 
			
		||||
 | 
			
		||||
typedef struct _glibtop_fsusage		glibtop_fsusage;
 | 
			
		||||
 | 
			
		||||
struct _glibtop_fsusage
 | 
			
		||||
{
 | 
			
		||||
	u_int64_t	flags,
 | 
			
		||||
		blocks,		/* Total blocks. */
 | 
			
		||||
		bfree,		/* Free blocks available to superuser. */
 | 
			
		||||
		bavail,		/* Free blocks available to non-superuser. */
 | 
			
		||||
		files,		/* Total file nodes. */
 | 
			
		||||
		ffree;		/* Free file nodes. */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define glibtop_get_fsusage(fsusage,disk)	glibtop_get_fsusage_l(glibtop_global_server, fsusage, disk)
 | 
			
		||||
 | 
			
		||||
#define glibtop_get_fsusage_r		glibtop_get_fsusage_s
 | 
			
		||||
 | 
			
		||||
void glibtop_get_fsusage_l (glibtop *server, glibtop_fsusage *buf, const char *mount_dir);
 | 
			
		||||
void glibtop_get_fsusage_s (glibtop *server, glibtop_fsusage *buf, const char *mount_dir);
 | 
			
		||||
 | 
			
		||||
#ifdef GLIBTOP_NAMES
 | 
			
		||||
 | 
			
		||||
/* You need to link with -lgtop_names to get this stuff here. */
 | 
			
		||||
 | 
			
		||||
extern const char *glibtop_names_fsusage [];
 | 
			
		||||
extern const unsigned glibtop_types_fsusage [];
 | 
			
		||||
extern const char *glibtop_labels_fsusage [];
 | 
			
		||||
extern const char *glibtop_descriptions_fsusage [];
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
END_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										142
									
								
								include/glibtop/global.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										142
									
								
								include/glibtop/global.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,142 @@
 | 
			
		||||
/* $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_GLOBAL_H__
 | 
			
		||||
#define __GLIBTOP_GLOBAL_H__
 | 
			
		||||
 | 
			
		||||
#ifdef _IN_LIBGTOP
 | 
			
		||||
#include <config.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * All declarations are enclosed in BEGIN_LIBGTOP_DECLS and
 | 
			
		||||
 * END_LIBGTOP_DECLS so that C++ compilers don't mangle their names.
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
   
 | 
			
		||||
#undef BEGIN_LIBGTOP_DECLS
 | 
			
		||||
#undef END_LIBGTOP_DECLS
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
# define BEGIN_LIBGTOP_DECLS extern "C" {
 | 
			
		||||
# define END_LIBGTOP_DECLS }
 | 
			
		||||
#else
 | 
			
		||||
# define BEGIN_LIBGTOP_DECLS /* empty */
 | 
			
		||||
# define END_LIBGTOP_DECLS /* empty */
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef _IN_LIBGTOP
 | 
			
		||||
 | 
			
		||||
/* Provide macros to feature the GCC function attribute.
 | 
			
		||||
 */
 | 
			
		||||
#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 4)
 | 
			
		||||
#define G_GNUC_NORETURN				\
 | 
			
		||||
  __attribute__((noreturn))
 | 
			
		||||
#define G_GNUC_CONST				\
 | 
			
		||||
  __attribute__((const))
 | 
			
		||||
#define G_GNUC_UNUSED				\
 | 
			
		||||
  __attribute__((unused))
 | 
			
		||||
#else	/* !__GNUC__ */
 | 
			
		||||
#define G_GNUC_NORETURN
 | 
			
		||||
#define G_GNUC_CONST
 | 
			
		||||
#define	G_GNUC_UNUSED
 | 
			
		||||
#endif	/* !__GNUC__ */
 | 
			
		||||
 | 
			
		||||
#endif /* _IN_LIBGTOP */
 | 
			
		||||
 | 
			
		||||
#if TIME_WITH_SYS_TIME
 | 
			
		||||
# include <sys/time.h>
 | 
			
		||||
# include <time.h>
 | 
			
		||||
#else
 | 
			
		||||
# if HAVE_SYS_TIME_H
 | 
			
		||||
#  include <sys/time.h>
 | 
			
		||||
# else
 | 
			
		||||
#  include <time.h>
 | 
			
		||||
# endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef NEED_GNOMESUPPORT_H
 | 
			
		||||
#include <gnomesupport.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef WITHOUT_GUILE
 | 
			
		||||
#undef GLIBTOP_GUILE
 | 
			
		||||
#undef GLIBTOP_GUILE_NAMES
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef GLIBTOP_GUILE
 | 
			
		||||
#include <guile/gh.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef _IN_LIBGTOP
 | 
			
		||||
#if (defined HAVE_LIBINTL_H) || (defined HAVE_GETTEXT)
 | 
			
		||||
#include <libintl.h>
 | 
			
		||||
#else
 | 
			
		||||
#include <libgettext.h>
 | 
			
		||||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
 | 
			
		||||
#include <stdarg.h>
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_UNISTD_H
 | 
			
		||||
#include <unistd.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_MEMORY_H
 | 
			
		||||
#include <memory.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <string.h>
 | 
			
		||||
 | 
			
		||||
#ifdef _IN_LIBGTOP
 | 
			
		||||
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#include <sys/param.h>
 | 
			
		||||
#include <sys/socket.h>
 | 
			
		||||
#include <sys/stat.h>
 | 
			
		||||
 | 
			
		||||
#endif /* _IN_LIBGTOP */
 | 
			
		||||
 | 
			
		||||
#include <signal.h>
 | 
			
		||||
#include <errno.h>
 | 
			
		||||
 | 
			
		||||
#ifdef _IN_LIBGTOP
 | 
			
		||||
 | 
			
		||||
BEGIN_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#ifndef _
 | 
			
		||||
#define _(String) dgettext (PACKAGE, String)
 | 
			
		||||
#define N_(String) (String)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef HAVE_STRERROR
 | 
			
		||||
char *strerror (int errno);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
END_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#endif /* _IN_LIBGTOP */
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										161
									
								
								include/glibtop/gnuserv.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										161
									
								
								include/glibtop/gnuserv.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,161 @@
 | 
			
		||||
/* -*-C-*-
 | 
			
		||||
 | 
			
		||||
 Header file for the GNU Emacs server and client C code.
 | 
			
		||||
 | 
			
		||||
 This file is part of GNU Emacs.
 | 
			
		||||
 | 
			
		||||
 Copying is permitted under those conditions described by the GNU
 | 
			
		||||
 General Public License.
 | 
			
		||||
 | 
			
		||||
 Copyright (C) 1989 Free Software Foundation, Inc.
 | 
			
		||||
 | 
			
		||||
 Author: Andy Norman (ange@hplb.hpl.hp.com), based on 
 | 
			
		||||
         'etc/server.c' and 'etc/emacsclient.c' from the 18.52 GNU
 | 
			
		||||
         Emacs distribution.
 | 
			
		||||
 | 
			
		||||
 Please mail bugs and suggestions to the author at the above address.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
/* HISTORY 
 | 
			
		||||
 * 11-Nov-1990		bristor@simba	
 | 
			
		||||
 *    Added EOT stuff.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * This file incorporates new features added by Bob Weiner <weiner@mot.com>,
 | 
			
		||||
 * Darrell Kindred <dkindred@cmu.edu> and Arup Mukherjee <arup@cmu.edu>.
 | 
			
		||||
 * Please see the note at the end of the README file for details.
 | 
			
		||||
 *
 | 
			
		||||
 * (If gnuserv came bundled with your emacs, the README file is probably
 | 
			
		||||
 * ../etc/gnuserv.README relative to the directory containing this file)
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#if 0
 | 
			
		||||
static char header_rcsid [] = "!Header: gnuserv.h,v 2.4 95/02/16 11:58:11 arup alpha !";
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define NO_SHORTNAMES
 | 
			
		||||
 | 
			
		||||
#define PATCHLEVEL 2
 | 
			
		||||
 | 
			
		||||
#define NO_SHORTNAMES
 | 
			
		||||
/* gnuserv should not be compiled using SOCKS */
 | 
			
		||||
#define DO_NOT_SOCKSIFY
 | 
			
		||||
#include <glibtop.h>
 | 
			
		||||
#include <glibtop/error.h>
 | 
			
		||||
#undef read
 | 
			
		||||
#undef write
 | 
			
		||||
#undef open
 | 
			
		||||
#undef close
 | 
			
		||||
#undef signal
 | 
			
		||||
 | 
			
		||||
/* Define the communication method between server and clients:
 | 
			
		||||
 *   You can have either or both kinds of sockets, but you can't mix
 | 
			
		||||
 *   sockets with sysv ipc
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#define INTERNET_DOMAIN_SOCKETS
 | 
			
		||||
#define UNIX_DOMAIN_SOCKETS
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Define additional authentication protocols to be used. These methods will
 | 
			
		||||
 * be tried before falling back to the default gnuserv protocol (based on
 | 
			
		||||
 * the GNU_SECURE environment variable). Currently, only MIT-MAGIC-COOKIE-1
 | 
			
		||||
 * is also supported.
 | 
			
		||||
 *
 | 
			
		||||
 * Comment out the next line(s) if you don't want to enable the
 | 
			
		||||
 * appropriate authentication protocol.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#if defined (HAVE_XAUTH)
 | 
			
		||||
#define AUTH_MAGIC_COOKIE
 | 
			
		||||
#endif /* HAVE_XAUTH */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * stuff related to supporting MIT-MAGIC-COOKIE-1
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#if 0
 | 
			
		||||
#define MCOOKIE_SCREEN "42980"   /* screen # to use as the gnuserv cookie */ 
 | 
			
		||||
#endif
 | 
			
		||||
#define MCOOKIE_NAME   "MAGIC-1" /* authentication protocol name */
 | 
			
		||||
#define MCOOKIE_X_NAME "MIT-MAGIC-COOKIE-1"  /* as needed by X */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define DEFAUTH_NAME "GNU-SECURE"  /* name of default auth protocol */
 | 
			
		||||
#define AUTH_TIMEOUT  15           /* # seconds to wait for auth data */
 | 
			
		||||
#define AUTH_NAMESZ   15           /* max allows auth protocol name size */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Pick a default communication scheme, if none was specified.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#if !defined(UNIX_DOMAIN_SOCKETS) && !defined(INTERNET_DOMAIN_SOCKETS)
 | 
			
		||||
 | 
			
		||||
/* BSD systems use Unix Domain sockets by default */
 | 
			
		||||
 | 
			
		||||
#ifdef BSD
 | 
			
		||||
#define UNIX_DOMAIN_SOCKETS
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* No communication method pre-defined */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * If you are using SYSV_IPC, you might want to make the buffer size bigger
 | 
			
		||||
 * since it limits the size of requests and responses. Don't make it bigger
 | 
			
		||||
 * than your system's max message size though (usually a couple of k) or else
 | 
			
		||||
 * msgsend will start failing. For sockets, using the system BUFSIZ is usually
 | 
			
		||||
 * what you want. 
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#if defined(INTERNET_DOMAIN_SOCKETS) || defined(UNIX_DOMAIN_SOCKETS)
 | 
			
		||||
#include <sys/socket.h>
 | 
			
		||||
#endif /* INTERNET_DOMAIN_SOCKETS || UNIX_DOMAIN_SOCKETS */
 | 
			
		||||
 | 
			
		||||
#ifdef INTERNET_DOMAIN_SOCKETS
 | 
			
		||||
#include <netdb.h>
 | 
			
		||||
#include <netinet/in.h>
 | 
			
		||||
#include <arpa/inet.h>
 | 
			
		||||
#define TABLE_SIZE 101		/* The number of entries in the hash table */
 | 
			
		||||
#define HASH(host) host		/* Rather simplistic hash function */
 | 
			
		||||
#define DEFAULT_PORT 21490	/* default port number to use is
 | 
			
		||||
				 * DEFAULT_PORT + uid */
 | 
			
		||||
#endif /* INTERNET_DOMAIN_SOCKETS */
 | 
			
		||||
 | 
			
		||||
#ifdef UNIX_DOMAIN_SOCKETS
 | 
			
		||||
#include <sys/un.h>
 | 
			
		||||
#define HIDE_UNIX_SOCKET	/* put the unix socket in a protected dir */
 | 
			
		||||
#endif /* UNIX_DOMAIN_SOCKETS */
 | 
			
		||||
 | 
			
		||||
#define HOSTNAMSZ 255		/* max size of a hostname */
 | 
			
		||||
#define REPLYSIZ 300		/* max size of reply from server to client */
 | 
			
		||||
#undef FALSE
 | 
			
		||||
#define FALSE 0
 | 
			
		||||
#undef TRUE
 | 
			
		||||
#define TRUE 1
 | 
			
		||||
 | 
			
		||||
/* The casts shut Sun's compiler up and are safe in the context these
 | 
			
		||||
   are actually used. */
 | 
			
		||||
#define max2(x,y) (((int) (x) > (int) (y)) ? (x) : (y))
 | 
			
		||||
#define min2(x,y) (((int) (x) < (int) (y)) ? (x) : (y))
 | 
			
		||||
 | 
			
		||||
#ifndef _NFILE            /* rough guess at maximum number of open files */
 | 
			
		||||
#define _NFILE 20
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define EOT_STR "\004"
 | 
			
		||||
#define EOT_CHR '\004'
 | 
			
		||||
 | 
			
		||||
/* connection types */
 | 
			
		||||
#define CONN_UNIX     0
 | 
			
		||||
#define CONN_INTERNET 1
 | 
			
		||||
#define CONN_IPC      2
 | 
			
		||||
 | 
			
		||||
/* function declarations */
 | 
			
		||||
int glibtop_make_connection (const char *hostarg, int portarg, int *s);
 | 
			
		||||
 | 
			
		||||
#ifdef INTERNET_DOMAIN_SOCKETS
 | 
			
		||||
long glibtop_internet_addr (const char *host);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										67
									
								
								include/glibtop/inodedb.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								include/glibtop/inodedb.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,67 @@
 | 
			
		||||
/* 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_INODEDB_H__
 | 
			
		||||
#define __GLIBTOP_INODEDB_H__
 | 
			
		||||
 | 
			
		||||
#include <glibtop.h>
 | 
			
		||||
#include <gdbm.h>
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_INODEDB_SYSTEM		1
 | 
			
		||||
#define GLIBTOP_INODEDB_USER		2
 | 
			
		||||
#define GLIBTOP_INODEDB_CACHE		4
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_INODEDB_ALL		7
 | 
			
		||||
 | 
			
		||||
BEGIN_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
typedef struct _glibtop_inodedb		glibtop_inodedb;
 | 
			
		||||
 | 
			
		||||
typedef struct _glibtop_inodedb_key	glibtop_inodedb_key;
 | 
			
		||||
 | 
			
		||||
struct _glibtop_inodedb_key
 | 
			
		||||
{
 | 
			
		||||
	u_int64_t device, inode;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct _glibtop_inodedb
 | 
			
		||||
{
 | 
			
		||||
	GDBM_FILE system_dbf, user_dbf;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define glibtop_inodedb_open(p1,p2)	glibtop_inodedb_open_s(glibtop_global_server, p1, p2)
 | 
			
		||||
#define glibtop_inodedb_lookup(p1,p2,p3) glibtop_inodedb_lookup_s(glibtop_global_server, p1, p2, p3)
 | 
			
		||||
#define glibtop_inodedb_close(p1)	glibtop_inodedb_close_s(glibtop_global_server)
 | 
			
		||||
 | 
			
		||||
glibtop_inodedb *
 | 
			
		||||
glibtop_inodedb_open_s (glibtop *server, unsigned databases, unsigned long cache_size);
 | 
			
		||||
 | 
			
		||||
const char *
 | 
			
		||||
glibtop_inodedb_lookup_s (glibtop *server,
 | 
			
		||||
			  glibtop_inodedb *inodedb,
 | 
			
		||||
			  u_int64_t device, u_int64_t inode);
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
glibtop_inodedb_close_s (glibtop *server, glibtop_inodedb *inodedb);
 | 
			
		||||
 | 
			
		||||
END_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										38
									
								
								include/glibtop/limits.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								include/glibtop/limits.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,38 @@
 | 
			
		||||
/* -*- 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_LIMITS_H__
 | 
			
		||||
#define __GLIBTOP_LIMITS_H__
 | 
			
		||||
 | 
			
		||||
#include <glibtop/global.h>
 | 
			
		||||
 | 
			
		||||
BEGIN_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
/* Nobody should really be using more than 64 processors. */
 | 
			
		||||
#define GLIBTOP_NCPU		64
 | 
			
		||||
 | 
			
		||||
END_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										81
									
								
								include/glibtop/loadavg.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										81
									
								
								include/glibtop/loadavg.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,81 @@
 | 
			
		||||
/* $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_LOADAVG_H__
 | 
			
		||||
#define __GLIBTOP_LOADAVG_H__
 | 
			
		||||
 | 
			
		||||
#include <glibtop.h>
 | 
			
		||||
#include <glibtop/global.h>
 | 
			
		||||
 | 
			
		||||
BEGIN_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_LOADAVG_LOADAVG		0
 | 
			
		||||
#define GLIBTOP_LOADAVG_NR_RUNNING	1
 | 
			
		||||
#define GLIBTOP_LOADAVG_NR_TASKS	2
 | 
			
		||||
#define GLIBTOP_LOADAVG_LAST_PID	3
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_MAX_LOADAVG		4
 | 
			
		||||
 | 
			
		||||
typedef struct _glibtop_loadavg	glibtop_loadavg;
 | 
			
		||||
 | 
			
		||||
struct _glibtop_loadavg
 | 
			
		||||
{
 | 
			
		||||
	u_int64_t flags;
 | 
			
		||||
	double loadavg [3];		/* GLIBTOP_LOADAVG_LOADAVG	*/
 | 
			
		||||
	u_int64_t nr_running,		/* GLIBTOP_LOADAVG_NR_RUNNING	*/
 | 
			
		||||
		nr_tasks,		/* GLIBTOP_LOADAVG_NR_TASKS	*/
 | 
			
		||||
		last_pid;		/* GLIBTOP_LOADAVG_LAST_PID	*/
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define glibtop_get_loadavg(loadavg)	glibtop_get_loadavg_l(glibtop_global_server, loadavg)
 | 
			
		||||
 | 
			
		||||
#if GLIBTOP_SUID_LOADAVG
 | 
			
		||||
#define glibtop_get_loadavg_r		glibtop_get_loadavg_p
 | 
			
		||||
#else
 | 
			
		||||
#define glibtop_get_loadavg_r		glibtop_get_loadavg_s
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
void glibtop_get_loadavg_l (glibtop *server, glibtop_loadavg *buf);
 | 
			
		||||
 | 
			
		||||
#if GLIBTOP_SUID_LOADAVG
 | 
			
		||||
void glibtop_init_loadavg_p (glibtop *server);
 | 
			
		||||
void glibtop_get_loadavg_p (glibtop *server, glibtop_loadavg *buf);
 | 
			
		||||
#else
 | 
			
		||||
void glibtop_init_loadavg_s (glibtop *server);
 | 
			
		||||
void glibtop_get_loadavg_s (glibtop *server, glibtop_loadavg *buf);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef GLIBTOP_NAMES
 | 
			
		||||
 | 
			
		||||
/* You need to link with -lgtop_names to get this stuff here. */
 | 
			
		||||
 | 
			
		||||
extern const char *glibtop_names_loadavg [];
 | 
			
		||||
extern const unsigned glibtop_types_loadavg [];
 | 
			
		||||
extern const char *glibtop_labels_loadavg [];
 | 
			
		||||
extern const char *glibtop_descriptions_loadavg [];
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
END_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										89
									
								
								include/glibtop/mem.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								include/glibtop/mem.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,89 @@
 | 
			
		||||
/* $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_MEM_H__
 | 
			
		||||
#define __GLIBTOP_MEM_H__
 | 
			
		||||
 | 
			
		||||
#include <glibtop.h>
 | 
			
		||||
#include <glibtop/global.h>
 | 
			
		||||
 | 
			
		||||
BEGIN_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_MEM_TOTAL	0
 | 
			
		||||
#define GLIBTOP_MEM_USED	1
 | 
			
		||||
#define GLIBTOP_MEM_FREE	2
 | 
			
		||||
#define GLIBTOP_MEM_SHARED	3
 | 
			
		||||
#define GLIBTOP_MEM_BUFFER	4
 | 
			
		||||
#define GLIBTOP_MEM_CACHED	5
 | 
			
		||||
#define GLIBTOP_MEM_USER	6
 | 
			
		||||
#define GLIBTOP_MEM_LOCKED	7
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_MAX_MEM		8
 | 
			
		||||
 | 
			
		||||
typedef struct _glibtop_mem	glibtop_mem;
 | 
			
		||||
 | 
			
		||||
struct _glibtop_mem
 | 
			
		||||
{
 | 
			
		||||
	u_int64_t	flags,
 | 
			
		||||
		total,		/* GLIBTOP_MEM_TOTAL	*/
 | 
			
		||||
		used,		/* GLIBTOP_MEM_USED	*/
 | 
			
		||||
		free,		/* GLIBTOP_MEM_FREE	*/
 | 
			
		||||
		shared,		/* GLIBTOP_MEM_SHARED	*/
 | 
			
		||||
		buffer,		/* GLIBTOP_MEM_BUFFER	*/
 | 
			
		||||
		cached,		/* GLIBTOP_MEM_CACHED	*/
 | 
			
		||||
		user,		/* GLIBTOP_MEM_USER	*/
 | 
			
		||||
		locked;		/* GLIBTOP_MEM_LOCKED	*/
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define glibtop_get_mem(mem)	glibtop_get_mem_l(glibtop_global_server, mem)
 | 
			
		||||
 | 
			
		||||
#if GLIBTOP_SUID_MEM
 | 
			
		||||
#define glibtop_get_mem_r		glibtop_get_mem_p
 | 
			
		||||
#else
 | 
			
		||||
#define glibtop_get_mem_r		glibtop_get_mem_s
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
void glibtop_get_mem_l (glibtop *server, glibtop_mem *buf);
 | 
			
		||||
 | 
			
		||||
#if GLIBTOP_SUID_MEM
 | 
			
		||||
void glibtop_init_mem_p (glibtop *server);
 | 
			
		||||
void glibtop_get_mem_p (glibtop *server, glibtop_mem *buf);
 | 
			
		||||
#else
 | 
			
		||||
void glibtop_init_mem_s (glibtop *server);
 | 
			
		||||
void glibtop_get_mem_s (glibtop *server, glibtop_mem *buf);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef GLIBTOP_NAMES
 | 
			
		||||
 | 
			
		||||
/* You need to link with -lgtop_names to get this stuff here. */
 | 
			
		||||
 | 
			
		||||
extern const char *glibtop_names_mem [];
 | 
			
		||||
extern const unsigned glibtop_types_mem [];
 | 
			
		||||
extern const char *glibtop_labels_mem [];
 | 
			
		||||
extern const char *glibtop_descriptions_mem [];
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
END_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										81
									
								
								include/glibtop/mountlist.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										81
									
								
								include/glibtop/mountlist.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,81 @@
 | 
			
		||||
/* $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_MOUNTLIST_H__
 | 
			
		||||
#define __GLIBTOP_MOUNTLIST_H__
 | 
			
		||||
 | 
			
		||||
#include <glibtop.h>
 | 
			
		||||
#include <glibtop/global.h>
 | 
			
		||||
 | 
			
		||||
BEGIN_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_MOUNTLIST_NUMBER	0
 | 
			
		||||
#define GLIBTOP_MOUNTLIST_TOTAL		1
 | 
			
		||||
#define GLIBTOP_MOUNTLIST_SIZE		2
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_MAX_MOUNTLIST		3
 | 
			
		||||
 | 
			
		||||
typedef struct _glibtop_mountentry	glibtop_mountentry;
 | 
			
		||||
 | 
			
		||||
typedef struct _glibtop_mountlist	glibtop_mountlist;
 | 
			
		||||
 | 
			
		||||
struct _glibtop_mountentry
 | 
			
		||||
{
 | 
			
		||||
	u_int64_t dev;
 | 
			
		||||
	char devname [GLIBTOP_MOUNTENTRY_LEN+1];
 | 
			
		||||
	char mountdir [GLIBTOP_MOUNTENTRY_LEN+1];
 | 
			
		||||
	char type [GLIBTOP_MOUNTENTRY_LEN+1];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct _glibtop_mountlist
 | 
			
		||||
{
 | 
			
		||||
	u_int64_t	flags,
 | 
			
		||||
		number,			/* GLIBTOP_MOUNTLIST_NUMBER	*/
 | 
			
		||||
		total,			/* GLIBTOP_MOUNTLIST_TOTAL	*/
 | 
			
		||||
		size;			/* GLIBTOP_MOUNTLIST_SIZE	*/
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define glibtop_get_mountlist(mountlist,all_fs)	glibtop_get_mountlist_l(glibtop_global_server, mountlist, all_fs)
 | 
			
		||||
 | 
			
		||||
#define glibtop_get_mountlist_r		glibtop_get_mountlist_s
 | 
			
		||||
 | 
			
		||||
glibtop_mountentry *
 | 
			
		||||
glibtop_get_mountlist_l (glibtop *server, glibtop_mountlist *buf, int all_fs);
 | 
			
		||||
 | 
			
		||||
glibtop_mountentry *
 | 
			
		||||
glibtop_get_mountlist_s (glibtop *server, glibtop_mountlist *buf, int all_fs);
 | 
			
		||||
 | 
			
		||||
#ifdef GLIBTOP_NAMES
 | 
			
		||||
 | 
			
		||||
/* You need to link with -lgtop_names to get this stuff here. */
 | 
			
		||||
 | 
			
		||||
extern const char *glibtop_names_mountlist [];
 | 
			
		||||
extern const unsigned glibtop_types_mountlist [];
 | 
			
		||||
extern const char *glibtop_labels_mountlist [];
 | 
			
		||||
extern const char *glibtop_descriptions_mountlist [];
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
END_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										88
									
								
								include/glibtop/msg_limits.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										88
									
								
								include/glibtop/msg_limits.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,88 @@
 | 
			
		||||
/* $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_MSG_LIMITS_H__
 | 
			
		||||
#define __GLIBTOP_MSG_LIMITS_H__
 | 
			
		||||
 | 
			
		||||
#include <glibtop.h>
 | 
			
		||||
#include <glibtop/global.h>
 | 
			
		||||
 | 
			
		||||
BEGIN_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_IPC_MSGPOOL	0
 | 
			
		||||
#define GLIBTOP_IPC_MSGMAP	1
 | 
			
		||||
#define GLIBTOP_IPC_MSGMAX	2
 | 
			
		||||
#define GLIBTOP_IPC_MSGMNB	3
 | 
			
		||||
#define GLIBTOP_IPC_MSGMNI	4
 | 
			
		||||
#define GLIBTOP_IPC_MSGSSZ	5
 | 
			
		||||
#define GLIBTOP_IPC_MSGTQL	6
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_MAX_MSG_LIMITS	7
 | 
			
		||||
 | 
			
		||||
typedef struct _glibtop_msg_limits	glibtop_msg_limits;
 | 
			
		||||
 | 
			
		||||
struct _glibtop_msg_limits
 | 
			
		||||
{
 | 
			
		||||
	u_int64_t	flags,
 | 
			
		||||
		msgpool,	/* GLIBTOP_IPC_MSGPOOL	*/
 | 
			
		||||
		msgmap,		/* GLIBTOP_IPC_MSGMAP	*/
 | 
			
		||||
		msgmax,		/* GLIBTOP_IPC_MSGMAX	*/
 | 
			
		||||
		msgmnb,		/* GLIBTOP_IPC_MSGMNB	*/
 | 
			
		||||
		msgmni,		/* GLIBTOP_IPC_MSGMNI	*/
 | 
			
		||||
		msgssz,		/* GLIBTOP_IPC_MSGSSZ	*/
 | 
			
		||||
		msgtql;		/* GLIBTOP_IPC_MSGTQL	*/
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define glibtop_get_msg_limits(msg)	glibtop_get_msg_limits_l(glibtop_global_server, msg)
 | 
			
		||||
 | 
			
		||||
#if GLIBTOP_SUID_MSG_LIMITS
 | 
			
		||||
#define glibtop_get_msg_limits_r	glibtop_get_msg_limits_p
 | 
			
		||||
#else
 | 
			
		||||
#define glibtop_get_msg_limits_r	glibtop_get_msg_limits_s
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
void glibtop_get_msg_limits_l (glibtop *server, glibtop_msg_limits *buf);
 | 
			
		||||
 | 
			
		||||
#if GLIBTOP_SUID_MSG_LIMITS
 | 
			
		||||
void glibtop_init_msg_limits_p (glibtop *server);
 | 
			
		||||
void glibtop_get_msg_limits_p (glibtop *server, glibtop_msg_limits *buf);
 | 
			
		||||
#else
 | 
			
		||||
void glibtop_init_msg_limits_s (glibtop *server);
 | 
			
		||||
void glibtop_get_msg_limits_s (glibtop *server, glibtop_msg_limits *buf);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef GLIBTOP_NAMES
 | 
			
		||||
 | 
			
		||||
/* You need to link with -lgtop_names to get this stuff here. */
 | 
			
		||||
 | 
			
		||||
extern const char *glibtop_names_msg_limits [];
 | 
			
		||||
extern const unsigned glibtop_types_msg_limits [];
 | 
			
		||||
extern const char *glibtop_labels_msg_limits [];
 | 
			
		||||
extern const char *glibtop_descriptions_msg_limits [];
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
END_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										120
									
								
								include/glibtop/netload.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										120
									
								
								include/glibtop/netload.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,120 @@
 | 
			
		||||
/* $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_NETLOAD_H__
 | 
			
		||||
#define __GLIBTOP_NETLOAD_H__
 | 
			
		||||
 | 
			
		||||
#include <glibtop.h>
 | 
			
		||||
#include <glibtop/global.h>
 | 
			
		||||
 | 
			
		||||
BEGIN_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_NETLOAD_IF_FLAGS	0
 | 
			
		||||
#define GLIBTOP_NETLOAD_MTU		1
 | 
			
		||||
#define GLIBTOP_NETLOAD_SUBNET		2
 | 
			
		||||
#define GLIBTOP_NETLOAD_ADDRESS		3
 | 
			
		||||
#define GLIBTOP_NETLOAD_PACKETS_IN	4
 | 
			
		||||
#define GLIBTOP_NETLOAD_PACKETS_OUT	5
 | 
			
		||||
#define GLIBTOP_NETLOAD_PACKETS_TOTAL	6
 | 
			
		||||
#define GLIBTOP_NETLOAD_BYTES_IN	7
 | 
			
		||||
#define GLIBTOP_NETLOAD_BYTES_OUT	8
 | 
			
		||||
#define GLIBTOP_NETLOAD_BYTES_TOTAL	9
 | 
			
		||||
#define GLIBTOP_NETLOAD_ERRORS_IN	10
 | 
			
		||||
#define GLIBTOP_NETLOAD_ERRORS_OUT	11
 | 
			
		||||
#define GLIBTOP_NETLOAD_ERRORS_TOTAL	12
 | 
			
		||||
#define GLIBTOP_NETLOAD_COLLISIONS	13
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_MAX_NETLOAD		14
 | 
			
		||||
 | 
			
		||||
typedef struct _glibtop_netload	glibtop_netload;
 | 
			
		||||
 | 
			
		||||
enum {
 | 
			
		||||
	GLIBTOP_IF_FLAGS_UP = 1,
 | 
			
		||||
	GLIBTOP_IF_FLAGS_BROADCAST,
 | 
			
		||||
	GLIBTOP_IF_FLAGS_DEBUG,
 | 
			
		||||
	GLIBTOP_IF_FLAGS_LOOPBACK,
 | 
			
		||||
	GLIBTOP_IF_FLAGS_POINTOPOINT,
 | 
			
		||||
	GLIBTOP_IF_FLAGS_RUNNING,
 | 
			
		||||
	GLIBTOP_IF_FLAGS_NOARP,
 | 
			
		||||
	GLIBTOP_IF_FLAGS_PROMISC,
 | 
			
		||||
	GLIBTOP_IF_FLAGS_ALLMULTI,
 | 
			
		||||
	GLIBTOP_IF_FLAGS_OACTIVE,
 | 
			
		||||
	GLIBTOP_IF_FLAGS_SIMPLEX,
 | 
			
		||||
	GLIBTOP_IF_FLAGS_LINK0,
 | 
			
		||||
	GLIBTOP_IF_FLAGS_LINK1,
 | 
			
		||||
	GLIBTOP_IF_FLAGS_LINK2,
 | 
			
		||||
	GLIBTOP_IF_FLAGS_ALTPHYS,
 | 
			
		||||
	GLIBTOP_IF_FLAGS_MULTICAST
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct _glibtop_netload
 | 
			
		||||
{
 | 
			
		||||
	u_int64_t	flags,
 | 
			
		||||
		if_flags,		/* GLIBTOP_NETLOAD_IF_FLAGS	*/
 | 
			
		||||
		mtu,			/* GLIBTOP_NETLOAD_MTU		*/
 | 
			
		||||
		subnet,			/* GLIBTOP_NETLOAD_SUBNET	*/
 | 
			
		||||
		address,		/* GLIBTOP_NETLOAD_ADDRESS	*/
 | 
			
		||||
		packets_in,		/* GLIBTOP_NETLOAD_PACKETS_IN	*/
 | 
			
		||||
		packets_out,		/* GLIBTOP_NETLOAD_PACKETS_OUT	*/
 | 
			
		||||
		packets_total,		/* GLIBTOP_NETLOAD_PACKETS_TOTAL*/
 | 
			
		||||
		bytes_in,		/* GLIBTOP_NETLOAD_BYTES_IN	*/
 | 
			
		||||
		bytes_out,		/* GLIBTOP_NETLOAD_BYTES_OUT	*/
 | 
			
		||||
		bytes_total,		/* GLIBTOP_NETLOAD_BYTES_TOTAL	*/
 | 
			
		||||
		errors_in,		/* GLIBTOP_NETLOAD_ERRORS_IN	*/
 | 
			
		||||
		errors_out,		/* GLIBTOP_NETLOAD_ERRORS_OUT	*/
 | 
			
		||||
		errors_total,		/* GLIBTOP_NETLOAD_ERRORS_TOTAL	*/
 | 
			
		||||
		collisions;		/* GLIBTOP_NETLOAD_COLLISIONS	*/
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define glibtop_get_netload(netload,interface)	glibtop_get_netload_l(glibtop_global_server, netload, interface)
 | 
			
		||||
 | 
			
		||||
#if GLIBTOP_SUID_NETLOAD
 | 
			
		||||
#define glibtop_get_netload_r	glibtop_get_netload_p
 | 
			
		||||
#else
 | 
			
		||||
#define glibtop_get_netload_r	glibtop_get_netload_s
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
void glibtop_get_netload_l (glibtop *server, glibtop_netload *buf, const char *interface);
 | 
			
		||||
 | 
			
		||||
#if GLIBTOP_SUID_NETLOAD
 | 
			
		||||
void glibtop_init_netload_p (glibtop *server);
 | 
			
		||||
void glibtop_get_netload_p (glibtop *server, glibtop_netload *buf, const char *interface);
 | 
			
		||||
#else
 | 
			
		||||
void glibtop_init_netload_s (glibtop *server);
 | 
			
		||||
void glibtop_get_netload_s (glibtop *server, glibtop_netload *buf, const char *interface);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef GLIBTOP_NAMES
 | 
			
		||||
 | 
			
		||||
/* You need to link with -lgtop_names to get this stuff here. */
 | 
			
		||||
 | 
			
		||||
extern const char *glibtop_names_netload [];
 | 
			
		||||
extern const unsigned glibtop_types_netload [];
 | 
			
		||||
extern const char *glibtop_labels_netload [];
 | 
			
		||||
extern const char *glibtop_descriptions_netload [];
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
END_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										73
									
								
								include/glibtop/open.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								include/glibtop/open.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,73 @@
 | 
			
		||||
/* 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_OPEN_H__
 | 
			
		||||
#define __GLIBTOP_OPEN_H__
 | 
			
		||||
 | 
			
		||||
#include <glibtop.h>
 | 
			
		||||
#include <glibtop/read.h>
 | 
			
		||||
#include <glibtop/error.h>
 | 
			
		||||
 | 
			
		||||
BEGIN_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#define _GLIBTOP_INIT_STATE_INIT	0x10000
 | 
			
		||||
#define _GLIBTOP_INIT_STATE_OPEN	0x20000
 | 
			
		||||
#define _GLIBTOP_INIT_STATE_SERVER	0x40000
 | 
			
		||||
#define _GLIBTOP_INIT_STATE_SYSDEPS	0x80000
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_INIT_NO_OPEN		1
 | 
			
		||||
#define GLIBTOP_INIT_NO_INIT		2
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_FEATURES_NO_SERVER	4
 | 
			
		||||
#define GLIBTOP_FEATURES_EXCEPT		8
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_METHOD_DIRECT		1
 | 
			
		||||
#define GLIBTOP_METHOD_PIPE		2
 | 
			
		||||
#define GLIBTOP_METHOD_INET		3
 | 
			
		||||
#define GLIBTOP_METHOD_UNIX		4
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_ERROR_METHOD_IGNORE	0
 | 
			
		||||
#define GLIBTOP_ERROR_METHOD_WARN_ONCE	1
 | 
			
		||||
#define GLIBTOP_ERROR_METHOD_WARN	2
 | 
			
		||||
#define GLIBTOP_ERROR_METHOD_ABORT	3
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_ERROR_METHOD_DEFAULT	GLIBTOP_ERROR_METHOD_WARN_ONCE
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
glibtop_open_l (glibtop *server, const char *program_name,
 | 
			
		||||
		const unsigned long features, const unsigned flags);
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
glibtop_init_p (glibtop *server, const unsigned long features,
 | 
			
		||||
		const unsigned flags);
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
glibtop_open_p (glibtop *server, const char *program_name,
 | 
			
		||||
		const unsigned long features, const unsigned flags);
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
glibtop_open_s (glibtop *server, const char *program_name,
 | 
			
		||||
		const unsigned long features, const unsigned flags);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
END_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										51
									
								
								include/glibtop/parameter.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								include/glibtop/parameter.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,51 @@
 | 
			
		||||
/* 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_PARAMETER_H__
 | 
			
		||||
#define __GLIBTOP_PARAMETER_H__
 | 
			
		||||
 | 
			
		||||
#include <glibtop.h>
 | 
			
		||||
#include <glibtop/open.h>
 | 
			
		||||
 | 
			
		||||
BEGIN_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_PARAM_METHOD		1
 | 
			
		||||
#define GLIBTOP_PARAM_FEATURES		2
 | 
			
		||||
#define GLIBTOP_PARAM_COMMAND		3
 | 
			
		||||
#define GLIBTOP_PARAM_HOST		4
 | 
			
		||||
#define GLIBTOP_PARAM_PORT		5
 | 
			
		||||
#define GLIBTOP_PARAM_ERROR_METHOD	6
 | 
			
		||||
#define GLIBTOP_PARAM_REQUIRED		7
 | 
			
		||||
 | 
			
		||||
#define glibtop_get_parameter(p1,p2,p3)	glibtop_get_parameter_l(glibtop_global_server,p1,p2,p3)
 | 
			
		||||
#define glibtop_set_parameter(p1,p2,p3) glibtop_set_parameter_l(glibtop_global_server,p1,p2,p3)
 | 
			
		||||
 | 
			
		||||
size_t
 | 
			
		||||
glibtop_get_parameter_l (glibtop *server, const unsigned parameter,
 | 
			
		||||
			 void *data_ptr, size_t data_size);
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
glibtop_set_parameter_l (glibtop *server, const unsigned parameter,
 | 
			
		||||
			 const void *data_ptr, size_t data_size);
 | 
			
		||||
 | 
			
		||||
END_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										85
									
								
								include/glibtop/ppp.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										85
									
								
								include/glibtop/ppp.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,85 @@
 | 
			
		||||
/* $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_PPP_H__
 | 
			
		||||
#define __GLIBTOP_PPP_H__
 | 
			
		||||
 | 
			
		||||
#include <glibtop.h>
 | 
			
		||||
#include <glibtop/global.h>
 | 
			
		||||
 | 
			
		||||
BEGIN_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_PPP_STATE	0
 | 
			
		||||
#define GLIBTOP_PPP_BYTES_IN	1	
 | 
			
		||||
#define GLIBTOP_PPP_BYTES_OUT	2
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_MAX_PPP		3
 | 
			
		||||
 | 
			
		||||
typedef struct _glibtop_ppp	glibtop_ppp;
 | 
			
		||||
 | 
			
		||||
enum {
 | 
			
		||||
	GLIBTOP_PPP_STATE_UNKNOWN = 0,
 | 
			
		||||
	GLIBTOP_PPP_STATE_HANGUP,
 | 
			
		||||
	GLIBTOP_PPP_STATE_ONLINE
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct _glibtop_ppp
 | 
			
		||||
{
 | 
			
		||||
	u_int64_t	flags,
 | 
			
		||||
		state,			/* GLIBTOP_PPP_STATE		*/
 | 
			
		||||
		bytes_in,		/* GLIBTOP_PPP_BYTES_IN		*/
 | 
			
		||||
		bytes_out;		/* GLIBTOP_PPP_BYTES_OUT	*/
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define glibtop_get_ppp(ppp,device)	glibtop_get_ppp_l(glibtop_global_server, ppp, device)
 | 
			
		||||
 | 
			
		||||
#if GLIBTOP_SUID_PPP
 | 
			
		||||
#define glibtop_get_ppp_r	glibtop_get_ppp_p
 | 
			
		||||
#else
 | 
			
		||||
#define glibtop_get_ppp_r	glibtop_get_ppp_s
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
void glibtop_get_ppp_l (glibtop *server, glibtop_ppp *buf, unsigned short device);
 | 
			
		||||
 | 
			
		||||
#if GLIBTOP_SUID_PPP
 | 
			
		||||
void glibtop_init_ppp_p (glibtop *server);
 | 
			
		||||
void glibtop_get_ppp_p (glibtop *server, glibtop_ppp *buf, unsigned short device);
 | 
			
		||||
#else
 | 
			
		||||
void glibtop_init_ppp_s (glibtop *server);
 | 
			
		||||
void glibtop_get_ppp_s (glibtop *server, glibtop_ppp *buf, unsigned short device);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef GLIBTOP_NAMES
 | 
			
		||||
 | 
			
		||||
/* You need to link with -lgtop_names to get this stuff here. */
 | 
			
		||||
 | 
			
		||||
extern const char *glibtop_names_ppp [];
 | 
			
		||||
extern const unsigned glibtop_types_ppp [];
 | 
			
		||||
extern const char *glibtop_labels_ppp [];
 | 
			
		||||
extern const char *glibtop_descriptions_ppp [];
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
END_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										83
									
								
								include/glibtop/procargs.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										83
									
								
								include/glibtop/procargs.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,83 @@
 | 
			
		||||
/* $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_PROC_ARGS_H__
 | 
			
		||||
#define __GLIBTOP_PROC_ARGS_H__
 | 
			
		||||
 | 
			
		||||
#include <glibtop.h>
 | 
			
		||||
#include <glibtop/global.h>
 | 
			
		||||
 | 
			
		||||
BEGIN_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_PROC_ARGS_SIZE		0
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_MAX_PROC_ARGS		1
 | 
			
		||||
 | 
			
		||||
typedef struct _glibtop_proc_args	glibtop_proc_args;
 | 
			
		||||
 | 
			
		||||
struct _glibtop_proc_args
 | 
			
		||||
{
 | 
			
		||||
	u_int64_t	flags,
 | 
			
		||||
		size;			/* GLIBTOP_PROC_ARGS_SIZE	*/
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define glibtop_get_proc_args(proc_args,pid,max_len) glibtop_get_proc_args_l(glibtop_global_server, proc_args, pid, max_len)
 | 
			
		||||
 | 
			
		||||
#if GLIBTOP_SUID_PROC_ARGS
 | 
			
		||||
#define glibtop_get_proc_args_r		glibtop_get_proc_args_p
 | 
			
		||||
#else
 | 
			
		||||
#define glibtop_get_proc_args_r		glibtop_get_proc_args_s
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
char *
 | 
			
		||||
glibtop_get_proc_args_l (glibtop *server, glibtop_proc_args *buf,
 | 
			
		||||
			 pid_t pid, unsigned max_len);
 | 
			
		||||
 | 
			
		||||
#if GLIBTOP_SUID_PROC_ARGS
 | 
			
		||||
void glibtop_init_proc_args_p (glibtop *server);
 | 
			
		||||
 | 
			
		||||
char *
 | 
			
		||||
glibtop_get_proc_args_p (glibtop *server, glibtop_proc_args *buf,
 | 
			
		||||
			 pid_t pid, unsigned max_len);
 | 
			
		||||
#else
 | 
			
		||||
void glibtop_init_proc_args_s (glibtop *server);
 | 
			
		||||
 | 
			
		||||
char *
 | 
			
		||||
glibtop_get_proc_args_s (glibtop *server, glibtop_proc_args *buf,
 | 
			
		||||
			 pid_t pid, unsigned max_len);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef GLIBTOP_NAMES
 | 
			
		||||
 | 
			
		||||
/* You need to link with -lgtop_names to get this stuff here. */
 | 
			
		||||
 | 
			
		||||
extern const char *glibtop_names_proc_args [];
 | 
			
		||||
extern const unsigned glibtop_types_proc_args [];
 | 
			
		||||
extern const char *glibtop_labels_proc_args [];
 | 
			
		||||
extern const char *glibtop_descriptions_proc_args [];
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
END_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										98
									
								
								include/glibtop/prockernel.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										98
									
								
								include/glibtop/prockernel.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,98 @@
 | 
			
		||||
/* $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_PROCKERNEL_H__
 | 
			
		||||
#define __GLIBTOP_PROCKERNEL_H__
 | 
			
		||||
 | 
			
		||||
#include <glibtop.h>
 | 
			
		||||
#include <glibtop/global.h>
 | 
			
		||||
 | 
			
		||||
BEGIN_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_PROC_KERNEL_K_FLAGS	0
 | 
			
		||||
#define GLIBTOP_PROC_KERNEL_MIN_FLT	1
 | 
			
		||||
#define GLIBTOP_PROC_KERNEL_MAJ_FLT	2
 | 
			
		||||
#define GLIBTOP_PROC_KERNEL_CMIN_FLT	3
 | 
			
		||||
#define GLIBTOP_PROC_KERNEL_CMAJ_FLT	4
 | 
			
		||||
#define GLIBTOP_PROC_KERNEL_KSTK_ESP	5
 | 
			
		||||
#define GLIBTOP_PROC_KERNEL_KSTK_EIP	6
 | 
			
		||||
#define GLIBTOP_PROC_KERNEL_NWCHAN	7
 | 
			
		||||
#define GLIBTOP_PROC_KERNEL_WCHAN	8
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_MAX_PROC_KERNEL		9
 | 
			
		||||
 | 
			
		||||
typedef struct _glibtop_proc_kernel	glibtop_proc_kernel;
 | 
			
		||||
 | 
			
		||||
/* Kernel stuff */
 | 
			
		||||
 | 
			
		||||
struct _glibtop_proc_kernel
 | 
			
		||||
{
 | 
			
		||||
	u_int64_t flags;
 | 
			
		||||
	u_int64_t k_flags,	/* kernel flags for the process */
 | 
			
		||||
		min_flt,	/* number of minor page faults since
 | 
			
		||||
				 * process start */
 | 
			
		||||
		maj_flt,	/* number of major page faults since
 | 
			
		||||
				 * process start */
 | 
			
		||||
		cmin_flt,	/* cumulative min_flt of process and
 | 
			
		||||
				 * child processes */
 | 
			
		||||
		cmaj_flt,	/* cumulative maj_flt of process and
 | 
			
		||||
				 * child processes */
 | 
			
		||||
		kstk_esp,	/* kernel stack pointer */
 | 
			
		||||
		kstk_eip,	/* kernel stack pointer */
 | 
			
		||||
		nwchan;		/* address of kernel wait channel
 | 
			
		||||
				 * proc is sleeping in */
 | 
			
		||||
	char wchan [40];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define glibtop_get_proc_kernel(p1, p2)	glibtop_get_proc_kernel_l(glibtop_global_server, p1, p2)
 | 
			
		||||
 | 
			
		||||
#if GLIBTOP_SUID_PROC_KERNEL
 | 
			
		||||
#define glibtop_get_proc_kernel_r	glibtop_get_proc_kernel_p
 | 
			
		||||
#else
 | 
			
		||||
#define glibtop_get_proc_kernel_r	glibtop_get_proc_kernel_s
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
void glibtop_get_proc_kernel_l (glibtop *server, glibtop_proc_kernel *buf, pid_t pid);
 | 
			
		||||
 | 
			
		||||
#if GLIBTOP_SUID_PROC_KERNEL
 | 
			
		||||
void glibtop_init_proc_kernel_p (glibtop *server);
 | 
			
		||||
void glibtop_get_proc_kernel_p (glibtop *server, glibtop_proc_kernel *buf, pid_t pid);
 | 
			
		||||
#else
 | 
			
		||||
void glibtop_init_proc_kernel_s (glibtop *server);
 | 
			
		||||
void glibtop_get_proc_kernel_s (glibtop *server, glibtop_proc_kernel *buf, pid_t pid);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef GLIBTOP_NAMES
 | 
			
		||||
 | 
			
		||||
/* You need to link with -lgtop_names to get this stuff here. */
 | 
			
		||||
 | 
			
		||||
extern const char *glibtop_names_proc_kernel [];
 | 
			
		||||
extern const unsigned glibtop_types_proc_kernel [];
 | 
			
		||||
extern const char *glibtop_labels_proc_kernel [];
 | 
			
		||||
extern const char *glibtop_descriptions_proc_kernel [];
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
END_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										104
									
								
								include/glibtop/proclist.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										104
									
								
								include/glibtop/proclist.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,104 @@
 | 
			
		||||
/* $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_PROCLIST_H__
 | 
			
		||||
#define __GLIBTOP_PROCLIST_H__
 | 
			
		||||
 | 
			
		||||
#include <glibtop.h>
 | 
			
		||||
#include <glibtop/global.h>
 | 
			
		||||
 | 
			
		||||
BEGIN_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_PROCLIST_NUMBER	0
 | 
			
		||||
#define GLIBTOP_PROCLIST_TOTAL	1
 | 
			
		||||
#define GLIBTOP_PROCLIST_SIZE	2
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_MAX_PROCLIST	3
 | 
			
		||||
 | 
			
		||||
/* You can use the folowing constants as the `which' member of
 | 
			
		||||
 * glibtop_get_proclist () to specify which processes to fetch. */
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_KERN_PROC_ALL		0	/* all processes */
 | 
			
		||||
#define GLIBTOP_KERN_PROC_PID		1
 | 
			
		||||
#define GLIBTOP_KERN_PROC_PGRP		2
 | 
			
		||||
#define GLIBTOP_KERN_PROC_SESSION	3
 | 
			
		||||
#define GLIBTOP_KERN_PROC_TTY		4
 | 
			
		||||
#define GLIBTOP_KERN_PROC_UID		5
 | 
			
		||||
#define GLIBTOP_KERN_PROC_RUID		6
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_KERN_PROC_MASK		15
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_EXCLUDE_IDLE		0x1000
 | 
			
		||||
#define GLIBTOP_EXCLUDE_SYSTEM		0x2000
 | 
			
		||||
#define GLIBTOP_EXCLUDE_NOTTY		0x4000
 | 
			
		||||
 | 
			
		||||
typedef struct _glibtop_proclist	glibtop_proclist;
 | 
			
		||||
 | 
			
		||||
struct _glibtop_proclist
 | 
			
		||||
{
 | 
			
		||||
	u_int64_t	flags,
 | 
			
		||||
		number,			/* GLIBTOP_PROCLIST_NUMBER	*/
 | 
			
		||||
		total,			/* GLIBTOP_PROCLIST_TOTAL	*/
 | 
			
		||||
		size;			/* GLIBTOP_PROCLIST_SIZE	*/
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define glibtop_get_proclist(proclist,which,arg) glibtop_get_proclist_l(glibtop_global_server, proclist, which, arg)
 | 
			
		||||
 | 
			
		||||
#if GLIBTOP_SUID_PROCLIST
 | 
			
		||||
#define glibtop_get_proclist_r		glibtop_get_proclist_p
 | 
			
		||||
#else
 | 
			
		||||
#define glibtop_get_proclist_r		glibtop_get_proclist_s
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
unsigned *
 | 
			
		||||
glibtop_get_proclist_l (glibtop *server, glibtop_proclist *buf,
 | 
			
		||||
			int64_t which, int64_t arg);
 | 
			
		||||
 | 
			
		||||
#if GLIBTOP_SUID_PROCLIST
 | 
			
		||||
void glibtop_init_proclist_p (glibtop *server);
 | 
			
		||||
 | 
			
		||||
unsigned *
 | 
			
		||||
glibtop_get_proclist_p (glibtop *server, glibtop_proclist *buf,
 | 
			
		||||
			int64_t which, int64_t arg);
 | 
			
		||||
#else
 | 
			
		||||
void glibtop_init_proclist_s (glibtop *server);
 | 
			
		||||
 | 
			
		||||
unsigned *
 | 
			
		||||
glibtop_get_proclist_s (glibtop *server, glibtop_proclist *buf,
 | 
			
		||||
			int64_t which, int64_t arg);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef GLIBTOP_NAMES
 | 
			
		||||
 | 
			
		||||
/* You need to link with -lgtop_names to get this stuff here. */
 | 
			
		||||
 | 
			
		||||
extern const char *glibtop_names_proclist [];
 | 
			
		||||
extern const unsigned glibtop_types_proclist [];
 | 
			
		||||
extern const char *glibtop_labels_proclist [];
 | 
			
		||||
extern const char *glibtop_descriptions_proclist [];
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
END_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										110
									
								
								include/glibtop/procmap.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										110
									
								
								include/glibtop/procmap.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,110 @@
 | 
			
		||||
/* $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_PROC_MAP_H__
 | 
			
		||||
#define __GLIBTOP_PROC_MAP_H__
 | 
			
		||||
 | 
			
		||||
#include <glibtop.h>
 | 
			
		||||
#include <glibtop/global.h>
 | 
			
		||||
 | 
			
		||||
BEGIN_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_PROC_MAP_NUMBER		0
 | 
			
		||||
#define GLIBTOP_PROC_MAP_TOTAL		1
 | 
			
		||||
#define GLIBTOP_PROC_MAP_SIZE		2
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_MAX_PROC_MAP		3
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_MAP_ENTRY_START		1
 | 
			
		||||
#define GLIBTOP_MAP_ENTRY_END		2
 | 
			
		||||
#define GLIBTOP_MAP_ENTRY_OFFSET	3
 | 
			
		||||
#define GLIBTOP_MAP_ENTRY_PERM		4
 | 
			
		||||
#define GLIBTOP_MAP_ENTRY_INODE		5
 | 
			
		||||
#define GLIBTOP_MAP_ENTRY_DEVICE	6
 | 
			
		||||
#define GLIBTOP_MAP_ENTRY_FILENAME	7
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_MAX_MAP_ENTRY		8
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_MAP_FILENAME_LEN	215
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_MAP_PERM_READ		1
 | 
			
		||||
#define GLIBTOP_MAP_PERM_WRITE		2
 | 
			
		||||
#define GLIBTOP_MAP_PERM_EXECUTE	4
 | 
			
		||||
#define GLIBTOP_MAP_PERM_SHARED		8
 | 
			
		||||
#define GLIBTOP_MAP_PERM_PRIVATE	16
 | 
			
		||||
 | 
			
		||||
typedef struct _glibtop_map_entry	glibtop_map_entry;
 | 
			
		||||
 | 
			
		||||
typedef struct _glibtop_proc_map	glibtop_proc_map;
 | 
			
		||||
 | 
			
		||||
struct _glibtop_map_entry
 | 
			
		||||
{
 | 
			
		||||
	u_int64_t flags, start, end, offset, perm, inode, device;
 | 
			
		||||
	char filename [GLIBTOP_MAP_FILENAME_LEN+1];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct _glibtop_proc_map
 | 
			
		||||
{
 | 
			
		||||
	u_int64_t	flags,
 | 
			
		||||
		number,			/* GLIBTOP_PROC_MAP_NUMBER	*/
 | 
			
		||||
		total,			/* GLIBTOP_PROC_MAP_TOTAL	*/
 | 
			
		||||
		size;			/* GLIBTOP_PROC_MAP_SIZE	*/
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#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
 | 
			
		||||
#else
 | 
			
		||||
#define glibtop_get_proc_map_r		glibtop_get_proc_map_s
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
glibtop_map_entry *
 | 
			
		||||
glibtop_get_proc_map_l (glibtop *server, glibtop_proc_map *buf, pid_t pid);
 | 
			
		||||
 | 
			
		||||
#if GLIBTOP_SUID_PROC_MAP
 | 
			
		||||
void glibtop_init_proc_map_p (glibtop *server);
 | 
			
		||||
 | 
			
		||||
glibtop_map_entry *
 | 
			
		||||
glibtop_get_proc_map_p (glibtop *server, glibtop_proc_map *buf, pid_t pid);
 | 
			
		||||
#else
 | 
			
		||||
void glibtop_init_proc_map_s (glibtop *server);
 | 
			
		||||
 | 
			
		||||
glibtop_map_entry *
 | 
			
		||||
glibtop_get_proc_map_s (glibtop *server, glibtop_proc_map *buf, pid_t pid);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef GLIBTOP_NAMES
 | 
			
		||||
 | 
			
		||||
/* You need to link with -lgtop_names to get this stuff here. */
 | 
			
		||||
 | 
			
		||||
extern const char *glibtop_names_proc_map [];
 | 
			
		||||
extern const unsigned glibtop_types_proc_map [];
 | 
			
		||||
extern const char *glibtop_labels_proc_map [];
 | 
			
		||||
extern const char *glibtop_descriptions_proc_map [];
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
END_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										89
									
								
								include/glibtop/procmem.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								include/glibtop/procmem.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,89 @@
 | 
			
		||||
/* $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_PROCMEM_H__
 | 
			
		||||
#define __GLIBTOP_PROCMEM_H__
 | 
			
		||||
 | 
			
		||||
#include <glibtop.h>
 | 
			
		||||
#include <glibtop/global.h>
 | 
			
		||||
 | 
			
		||||
BEGIN_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_PROC_MEM_SIZE		0
 | 
			
		||||
#define GLIBTOP_PROC_MEM_VSIZE		1
 | 
			
		||||
#define GLIBTOP_PROC_MEM_RESIDENT	2
 | 
			
		||||
#define GLIBTOP_PROC_MEM_SHARE		3
 | 
			
		||||
#define GLIBTOP_PROC_MEM_RSS		4
 | 
			
		||||
#define GLIBTOP_PROC_MEM_RSS_RLIM	5
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_MAX_PROC_MEM		6
 | 
			
		||||
 | 
			
		||||
typedef struct _glibtop_proc_mem	glibtop_proc_mem;
 | 
			
		||||
 | 
			
		||||
/* Memory section */
 | 
			
		||||
 | 
			
		||||
struct _glibtop_proc_mem
 | 
			
		||||
{
 | 
			
		||||
	u_int64_t	flags,
 | 
			
		||||
		size,		/* total # of pages of memory */
 | 
			
		||||
		vsize,		/* number of pages of virtual memory ... */
 | 
			
		||||
		resident,	/* number of resident set
 | 
			
		||||
				 * (non-swapped) pages (4k) */
 | 
			
		||||
		share,		/* number of pages of shared (mmap'd) memory */
 | 
			
		||||
		rss,		/* resident set size */
 | 
			
		||||
		rss_rlim;	/* current limit (in bytes) of the rss
 | 
			
		||||
				 * 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)
 | 
			
		||||
 | 
			
		||||
#if GLIBTOP_SUID_PROC_MEM
 | 
			
		||||
#define glibtop_get_proc_mem_r		glibtop_get_proc_mem_p
 | 
			
		||||
#else
 | 
			
		||||
#define glibtop_get_proc_mem_r		glibtop_get_proc_mem_s
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
void glibtop_get_proc_mem_l (glibtop *server, glibtop_proc_mem *buf, pid_t pid);
 | 
			
		||||
 | 
			
		||||
#if GLIBTOP_SUID_PROC_MEM
 | 
			
		||||
void glibtop_init_proc_mem_p (glibtop *server);
 | 
			
		||||
void glibtop_get_proc_mem_p (glibtop *server, glibtop_proc_mem *buf, pid_t pid);
 | 
			
		||||
#else
 | 
			
		||||
void glibtop_init_proc_mem_s (glibtop *server);
 | 
			
		||||
void glibtop_get_proc_mem_s (glibtop *server, glibtop_proc_mem *buf, pid_t pid);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef GLIBTOP_NAMES
 | 
			
		||||
 | 
			
		||||
/* You need to link with -lgtop_names to get this stuff here. */
 | 
			
		||||
 | 
			
		||||
extern const char *glibtop_names_proc_mem [];
 | 
			
		||||
extern const unsigned glibtop_types_proc_mem [];
 | 
			
		||||
extern const char *glibtop_labels_proc_mem [];
 | 
			
		||||
extern const char *glibtop_descriptions_proc_mem [];
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
END_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										92
									
								
								include/glibtop/procsegment.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										92
									
								
								include/glibtop/procsegment.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,92 @@
 | 
			
		||||
/* $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_PROCSEGMENT_H__
 | 
			
		||||
#define __GLIBTOP_PROCSEGMENT_H__
 | 
			
		||||
 | 
			
		||||
#include <glibtop.h>
 | 
			
		||||
#include <glibtop/global.h>
 | 
			
		||||
 | 
			
		||||
BEGIN_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_PROC_SEGMENT_TEXT_RSS		0
 | 
			
		||||
#define GLIBTOP_PROC_SEGMENT_SHLIB_RSS		1
 | 
			
		||||
#define GLIBTOP_PROC_SEGMENT_DATA_RSS		2
 | 
			
		||||
#define GLIBTOP_PROC_SEGMENT_STACK_RSS		3
 | 
			
		||||
#define GLIBTOP_PROC_SEGMENT_DIRTY_SIZE		4
 | 
			
		||||
#define GLIBTOP_PROC_SEGMENT_START_CODE		5
 | 
			
		||||
#define GLIBTOP_PROC_SEGMENT_END_CODE		6
 | 
			
		||||
#define GLIBTOP_PROC_SEGMENT_START_STACK	7
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_MAX_PROC_SEGMENT		8
 | 
			
		||||
 | 
			
		||||
typedef struct _glibtop_proc_segment	glibtop_proc_segment;
 | 
			
		||||
 | 
			
		||||
/* Segment stuff */
 | 
			
		||||
 | 
			
		||||
struct _glibtop_proc_segment
 | 
			
		||||
{
 | 
			
		||||
	u_int64_t	flags,
 | 
			
		||||
		text_rss,	/* text resident set size */
 | 
			
		||||
		shlib_rss,	/* shared-lib resident set size */
 | 
			
		||||
		data_rss,	/* data resident set size */
 | 
			
		||||
		stack_rss,	/* stack resident set size */
 | 
			
		||||
		dirty_size,	/* size of dirty pages */
 | 
			
		||||
		start_code,
 | 
			
		||||
				/* address of beginning of code segment */
 | 
			
		||||
		end_code,	/* address of end of code 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)
 | 
			
		||||
 | 
			
		||||
#if GLIBTOP_SUID_PROC_SEGMENT
 | 
			
		||||
#define glibtop_get_proc_segment_r	glibtop_get_proc_segment_p
 | 
			
		||||
#else
 | 
			
		||||
#define glibtop_get_proc_segment_r	glibtop_get_proc_segment_s
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
void glibtop_get_proc_segment_l (glibtop *server, glibtop_proc_segment *buf, pid_t pid);
 | 
			
		||||
 | 
			
		||||
#if GLIBTOP_SUID_PROC_SEGMENT
 | 
			
		||||
void glibtop_init_proc_segment_p (glibtop *server);
 | 
			
		||||
void glibtop_get_proc_segment_p (glibtop *server, glibtop_proc_segment *buf, pid_t pid);
 | 
			
		||||
#else
 | 
			
		||||
void glibtop_init_proc_segment_s (glibtop *server);
 | 
			
		||||
void glibtop_get_proc_segment_s (glibtop *server, glibtop_proc_segment *buf, pid_t pid);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef GLIBTOP_NAMES
 | 
			
		||||
 | 
			
		||||
/* You need to link with -lgtop_names to get this stuff here. */
 | 
			
		||||
 | 
			
		||||
extern const char *glibtop_names_proc_segment [];
 | 
			
		||||
extern const unsigned glibtop_types_proc_segment [];
 | 
			
		||||
extern const char *glibtop_labels_proc_segment [];
 | 
			
		||||
extern const char *glibtop_descriptions_proc_segment [];
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
END_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										83
									
								
								include/glibtop/procsignal.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										83
									
								
								include/glibtop/procsignal.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,83 @@
 | 
			
		||||
/* $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_PROCSIGNAL_H__
 | 
			
		||||
#define __GLIBTOP_PROCSIGNAL_H__
 | 
			
		||||
 | 
			
		||||
#include <glibtop.h>
 | 
			
		||||
#include <glibtop/global.h>
 | 
			
		||||
 | 
			
		||||
BEGIN_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_PROC_SIGNAL_SIGNAL	0
 | 
			
		||||
#define GLIBTOP_PROC_SIGNAL_BLOCKED	1
 | 
			
		||||
#define GLIBTOP_PROC_SIGNAL_SIGIGNORE	2
 | 
			
		||||
#define GLIBTOP_PROC_SIGNAL_SIGCATCH	3
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_MAX_PROC_SIGNAL		4
 | 
			
		||||
 | 
			
		||||
typedef struct _glibtop_proc_signal	glibtop_proc_signal;
 | 
			
		||||
 | 
			
		||||
/* Signals section */
 | 
			
		||||
 | 
			
		||||
struct _glibtop_proc_signal
 | 
			
		||||
{
 | 
			
		||||
	u_int64_t	flags,
 | 
			
		||||
		signal [2],		/* mask of pending signals */
 | 
			
		||||
		blocked [2],		/* mask of blocked signals */
 | 
			
		||||
		sigignore [2],		/* mask of ignored signals */
 | 
			
		||||
		sigcatch [2];		/* mask of caught  signals */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define glibtop_get_proc_signal(p1, p2)	glibtop_get_proc_signal_l(glibtop_global_server, p1, p2)
 | 
			
		||||
 | 
			
		||||
#if GLIBTOP_SUID_PROC_SIGNAL
 | 
			
		||||
#define glibtop_get_proc_signal_r	glibtop_get_proc_signal_p
 | 
			
		||||
#else
 | 
			
		||||
#define glibtop_get_proc_signal_r	glibtop_get_proc_signal_s
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
void glibtop_get_proc_signal_l (glibtop *server, glibtop_proc_signal *buf, pid_t pid);
 | 
			
		||||
 | 
			
		||||
#if GLIBTOP_SUID_PROC_SIGNAL
 | 
			
		||||
void glibtop_init_proc_signal_p (glibtop *server);
 | 
			
		||||
void glibtop_get_proc_signal_p (glibtop *server, glibtop_proc_signal *buf, pid_t pid);
 | 
			
		||||
#else
 | 
			
		||||
void glibtop_init_proc_signal_s (glibtop *server);
 | 
			
		||||
void glibtop_get_proc_signal_s (glibtop *server, glibtop_proc_signal *buf, pid_t pid);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef GLIBTOP_NAMES
 | 
			
		||||
 | 
			
		||||
/* You need to link with -lgtop_names to get this stuff here. */
 | 
			
		||||
 | 
			
		||||
extern const char *glibtop_names_proc_signal [];
 | 
			
		||||
extern const unsigned glibtop_types_proc_signal [];
 | 
			
		||||
extern const char *glibtop_labels_proc_signal [];
 | 
			
		||||
extern const char *glibtop_descriptions_proc_signal [];
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
END_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										90
									
								
								include/glibtop/procstate.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										90
									
								
								include/glibtop/procstate.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,90 @@
 | 
			
		||||
/* $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_PROCSTATE_H__
 | 
			
		||||
#define __GLIBTOP_PROCSTATE_H__
 | 
			
		||||
 | 
			
		||||
#include <glibtop.h>
 | 
			
		||||
#include <glibtop/global.h>
 | 
			
		||||
 | 
			
		||||
BEGIN_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_PROC_STATE_CMD		0
 | 
			
		||||
#define GLIBTOP_PROC_STATE_STATE	1
 | 
			
		||||
#define GLIBTOP_PROC_STATE_UID		2
 | 
			
		||||
#define GLIBTOP_PROC_STATE_GID		3
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_MAX_PROC_STATE		4
 | 
			
		||||
 | 
			
		||||
typedef struct _glibtop_proc_state	glibtop_proc_state;
 | 
			
		||||
 | 
			
		||||
/* Name and status */
 | 
			
		||||
 | 
			
		||||
struct _glibtop_proc_state
 | 
			
		||||
{
 | 
			
		||||
	u_int64_t flags;
 | 
			
		||||
	char cmd[40],		/* basename of executable file in 
 | 
			
		||||
				 * call to exec(2) */
 | 
			
		||||
		state;		/* single-char code for process state
 | 
			
		||||
				 * (S=sleeping) */
 | 
			
		||||
	/* NOTE: when porting the library, TRY HARD to implement the
 | 
			
		||||
	 *       following two fields. */
 | 
			
		||||
	/* IMPORTANT NOTICE: For security reasons, it is extremely important
 | 
			
		||||
	 *                   only to set the flags value for those two
 | 
			
		||||
	 *                   fields if their values are corrent ! */
 | 
			
		||||
	int uid,		/* UID of process */
 | 
			
		||||
		gid;		/* GID of process */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define glibtop_get_proc_state(p1, p2)	glibtop_get_proc_state_l(glibtop_global_server, p1, p2)
 | 
			
		||||
 | 
			
		||||
#if GLIBTOP_SUID_PROC_STATE
 | 
			
		||||
#define glibtop_get_proc_state_r	glibtop_get_proc_state_p
 | 
			
		||||
#else
 | 
			
		||||
#define glibtop_get_proc_state_r	glibtop_get_proc_state_s
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
void glibtop_get_proc_state_l (glibtop *server, glibtop_proc_state *buf, pid_t pid);
 | 
			
		||||
 | 
			
		||||
#if GLIBTOP_SUID_PROC_STATE
 | 
			
		||||
void glibtop_init_proc_state_p (glibtop *server);
 | 
			
		||||
void glibtop_get_proc_state_p (glibtop *server, glibtop_proc_state *buf, pid_t pid);
 | 
			
		||||
#else
 | 
			
		||||
void glibtop_init_proc_state_s (glibtop *server);
 | 
			
		||||
void glibtop_get_proc_state_s (glibtop *server, glibtop_proc_state *buf, pid_t pid);
 | 
			
		||||
#endif
 | 
			
		||||
     
 | 
			
		||||
#ifdef GLIBTOP_NAMES
 | 
			
		||||
 | 
			
		||||
/* You need to link with -lgtop_names to get this stuff here. */
 | 
			
		||||
 | 
			
		||||
extern const char *glibtop_names_proc_state [];
 | 
			
		||||
extern const unsigned glibtop_types_proc_state [];
 | 
			
		||||
extern const char *glibtop_labels_proc_state [];
 | 
			
		||||
extern const char *glibtop_descriptions_proc_state [];
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
END_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										104
									
								
								include/glibtop/proctime.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										104
									
								
								include/glibtop/proctime.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,104 @@
 | 
			
		||||
/* $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_PROCTIME_H__
 | 
			
		||||
#define __GLIBTOP_PROCTIME_H__
 | 
			
		||||
 | 
			
		||||
#include <glibtop.h>
 | 
			
		||||
#include <glibtop/cpu.h>
 | 
			
		||||
#include <glibtop/global.h>
 | 
			
		||||
 | 
			
		||||
BEGIN_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_PROC_TIME_START_TIME	0
 | 
			
		||||
#define GLIBTOP_PROC_TIME_RTIME		1
 | 
			
		||||
#define GLIBTOP_PROC_TIME_UTIME		2
 | 
			
		||||
#define GLIBTOP_PROC_TIME_STIME		3
 | 
			
		||||
#define GLIBTOP_PROC_TIME_CUTIME	4
 | 
			
		||||
#define GLIBTOP_PROC_TIME_CSTIME	5
 | 
			
		||||
#define GLIBTOP_PROC_TIME_TIMEOUT	6
 | 
			
		||||
#define GLIBTOP_PROC_TIME_IT_REAL_VALUE	7
 | 
			
		||||
#define GLIBTOP_PROC_TIME_FREQUENCY	8
 | 
			
		||||
#define GLIBTOP_PROC_TIME_XCPU_UTIME	9
 | 
			
		||||
#define GLIBTOP_PROC_TIME_XCPU_STIME	10
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_MAX_PROC_TIME		11
 | 
			
		||||
 | 
			
		||||
typedef struct _glibtop_proc_time	glibtop_proc_time;
 | 
			
		||||
 | 
			
		||||
/* Time section */
 | 
			
		||||
 | 
			
		||||
struct _glibtop_proc_time
 | 
			
		||||
{
 | 
			
		||||
	u_int64_t	flags,
 | 
			
		||||
		start_time,	/* start time of process -- 
 | 
			
		||||
				 * seconds since 1-1-70 */
 | 
			
		||||
		rtime,		/* real time accumulated by process */
 | 
			
		||||
		utime,		/* user-mode CPU time accumulated by process */
 | 
			
		||||
		stime,		/* kernel-mode CPU time accumulated by process */
 | 
			
		||||
		cutime,		/* cumulative utime of process and 
 | 
			
		||||
				 * reaped children */
 | 
			
		||||
		cstime,		/* cumulative stime of process and 
 | 
			
		||||
				 * reaped children */
 | 
			
		||||
		timeout,	/* The time (in jiffies) of the process's
 | 
			
		||||
				 * next timeout */
 | 
			
		||||
		it_real_value,	/* The time (in jiffies) before the
 | 
			
		||||
				 * next SIGALRM is sent to the process
 | 
			
		||||
				 * due to an interval timer. */
 | 
			
		||||
		frequency,	/* Tick frequency. */
 | 
			
		||||
		xcpu_utime [GLIBTOP_NCPU],	/* utime and stime for all CPUs on */
 | 
			
		||||
		xcpu_stime [GLIBTOP_NCPU];	/* SMP machines. */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define glibtop_get_proc_time(p1, p2)	glibtop_get_proc_time_l(glibtop_global_server, p1, p2)
 | 
			
		||||
 | 
			
		||||
#if GLIBTOP_SUID_PROC_TIME
 | 
			
		||||
#define glibtop_get_proc_time_r	glibtop_get_proc_time_p
 | 
			
		||||
#else
 | 
			
		||||
#define glibtop_get_proc_time_r	glibtop_get_proc_time_s
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
void glibtop_get_proc_time_l (glibtop *server, glibtop_proc_time *buf, pid_t pid);
 | 
			
		||||
 | 
			
		||||
#if GLIBTOP_SUID_PROC_TIME
 | 
			
		||||
void glibtop_init_proc_time_p (glibtop *server);
 | 
			
		||||
void glibtop_get_proc_time_p (glibtop *server, glibtop_proc_time *buf, pid_t pid);
 | 
			
		||||
#else
 | 
			
		||||
void glibtop_init_proc_time_s (glibtop *server);
 | 
			
		||||
void glibtop_get_proc_time_s (glibtop *server, glibtop_proc_time *buf, pid_t pid);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef GLIBTOP_NAMES
 | 
			
		||||
 | 
			
		||||
/* You need to link with -lgtop_names to get this stuff here. */
 | 
			
		||||
 | 
			
		||||
extern const char *glibtop_names_proc_time [];
 | 
			
		||||
extern const unsigned glibtop_types_proc_time [];
 | 
			
		||||
extern const char *glibtop_labels_proc_time [];
 | 
			
		||||
extern const char *glibtop_descriptions_proc_time [];
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
END_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										99
									
								
								include/glibtop/procuid.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										99
									
								
								include/glibtop/procuid.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,99 @@
 | 
			
		||||
/* $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_PROCUID_H__
 | 
			
		||||
#define __GLIBTOP_PROCUID_H__
 | 
			
		||||
 | 
			
		||||
#include <glibtop.h>
 | 
			
		||||
#include <glibtop/global.h>
 | 
			
		||||
 | 
			
		||||
BEGIN_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_PROC_UID_UID		0
 | 
			
		||||
#define GLIBTOP_PROC_UID_EUID		1
 | 
			
		||||
#define GLIBTOP_PROC_UID_GID		2
 | 
			
		||||
#define GLIBTOP_PROC_UID_EGID		3
 | 
			
		||||
#define GLIBTOP_PROC_UID_PID		4
 | 
			
		||||
#define GLIBTOP_PROC_UID_PPID		5
 | 
			
		||||
#define GLIBTOP_PROC_UID_PGRP		6
 | 
			
		||||
#define GLIBTOP_PROC_UID_SESSION	7
 | 
			
		||||
#define GLIBTOP_PROC_UID_TTY		8
 | 
			
		||||
#define GLIBTOP_PROC_UID_TPGID		9
 | 
			
		||||
#define GLIBTOP_PROC_UID_PRIORITY	10
 | 
			
		||||
#define GLIBTOP_PROC_UID_NICE		11
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_MAX_PROC_UID		12
 | 
			
		||||
 | 
			
		||||
typedef struct _glibtop_proc_uid	glibtop_proc_uid;
 | 
			
		||||
 | 
			
		||||
/* User, Group, Terminal and session */
 | 
			
		||||
 | 
			
		||||
struct _glibtop_proc_uid
 | 
			
		||||
{
 | 
			
		||||
	u_int64_t flags;
 | 
			
		||||
	int uid,		/* user id */
 | 
			
		||||
		euid,		/* effective user id */
 | 
			
		||||
		gid,		/* group id */
 | 
			
		||||
		egid,		/* effective group id */
 | 
			
		||||
		pid,		/* process id */
 | 
			
		||||
		ppid,		/* pid of parent process */
 | 
			
		||||
		pgrp,		/* process group id */
 | 
			
		||||
		session,	/* session id */
 | 
			
		||||
		tty,		/* full device number of controlling terminal */
 | 
			
		||||
		tpgid,		/* terminal process group id */
 | 
			
		||||
		priority,	/* kernel scheduling priority */
 | 
			
		||||
		nice;		/* standard unix nice level of process */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define glibtop_get_proc_uid(p1, p2)	glibtop_get_proc_uid_l(glibtop_global_server, p1, p2)
 | 
			
		||||
 | 
			
		||||
#if GLIBTOP_SUID_PROC_UID
 | 
			
		||||
#define glibtop_get_proc_uid_r		glibtop_get_proc_uid_p
 | 
			
		||||
#else
 | 
			
		||||
#define glibtop_get_proc_uid_r		glibtop_get_proc_uid_s
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
void glibtop_get_proc_uid_l (glibtop *server, glibtop_proc_uid *buf, pid_t pid);
 | 
			
		||||
 | 
			
		||||
#if GLIBTOP_SUID_PROC_UID
 | 
			
		||||
void glibtop_init_proc_uid_p (glibtop *server);
 | 
			
		||||
void glibtop_get_proc_uid_p (glibtop *server, glibtop_proc_uid *buf, pid_t pid);
 | 
			
		||||
#else
 | 
			
		||||
void glibtop_init_proc_uid_s (glibtop *server);
 | 
			
		||||
void glibtop_get_proc_uid_s (glibtop *server, glibtop_proc_uid *buf, pid_t pid);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef GLIBTOP_NAMES
 | 
			
		||||
 | 
			
		||||
/* You need to link with -lgtop_names to get this stuff here. */
 | 
			
		||||
 | 
			
		||||
extern const char *glibtop_names_proc_uid [];
 | 
			
		||||
extern const unsigned glibtop_types_proc_uid [];
 | 
			
		||||
extern const char *glibtop_labels_proc_uid [];
 | 
			
		||||
extern const char *glibtop_descriptions_proc_uid [];
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
END_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										39
									
								
								include/glibtop/read.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								include/glibtop/read.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,39 @@
 | 
			
		||||
/* $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_READ_H__
 | 
			
		||||
#define __GLIBTOP_READ_H__
 | 
			
		||||
 | 
			
		||||
#include <glibtop.h>
 | 
			
		||||
#include <glibtop/error.h>
 | 
			
		||||
 | 
			
		||||
BEGIN_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#define glibtop_read(p1, p2)	glibtop_read(glibtop_global_server, p1, p2)
 | 
			
		||||
 | 
			
		||||
void glibtop_read_l (glibtop *server, size_t size, void *buf);
 | 
			
		||||
void glibtop_read_s (glibtop *server, size_t size, void *buf);
 | 
			
		||||
 | 
			
		||||
END_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										39
									
								
								include/glibtop/read_data.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								include/glibtop/read_data.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,39 @@
 | 
			
		||||
/* $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_READ_DATA_H__
 | 
			
		||||
#define __GLIBTOP_READ_DATA_H__
 | 
			
		||||
 | 
			
		||||
#include <glibtop.h>
 | 
			
		||||
#include <glibtop/error.h>
 | 
			
		||||
 | 
			
		||||
BEGIN_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#define glibtop_read_data()	glibtop_read_data_r(glibtop_global_server)
 | 
			
		||||
 | 
			
		||||
void *glibtop_read_data_l (glibtop *server);
 | 
			
		||||
void *glibtop_read_data_s (glibtop *server);
 | 
			
		||||
 | 
			
		||||
END_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										93
									
								
								include/glibtop/sem_limits.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										93
									
								
								include/glibtop/sem_limits.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,93 @@
 | 
			
		||||
/* $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_SEM_LIMITS_H__
 | 
			
		||||
#define __GLIBTOP_SEM_LIMITS_H__
 | 
			
		||||
 | 
			
		||||
#include <glibtop.h>
 | 
			
		||||
#include <glibtop/global.h>
 | 
			
		||||
 | 
			
		||||
BEGIN_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_IPC_SEMMAP	0
 | 
			
		||||
#define GLIBTOP_IPC_SEMMNI	1
 | 
			
		||||
#define GLIBTOP_IPC_SEMMNS	2
 | 
			
		||||
#define GLIBTOP_IPC_SEMMNU	3
 | 
			
		||||
#define GLIBTOP_IPC_SEMMSL	4
 | 
			
		||||
#define GLIBTOP_IPC_SEMOPM	5
 | 
			
		||||
#define GLIBTOP_IPC_SEMUME	6
 | 
			
		||||
#define GLIBTOP_IPC_SEMUSZ	7
 | 
			
		||||
#define GLIBTOP_IPC_SEMVMX	8
 | 
			
		||||
#define GLIBTOP_IPC_SEMAEM	9
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_MAX_SEM_LIMITS	10
 | 
			
		||||
 | 
			
		||||
typedef struct _glibtop_sem_limits	glibtop_sem_limits;
 | 
			
		||||
 | 
			
		||||
struct _glibtop_sem_limits
 | 
			
		||||
{
 | 
			
		||||
	u_int64_t	flags,
 | 
			
		||||
		semmap,		/* GLIBTOP_IPC_SEMMAP	*/
 | 
			
		||||
		semmni,		/* GLIBTOP_IPC_SEMMNI	*/
 | 
			
		||||
		semmns,		/* GLIBTOP_IPC_SEMMNS	*/
 | 
			
		||||
		semmnu,		/* GLIBTOP_IPC_SEMMNU	*/
 | 
			
		||||
		semmsl,		/* GLIBTOP_IPC_SEMMSL	*/
 | 
			
		||||
		semopm,		/* GLIBTOP_IPC_SEMOPM	*/
 | 
			
		||||
		semume,		/* GLIBTOP_IPC_SEMUME	*/
 | 
			
		||||
		semusz,		/* GLIBTOP_IPC_SEMUSZ	*/
 | 
			
		||||
		semvmx,		/* GLIBTOP_IPC_SEMVMX	*/
 | 
			
		||||
		semaem;		/* GLIBTOP_IPC_SEMAEM	*/
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define glibtop_get_sem_limits(sem)	glibtop_get_sem_limits_l(glibtop_global_server, sem)
 | 
			
		||||
 | 
			
		||||
#if GLIBTOP_SUID_SEM_LIMITS
 | 
			
		||||
#define glibtop_get_sem_limits_r	glibtop_get_sem_limits_p
 | 
			
		||||
#else
 | 
			
		||||
#define glibtop_get_sem_limits_r	glibtop_get_sem_limits_s
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
void glibtop_get_sem_limits_l (glibtop *server, glibtop_sem_limits *buf);
 | 
			
		||||
 | 
			
		||||
#if GLIBTOP_SUID_SEM_LIMITS
 | 
			
		||||
void glibtop_init_sem_limits_p (glibtop *server);
 | 
			
		||||
void glibtop_get_sem_limits_p (glibtop *server, glibtop_sem_limits *buf);
 | 
			
		||||
#else
 | 
			
		||||
void glibtop_init_sem_limits_s (glibtop *server);
 | 
			
		||||
void glibtop_get_sem_limits_s (glibtop *server, glibtop_sem_limits *buf);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef GLIBTOP_NAMES
 | 
			
		||||
 | 
			
		||||
/* You need to link with -lgtop_names to get this stuff here. */
 | 
			
		||||
 | 
			
		||||
extern const char *glibtop_names_sem_limits [];
 | 
			
		||||
extern const unsigned glibtop_types_sem_limits [];
 | 
			
		||||
extern const char *glibtop_labels_sem_limits [];
 | 
			
		||||
extern const char *glibtop_descriptions_sem_limits [];
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
END_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										83
									
								
								include/glibtop/shm_limits.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										83
									
								
								include/glibtop/shm_limits.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,83 @@
 | 
			
		||||
/* $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_SHM_LIMITS_H__
 | 
			
		||||
#define __GLIBTOP_SHM_LIMITS_H__
 | 
			
		||||
 | 
			
		||||
#include <glibtop.h>
 | 
			
		||||
#include <glibtop/global.h>
 | 
			
		||||
 | 
			
		||||
BEGIN_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_IPC_SHMMAX	0
 | 
			
		||||
#define GLIBTOP_IPC_SHMMIN	1
 | 
			
		||||
#define GLIBTOP_IPC_SHMMNI	2
 | 
			
		||||
#define GLIBTOP_IPC_SHMSEG	3
 | 
			
		||||
#define GLIBTOP_IPC_SHMALL	4
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_MAX_SHM_LIMITS	5
 | 
			
		||||
 | 
			
		||||
typedef struct _glibtop_shm_limits	glibtop_shm_limits;
 | 
			
		||||
 | 
			
		||||
struct _glibtop_shm_limits
 | 
			
		||||
{
 | 
			
		||||
	u_int64_t	flags,
 | 
			
		||||
		shmmax,		/* GLIBTOP_IPC_SHMMAX	*/
 | 
			
		||||
		shmmin,		/* GLIBTOP_IPC_SHMMIN	*/
 | 
			
		||||
		shmmni,		/* GLIBTOP_IPC_SHMMNI	*/
 | 
			
		||||
		shmseg,		/* GLIBTOP_IPC_SHMSEG	*/
 | 
			
		||||
		shmall;		/* GLIBTOP_IPC_SHMALL	*/
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define glibtop_get_shm_limits(shm)	glibtop_get_shm_limits_l(glibtop_global_server, shm)
 | 
			
		||||
 | 
			
		||||
#if GLIBTOP_SUID_SHM_LIMITS
 | 
			
		||||
#define glibtop_get_shm_limits_r	glibtop_get_shm_limits_p
 | 
			
		||||
#else
 | 
			
		||||
#define glibtop_get_shm_limits_r	glibtop_get_shm_limits_s
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
void glibtop_get_shm_limits_l (glibtop *server, glibtop_shm_limits *buf);
 | 
			
		||||
 | 
			
		||||
#if GLIBTOP_SUID_SHM_LIMITS
 | 
			
		||||
void glibtop_init_shm_limits_p (glibtop *server);
 | 
			
		||||
void glibtop_get_shm_limits_p (glibtop *, glibtop_shm_limits *buf);
 | 
			
		||||
#else
 | 
			
		||||
void glibtop_init_shm_limits_s (glibtop *server);
 | 
			
		||||
void glibtop_get_shm_limits_s (glibtop *server, glibtop_shm_limits *buf);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef GLIBTOP_NAMES
 | 
			
		||||
 | 
			
		||||
/* You need to link with -lgtop_names to get this stuff here. */
 | 
			
		||||
 | 
			
		||||
extern const char *glibtop_names_shm_limits [];
 | 
			
		||||
extern const unsigned glibtop_types_shm_limits [];
 | 
			
		||||
extern const char *glibtop_labels_shm_limits [];
 | 
			
		||||
extern const char *glibtop_descriptions_shm_limits [];
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
END_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										47
									
								
								include/glibtop/signal.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								include/glibtop/signal.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,47 @@
 | 
			
		||||
/* $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_SIGNAL_H__
 | 
			
		||||
#define __GLIBTOP_SIGNAL_H__
 | 
			
		||||
 | 
			
		||||
#include <glibtop.h>
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_SYS_SIGNAL_H
 | 
			
		||||
#include <sys/signal.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
BEGIN_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
typedef struct _glibtop_signame	glibtop_signame;
 | 
			
		||||
 | 
			
		||||
struct _glibtop_signame
 | 
			
		||||
{
 | 
			
		||||
	const int number;
 | 
			
		||||
	const char *name, *label;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
extern const glibtop_signame glibtop_sys_siglist [];
 | 
			
		||||
 | 
			
		||||
END_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										83
									
								
								include/glibtop/swap.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										83
									
								
								include/glibtop/swap.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,83 @@
 | 
			
		||||
/* $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_SWAP_H__
 | 
			
		||||
#define __GLIBTOP_SWAP_H__
 | 
			
		||||
 | 
			
		||||
#include <glibtop.h>
 | 
			
		||||
#include <glibtop/global.h>
 | 
			
		||||
 | 
			
		||||
BEGIN_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_SWAP_TOTAL	0
 | 
			
		||||
#define GLIBTOP_SWAP_USED	1
 | 
			
		||||
#define GLIBTOP_SWAP_FREE	2
 | 
			
		||||
#define GLIBTOP_SWAP_PAGEIN	3
 | 
			
		||||
#define GLIBTOP_SWAP_PAGEOUT	4
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_MAX_SWAP	5
 | 
			
		||||
 | 
			
		||||
typedef struct _glibtop_swap	glibtop_swap;
 | 
			
		||||
 | 
			
		||||
struct _glibtop_swap
 | 
			
		||||
{
 | 
			
		||||
	u_int64_t	flags,
 | 
			
		||||
		total,		/* GLIBTOP_SWAP_TOTAL	*/
 | 
			
		||||
		used,		/* GLIBTOP_SWAP_USED	*/
 | 
			
		||||
		free,		/* GLIBTOP_SWAP_FREE	*/
 | 
			
		||||
		pagein,		/* GLIBTOP_SWAP_PAGEIN	*/
 | 
			
		||||
		pageout;	/* GLIBTOP_SWAP_PAGEOUT	*/
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define glibtop_get_swap(swap)	glibtop_get_swap_l(glibtop_global_server, swap)
 | 
			
		||||
 | 
			
		||||
#if GLIBTOP_SUID_SWAP
 | 
			
		||||
#define glibtop_get_swap_r		glibtop_get_swap_p
 | 
			
		||||
#else
 | 
			
		||||
#define glibtop_get_swap_r		glibtop_get_swap_s
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
void glibtop_get_swap_l (glibtop *server, glibtop_swap *buf);
 | 
			
		||||
 | 
			
		||||
#if GLIBTOP_SUID_SWAP
 | 
			
		||||
void glibtop_init_swap_p (glibtop *server);
 | 
			
		||||
void glibtop_get_swap_p (glibtop *server, glibtop_swap *buf);
 | 
			
		||||
#else
 | 
			
		||||
void glibtop_init_swap_s (glibtop *server);
 | 
			
		||||
void glibtop_get_swap_s (glibtop *server, glibtop_swap *buf);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef GLIBTOP_NAMES
 | 
			
		||||
 | 
			
		||||
/* You need to link with -lgtop_names to get this stuff here. */
 | 
			
		||||
 | 
			
		||||
extern const char *glibtop_names_swap [];
 | 
			
		||||
extern const unsigned glibtop_types_swap [];
 | 
			
		||||
extern const char *glibtop_labels_swap [];
 | 
			
		||||
extern const char *glibtop_descriptions_swap [];
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
END_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										110
									
								
								include/glibtop/sysdeps.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										110
									
								
								include/glibtop/sysdeps.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,110 @@
 | 
			
		||||
/* $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_SYSDEPS_H__
 | 
			
		||||
#define __GLIBTOP_SYSDEPS_H__
 | 
			
		||||
 | 
			
		||||
#include <glibtop.h>
 | 
			
		||||
 | 
			
		||||
BEGIN_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_SYSDEPS_FEATURES	0
 | 
			
		||||
#define GLIBTOP_SYSDEPS_CPU		1
 | 
			
		||||
#define GLIBTOP_SYSDEPS_MEM		2
 | 
			
		||||
#define GLIBTOP_SYSDEPS_SWAP		3
 | 
			
		||||
#define GLIBTOP_SYSDEPS_UPTIME		4
 | 
			
		||||
#define GLIBTOP_SYSDEPS_LOADAVG		5
 | 
			
		||||
#define GLIBTOP_SYSDEPS_SHM_LIMITS	6
 | 
			
		||||
#define GLIBTOP_SYSDEPS_MSG_LIMITS	7
 | 
			
		||||
#define GLIBTOP_SYSDEPS_SEM_LIMITS	8
 | 
			
		||||
#define GLIBTOP_SYSDEPS_PROCLIST	9
 | 
			
		||||
#define GLIBTOP_SYSDEPS_PROC_STATE	10
 | 
			
		||||
#define GLIBTOP_SYSDEPS_PROC_UID	11
 | 
			
		||||
#define GLIBTOP_SYSDEPS_PROC_MEM	12
 | 
			
		||||
#define GLIBTOP_SYSDEPS_PROC_TIME	13
 | 
			
		||||
#define GLIBTOP_SYSDEPS_PROC_SIGNAL	14
 | 
			
		||||
#define GLIBTOP_SYSDEPS_PROC_KERNEL	15
 | 
			
		||||
#define GLIBTOP_SYSDEPS_PROC_SEGMENT	16
 | 
			
		||||
#define GLIBTOP_SYSDEPS_PROC_ARGS	17
 | 
			
		||||
#define GLIBTOP_SYSDEPS_PROC_MAP	18
 | 
			
		||||
#define GLIBTOP_SYSDEPS_MOUNTLIST	19
 | 
			
		||||
#define GLIBTOP_SYSDEPS_FSUSAGE		20
 | 
			
		||||
#define GLIBTOP_SYSDEPS_NETLOAD		21
 | 
			
		||||
#define GLIBTOP_SYSDEPS_PPP		22
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_MAX_SYSDEPS		23
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_SYSDEPS_ALL		((1 << GLIBTOP_MAX_SYSDEPS) - 1)
 | 
			
		||||
 | 
			
		||||
typedef void (*glibtop_init_func_t) (glibtop *);
 | 
			
		||||
extern glibtop_init_func_t _glibtop_init_hook_s [];
 | 
			
		||||
extern glibtop_init_func_t _glibtop_init_hook_p [];
 | 
			
		||||
 | 
			
		||||
typedef struct _glibtop_sysdeps	glibtop_sysdeps;
 | 
			
		||||
 | 
			
		||||
struct _glibtop_sysdeps
 | 
			
		||||
{
 | 
			
		||||
	u_int64_t flags,
 | 
			
		||||
		features,		/* server features	*/
 | 
			
		||||
		cpu,			/* glibtop_cpu		*/
 | 
			
		||||
		mem,			/* glibtop_mem		*/
 | 
			
		||||
		swap,			/* glibtop_swap		*/
 | 
			
		||||
		uptime,			/* glibtop_uptime	*/
 | 
			
		||||
		loadavg,		/* glibtop_loadavg	*/
 | 
			
		||||
		shm_limits,		/* glibtop_shm_limits	*/
 | 
			
		||||
		msg_limits,		/* glibtop_msg_limits	*/
 | 
			
		||||
		sem_limits,		/* glibtop_sem_limits	*/
 | 
			
		||||
		proclist,		/* glibtop_proclist	*/
 | 
			
		||||
		proc_state,		/* glibtop_proc_state	*/
 | 
			
		||||
		proc_uid,		/* glibtop_proc_uid	*/
 | 
			
		||||
		proc_mem,		/* glibtop_proc_mem	*/
 | 
			
		||||
		proc_time,		/* glibtop_proc_time	*/
 | 
			
		||||
		proc_signal,		/* glibtop_proc_signal	*/
 | 
			
		||||
		proc_kernel,		/* glibtop_proc_kernel	*/
 | 
			
		||||
		proc_segment,		/* glibtop_proc_segment	*/
 | 
			
		||||
		proc_args,		/* glibtop_proc_args	*/
 | 
			
		||||
		proc_map,		/* glibtop_proc_map	*/
 | 
			
		||||
		mountlist,		/* glibtop_mountlist	*/
 | 
			
		||||
		fsusage,		/* glibtop_fsusage	*/
 | 
			
		||||
		netload,		/* glibtop_netload	*/
 | 
			
		||||
		ppp;			/* glibtop_ppp		*/
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define glibtop_get_sysdeps(sysdeps)	glibtop_get_sysdeps_r(glibtop_global_server,sysdeps)
 | 
			
		||||
 | 
			
		||||
void glibtop_get_sysdeps_r (glibtop *server, glibtop_sysdeps *buf);
 | 
			
		||||
 | 
			
		||||
#ifdef GLIBTOP_NAMES
 | 
			
		||||
 | 
			
		||||
/* You need to link with -lgtop_names to get this stuff here. */
 | 
			
		||||
 | 
			
		||||
extern const char *glibtop_names_sysdeps [];
 | 
			
		||||
extern const unsigned glibtop_types_sysdeps [];
 | 
			
		||||
extern const char *glibtop_labels_sysdeps [];
 | 
			
		||||
extern const char *glibtop_descriptions_sysdeps [];
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
END_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										64
									
								
								include/glibtop/sysinfo.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								include/glibtop/sysinfo.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,64 @@
 | 
			
		||||
/* $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_SYSINFO_H__
 | 
			
		||||
#define __GLIBTOP_SYSINFO_H__
 | 
			
		||||
 | 
			
		||||
#include <glibtop.h>
 | 
			
		||||
#include <glibtop/cpu.h>
 | 
			
		||||
#include <glibtop/global.h>
 | 
			
		||||
 | 
			
		||||
#include <glib.h>
 | 
			
		||||
 | 
			
		||||
BEGIN_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_SYSINFO_CPUINFO		0
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_MAX_SYSINFO		1
 | 
			
		||||
 | 
			
		||||
typedef struct _glibtop_sysinfo	glibtop_sysinfo;
 | 
			
		||||
 | 
			
		||||
typedef struct _glibtop_entry	glibtop_entry;
 | 
			
		||||
 | 
			
		||||
struct _glibtop_entry
 | 
			
		||||
{
 | 
			
		||||
	GPtrArray	*labels;
 | 
			
		||||
	GHashTable	*values;
 | 
			
		||||
	GHashTable	*descriptions;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct _glibtop_sysinfo
 | 
			
		||||
{
 | 
			
		||||
	u_int64_t	flags, ncpu;
 | 
			
		||||
	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
 | 
			
		||||
 | 
			
		||||
glibtop_sysinfo *glibtop_get_sysinfo_s (glibtop *server);
 | 
			
		||||
 | 
			
		||||
END_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										38
									
								
								include/glibtop/types.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								include/glibtop/types.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,38 @@
 | 
			
		||||
/* $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_TYPES_H__
 | 
			
		||||
#define __GLIBTOP_TYPES_H__
 | 
			
		||||
 | 
			
		||||
BEGIN_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_TYPE_LONG	1
 | 
			
		||||
#define GLIBTOP_TYPE_ULONG	2
 | 
			
		||||
#define GLIBTOP_TYPE_DOUBLE	3
 | 
			
		||||
#define GLIBTOP_TYPE_INT	4
 | 
			
		||||
#define GLIBTOP_TYPE_CHAR	5
 | 
			
		||||
#define GLIBTOP_TYPE_STRING	6
 | 
			
		||||
 | 
			
		||||
END_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										85
									
								
								include/glibtop/union.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										85
									
								
								include/glibtop/union.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,85 @@
 | 
			
		||||
/* $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_UNION_H__
 | 
			
		||||
#define __GLIBTOP_UNION_H__
 | 
			
		||||
 | 
			
		||||
#include <glibtop/cpu.h>
 | 
			
		||||
#include <glibtop/mem.h>
 | 
			
		||||
#include <glibtop/swap.h>
 | 
			
		||||
#include <glibtop/uptime.h>
 | 
			
		||||
#include <glibtop/loadavg.h>
 | 
			
		||||
#include <glibtop/shm_limits.h>
 | 
			
		||||
#include <glibtop/msg_limits.h>
 | 
			
		||||
#include <glibtop/sem_limits.h>
 | 
			
		||||
#include <glibtop/proclist.h>
 | 
			
		||||
 | 
			
		||||
#include <glibtop/procstate.h>
 | 
			
		||||
#include <glibtop/procuid.h>
 | 
			
		||||
#include <glibtop/procmem.h>
 | 
			
		||||
#include <glibtop/proctime.h>
 | 
			
		||||
#include <glibtop/procsignal.h>
 | 
			
		||||
#include <glibtop/prockernel.h>
 | 
			
		||||
#include <glibtop/procsegment.h>
 | 
			
		||||
#include <glibtop/procargs.h>
 | 
			
		||||
#include <glibtop/procmap.h>
 | 
			
		||||
 | 
			
		||||
#include <glibtop/mountlist.h>
 | 
			
		||||
#include <glibtop/fsusage.h>
 | 
			
		||||
 | 
			
		||||
#include <glibtop/netload.h>
 | 
			
		||||
#include <glibtop/ppp.h>
 | 
			
		||||
 | 
			
		||||
BEGIN_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
typedef union _glibtop_union	glibtop_union;
 | 
			
		||||
 | 
			
		||||
union _glibtop_union
 | 
			
		||||
{
 | 
			
		||||
	glibtop_cpu		cpu;
 | 
			
		||||
	glibtop_mem		mem;
 | 
			
		||||
	glibtop_swap		swap;
 | 
			
		||||
	glibtop_uptime		uptime;
 | 
			
		||||
	glibtop_loadavg		loadavg;
 | 
			
		||||
	glibtop_shm_limits	shm_limits;
 | 
			
		||||
	glibtop_msg_limits	msg_limits;
 | 
			
		||||
	glibtop_sem_limits	sem_limits;
 | 
			
		||||
	glibtop_proclist	proclist;
 | 
			
		||||
	glibtop_proc_state	proc_state;
 | 
			
		||||
	glibtop_proc_uid	proc_uid;
 | 
			
		||||
	glibtop_proc_mem	proc_mem;
 | 
			
		||||
	glibtop_proc_time	proc_time;
 | 
			
		||||
	glibtop_proc_signal	proc_signal;
 | 
			
		||||
	glibtop_proc_kernel	proc_kernel;
 | 
			
		||||
	glibtop_proc_segment	proc_segment;
 | 
			
		||||
	glibtop_proc_args	proc_args;
 | 
			
		||||
	glibtop_proc_map	proc_map;
 | 
			
		||||
	glibtop_mountlist	mountlist;
 | 
			
		||||
	glibtop_fsusage		fsusage;
 | 
			
		||||
	glibtop_netload		netload;
 | 
			
		||||
	glibtop_ppp		ppp;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
END_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										77
									
								
								include/glibtop/uptime.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										77
									
								
								include/glibtop/uptime.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,77 @@
 | 
			
		||||
/* $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_UPTIME_H__
 | 
			
		||||
#define __GLIBTOP_UPTIME_H__
 | 
			
		||||
 | 
			
		||||
#include <glibtop.h>
 | 
			
		||||
#include <glibtop/global.h>
 | 
			
		||||
 | 
			
		||||
BEGIN_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_UPTIME_UPTIME		0
 | 
			
		||||
#define GLIBTOP_UPTIME_IDLETIME		1
 | 
			
		||||
 | 
			
		||||
#define GLIBTOP_MAX_UPTIME		2
 | 
			
		||||
 | 
			
		||||
typedef struct _glibtop_uptime	glibtop_uptime;
 | 
			
		||||
 | 
			
		||||
struct _glibtop_uptime
 | 
			
		||||
{
 | 
			
		||||
	u_int64_t flags;
 | 
			
		||||
	double uptime,		/* GLIBTOP_UPTIME_UPTIME	*/
 | 
			
		||||
		idletime;	/* GLIBTOP_UPTIME_IDLETIME	*/
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define glibtop_get_uptime(uptime)	glibtop_get_uptime_l(glibtop_global_server, uptime)
 | 
			
		||||
 | 
			
		||||
#if GLIBTOP_SUID_UPTIME
 | 
			
		||||
#define glibtop_get_uptime_r		glibtop_get_uptime_p
 | 
			
		||||
#else
 | 
			
		||||
#define glibtop_get_uptime_r		glibtop_get_uptime_s
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
void glibtop_get_uptime_l (glibtop *server, glibtop_uptime *buf);
 | 
			
		||||
 | 
			
		||||
#if GLIBTOP_SUID_UPTIME
 | 
			
		||||
void glibtop_init_uptime_p (glibtop *server);
 | 
			
		||||
void glibtop_get_uptime_p (glibtop *server, glibtop_uptime *buf);
 | 
			
		||||
#else
 | 
			
		||||
void glibtop_init_uptime_s (glibtop *server);
 | 
			
		||||
void glibtop_get_uptime_s (glibtop *server, glibtop_uptime *buf);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef GLIBTOP_NAMES
 | 
			
		||||
 | 
			
		||||
/* You need to link with -lgtop_names to get this stuff here. */
 | 
			
		||||
 | 
			
		||||
extern const char *glibtop_names_uptime [];
 | 
			
		||||
extern const unsigned glibtop_types_uptime [];
 | 
			
		||||
extern const char *glibtop_labels_uptime [];
 | 
			
		||||
extern const char *glibtop_descriptions_uptime [];
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
END_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										42
									
								
								include/glibtop/version.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								include/glibtop/version.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,42 @@
 | 
			
		||||
/* 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_VERSION_H__
 | 
			
		||||
#define __GLIBTOP_VERSION_H__
 | 
			
		||||
 | 
			
		||||
#include <glibtop.h>
 | 
			
		||||
#include <glibtop/union.h>
 | 
			
		||||
#include <glibtop/sysdeps.h>
 | 
			
		||||
#include <glibtop/command.h>
 | 
			
		||||
 | 
			
		||||
#define LIBGTOP_VERSION_STRING "Libgtop %s server version %s (%u,%u,%u,%u)."
 | 
			
		||||
 | 
			
		||||
BEGIN_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#if _IN_LIBGTOP
 | 
			
		||||
 | 
			
		||||
void glibtop_send_version (glibtop *server, int fd);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
END_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										39
									
								
								include/glibtop/write.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								include/glibtop/write.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,39 @@
 | 
			
		||||
/* $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_WRITE_H__
 | 
			
		||||
#define __GLIBTOP_WRITE_H__
 | 
			
		||||
 | 
			
		||||
#include <glibtop.h>
 | 
			
		||||
#include <glibtop/error.h>
 | 
			
		||||
 | 
			
		||||
BEGIN_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#define glibtop_write(p1, p2)	glibtop_write(glibtop_global_server, p1, p2)
 | 
			
		||||
 | 
			
		||||
void glibtop_write_l (glibtop *server, size_t size, void *buf);
 | 
			
		||||
void glibtop_write_s (glibtop *server, size_t size, void *buf);
 | 
			
		||||
 | 
			
		||||
END_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										46
									
								
								include/glibtop/xmalloc.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								include/glibtop/xmalloc.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,46 @@
 | 
			
		||||
/* $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_XMALLOC_H__
 | 
			
		||||
#define __GLIBTOP_XMALLOC_H__
 | 
			
		||||
 | 
			
		||||
#include <glibtop.h>
 | 
			
		||||
#include <glibtop/error.h>
 | 
			
		||||
 | 
			
		||||
BEGIN_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#define glibtop_malloc(p1)	glibtop_malloc_r(glibtop_global_server, p1)
 | 
			
		||||
#define glibtop_calloc(p1, p2)	glibtop_calloc_r(glibtop_global_server, p1, p2)
 | 
			
		||||
#define glibtop_realloc(p1, p2)	glibtop_realloc_r(glibtop_global_server, p1, p2)
 | 
			
		||||
#define glibtop_strdup(p1)	glibtop_strdup_r(glibtop_global_server, p1)
 | 
			
		||||
#define glibtop_free(p1)	glibtop_free_r(glibtop_global_server, p1)
 | 
			
		||||
 | 
			
		||||
void *glibtop_malloc_r	(glibtop *server, size_t size);
 | 
			
		||||
void *glibtop_calloc_r	(glibtop *server, size_t nmemb, size_t size);
 | 
			
		||||
void *glibtop_realloc_r	(glibtop *server, void *ptr, size_t size);
 | 
			
		||||
char *glibtop_strdup_r	(glibtop *server, const char *string);
 | 
			
		||||
void glibtop_free_r	(glibtop *server, const void *ptr);
 | 
			
		||||
 | 
			
		||||
END_LIBGTOP_DECLS
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										14
									
								
								kernel/ChangeLog
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								kernel/ChangeLog
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,14 @@
 | 
			
		||||
1998-07-21  Martin Baulig  <martin@home-of-linux.org>
 | 
			
		||||
 | 
			
		||||
	* table20: New directory for 2.0.xx kernels.
 | 
			
		||||
 | 
			
		||||
	* table21: New directory for 2.1.xx kernels.
 | 
			
		||||
 | 
			
		||||
	* *: Moved into `table20' and `table21'.
 | 
			
		||||
 | 
			
		||||
1998-06-14  Martin Baulig  <baulig@taurus.uni-trier.de>
 | 
			
		||||
 | 
			
		||||
	* README: Added README.
 | 
			
		||||
 | 
			
		||||
	* kernel.patch: Patch for the Linux kernel to add the
 | 
			
		||||
	new system call.
 | 
			
		||||
							
								
								
									
										1
									
								
								kernel/sysctl/.cvsignore
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								kernel/sysctl/.cvsignore
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
*.flags
 | 
			
		||||
							
								
								
									
										22
									
								
								kernel/sysctl/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								kernel/sysctl/Makefile
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,22 @@
 | 
			
		||||
#
 | 
			
		||||
# Makefile for the LibGTop linux sysctl interface.
 | 
			
		||||
#
 | 
			
		||||
# Note! Dependencies are done automagically by 'make dep', which also
 | 
			
		||||
# removes any old dependencies. DON'T put your own dependencies here
 | 
			
		||||
# unless it's something special (ie not a .c file).
 | 
			
		||||
#
 | 
			
		||||
# Note 2! The CFLAGS definition is now in the main makefile...
 | 
			
		||||
 | 
			
		||||
O_TARGET := kernel.o
 | 
			
		||||
ifeq ($(CONFIG_LIBGTOP),y)
 | 
			
		||||
O_OJBS   := main.o libgtop.o
 | 
			
		||||
else
 | 
			
		||||
O_OBJS   := main.o
 | 
			
		||||
endif
 | 
			
		||||
OX_OBJS  := libgtop_syms.o
 | 
			
		||||
 | 
			
		||||
ifeq ($(CONFIG_LIBGTOP),m)
 | 
			
		||||
M_OBJS   := libgtop.o
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
include $(TOPDIR)/Rules.make
 | 
			
		||||
							
								
								
									
										1268
									
								
								kernel/sysctl/libgtop.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1268
									
								
								kernel/sysctl/libgtop.c
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										242
									
								
								kernel/sysctl/libgtop.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										242
									
								
								kernel/sysctl/libgtop.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,242 @@
 | 
			
		||||
#ifndef _LINUX_LIBGTOP_H
 | 
			
		||||
#define _LINUX_LIBGTOP_H 1
 | 
			
		||||
 | 
			
		||||
#include <linux/tasks.h>
 | 
			
		||||
 | 
			
		||||
enum {
 | 
			
		||||
    LIBGTOP_VERSION = 1,
 | 
			
		||||
    LIBGTOP_UPDATE_EXPENSIVE,
 | 
			
		||||
    LIBGTOP_STAT = 101,
 | 
			
		||||
    LIBGTOP_MEM,
 | 
			
		||||
    LIBGTOP_SWAP,
 | 
			
		||||
    LIBGTOP_PROCLIST = 201,
 | 
			
		||||
    LIBGTOP_PROC_STATE = 211,
 | 
			
		||||
    LIBGTOP_PROC_KERNEL,
 | 
			
		||||
    LIBGTOP_PROC_SEGMENT,
 | 
			
		||||
    LIBGTOP_PROC_MEM,
 | 
			
		||||
    LIBGTOP_PROC_SIGNAL,
 | 
			
		||||
    LIBGTOP_PROC_ARGS = 251,
 | 
			
		||||
    LIBGTOP_PROC_MAPS,
 | 
			
		||||
    LIBGTOP_NETLOAD = 301
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
enum {
 | 
			
		||||
    LIBGTOP_PROCLIST_ALL = 0,
 | 
			
		||||
    LIBGTOP_PROCLIST_PID,
 | 
			
		||||
    LIBGTOP_PROCLIST_PGRP,
 | 
			
		||||
    LIBGTOP_PROCLIST_SESSION,
 | 
			
		||||
    LIBGTOP_PROCLIST_TTY,
 | 
			
		||||
    LIBGTOP_PROCLIST_UID,
 | 
			
		||||
    LIBGTOP_PROCLIST_RUID
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define LIBGTOP_NSIG			4
 | 
			
		||||
 | 
			
		||||
#define LIBGTOP_PROCLIST_MASK		15
 | 
			
		||||
#define LIBGTOP_MAX_GROUPS		32
 | 
			
		||||
 | 
			
		||||
#define LIBGTOP_EXCLUDE_IDLE		0x1000
 | 
			
		||||
#define LIBGTOP_EXCLUDE_SYSTEM		0x2000
 | 
			
		||||
#define LIBGTOP_EXCLUDE_NOTTY		0x4000
 | 
			
		||||
 | 
			
		||||
#define LIBGTOP_TASK_RUNNING		1
 | 
			
		||||
#define LIBGTOP_TASK_INTERRUPTIBLE	2
 | 
			
		||||
#define LIBGTOP_TASK_UNINTERRUPTIBLE	4
 | 
			
		||||
#define LIBGTOP_TASK_ZOMBIE		8
 | 
			
		||||
#define LIBGTOP_TASK_STOPPED		16
 | 
			
		||||
#define LIBGTOP_TASK_SWAPPING		32
 | 
			
		||||
 | 
			
		||||
#define LIBGTOP_VM_READ		0x0001	/* currently active flags */
 | 
			
		||||
#define LIBGTOP_VM_WRITE	0x0002
 | 
			
		||||
#define LIBGTOP_VM_EXEC		0x0004
 | 
			
		||||
#define LIBGTOP_VM_SHARED	0x0008
 | 
			
		||||
 | 
			
		||||
#define LIBGTOP_VM_MAYREAD	0x0010	/* limits for mprotect() etc */
 | 
			
		||||
#define LIBGTOP_VM_MAYWRITE	0x0020
 | 
			
		||||
#define LIBGTOP_VM_MAYEXEC	0x0040
 | 
			
		||||
#define LIBGTOP_VM_MAYSHARE	0x0080
 | 
			
		||||
 | 
			
		||||
#define LIBGTOP_VM_GROWSDOWN	0x0100	/* general info on the segment */
 | 
			
		||||
#define LIBGTOP_VM_GROWSUP	0x0200
 | 
			
		||||
#define LIBGTOP_VM_SHM		0x0400	/* shared memory area, don't swap out */
 | 
			
		||||
#define LIBGTOP_VM_DENYWRITE	0x0800	/* ETXTBSY on write attempts.. */
 | 
			
		||||
 | 
			
		||||
#define LIBGTOP_VM_EXECUTABLE	0x1000
 | 
			
		||||
#define LIBGTOP_VM_LOCKED	0x2000
 | 
			
		||||
#define LIBGTOP_VM_IO		0x4000  /* Memory mapped I/O or similar */
 | 
			
		||||
 | 
			
		||||
#define LIBGTOP_MAP_PATH_LEN	(PAGE_SIZE - sizeof (libgtop_proc_maps_header_t))
 | 
			
		||||
 | 
			
		||||
#ifndef min
 | 
			
		||||
#define min(a,b) ((a < b) ? a : b)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
typedef struct libgtop_stat libgtop_stat_t;
 | 
			
		||||
 | 
			
		||||
typedef struct libgtop_cpu libgtop_cpu_t;
 | 
			
		||||
typedef struct libgtop_mem libgtop_mem_t;
 | 
			
		||||
typedef struct libgtop_swap libgtop_swap_t;
 | 
			
		||||
typedef struct libgtop_proclist libgtop_proclist_t;
 | 
			
		||||
 | 
			
		||||
typedef struct libgtop_proc_state libgtop_proc_state_t;
 | 
			
		||||
typedef struct libgtop_proc_kernel libgtop_proc_kernel_t;
 | 
			
		||||
typedef struct libgtop_proc_segment libgtop_proc_segment_t;
 | 
			
		||||
typedef struct libgtop_proc_mem libgtop_proc_mem_t;
 | 
			
		||||
typedef struct libgtop_proc_signal libgtop_proc_signal_t;
 | 
			
		||||
 | 
			
		||||
typedef struct libgtop_proc_maps_header libgtop_proc_maps_header_t;
 | 
			
		||||
typedef struct libgtop_proc_maps libgtop_proc_maps_t;
 | 
			
		||||
 | 
			
		||||
typedef struct libgtop_netload libgtop_netload_t;
 | 
			
		||||
 | 
			
		||||
struct libgtop_cpu
 | 
			
		||||
{
 | 
			
		||||
    unsigned long total;		/* Total CPU Time		*/
 | 
			
		||||
    unsigned long user;			/* CPU Time in User Mode	*/
 | 
			
		||||
    unsigned long nice;			/* CPU Time in User Mode (nice)	*/
 | 
			
		||||
    unsigned long sys;			/* CPU Time in System Mode	*/
 | 
			
		||||
    unsigned long idle;			/* CPU Time in the Idle Task	*/
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct libgtop_mem
 | 
			
		||||
{
 | 
			
		||||
    unsigned long totalram;		/* Total usable main memory size */
 | 
			
		||||
    unsigned long freeram;		/* Available memory size */
 | 
			
		||||
    unsigned long sharedram;		/* Amount of shared memory */
 | 
			
		||||
    unsigned long bufferram;		/* Memory used by buffers */
 | 
			
		||||
    unsigned long cachedram;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct libgtop_swap
 | 
			
		||||
{
 | 
			
		||||
    unsigned long totalswap;		/* Total swap space size */
 | 
			
		||||
    unsigned long freeswap;		/* swap space still available */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct libgtop_proclist
 | 
			
		||||
{
 | 
			
		||||
    int count;
 | 
			
		||||
    int nr_running, nr_tasks, last_pid;
 | 
			
		||||
    unsigned pids [NR_TASKS];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct libgtop_stat
 | 
			
		||||
{
 | 
			
		||||
    int ncpu;				/* Number of CPUs		*/
 | 
			
		||||
    unsigned long frequency;		/* Tick frequency (HZ)		*/
 | 
			
		||||
    libgtop_cpu_t cpu;			/* CPU statistics		*/
 | 
			
		||||
    libgtop_cpu_t xcpu [NR_CPUS];	/* SMP per-CPU statistics	*/
 | 
			
		||||
    double loadavg [3];			/* Load average			*/
 | 
			
		||||
    unsigned long total_forks;		/* Total # of forks		*/
 | 
			
		||||
    unsigned int context_swtch;		/* Total # of context switches	*/
 | 
			
		||||
    unsigned long boot_time;		/* Boot time (seconds s. epoch)	*/
 | 
			
		||||
    unsigned int pgpgin, pgpgout;	/* # of pages paged in/out	*/
 | 
			
		||||
    unsigned int pswpin, pswpout;	/* # of swap pgs brought in/out	*/
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct libgtop_proc_state
 | 
			
		||||
{
 | 
			
		||||
    long state;
 | 
			
		||||
    unsigned long flags;
 | 
			
		||||
    char comm [16];
 | 
			
		||||
    int uid, euid, suid, fsuid;
 | 
			
		||||
    int gid, egid, sgid, fsgid;
 | 
			
		||||
    int pid, pgrp, ppid;
 | 
			
		||||
    int session;
 | 
			
		||||
    unsigned int tty;
 | 
			
		||||
    int tpgid;
 | 
			
		||||
    long priority, counter, def_priority;
 | 
			
		||||
    long utime, stime, cutime, cstime, start_time;
 | 
			
		||||
    long per_cpu_utime [NR_CPUS], per_cpu_stime [NR_CPUS];
 | 
			
		||||
    int has_cpu, processor, last_processor;
 | 
			
		||||
 | 
			
		||||
    unsigned long context;
 | 
			
		||||
    unsigned long start_code, end_code, start_data, end_data;
 | 
			
		||||
    unsigned long start_brk, brk, start_stack, start_mmap;
 | 
			
		||||
    unsigned long arg_start, arg_end, env_start, env_end;
 | 
			
		||||
    unsigned long rss, rlim, total_vm, locked_vm;
 | 
			
		||||
 | 
			
		||||
    unsigned long policy, rt_priority;
 | 
			
		||||
    unsigned long it_real_value, it_prof_value, it_virt_value;
 | 
			
		||||
    unsigned long it_real_incr, it_prof_incr, it_virt_incr;
 | 
			
		||||
 | 
			
		||||
    unsigned long keip, kesp;
 | 
			
		||||
    unsigned long min_flt, maj_flt, cmin_flt, cmaj_flt;
 | 
			
		||||
    unsigned long nswap, cnswap;
 | 
			
		||||
 | 
			
		||||
    int ngroups, groups [LIBGTOP_MAX_GROUPS];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct libgtop_proc_kernel
 | 
			
		||||
{
 | 
			
		||||
    unsigned long wchan;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct libgtop_proc_segment
 | 
			
		||||
{
 | 
			
		||||
    unsigned long vsize, data, exec, stack, lib;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct libgtop_proc_mem
 | 
			
		||||
{
 | 
			
		||||
    libgtop_proc_segment_t segment;
 | 
			
		||||
    int size, resident, share, trs, lrs, drs, dt;
 | 
			
		||||
    unsigned long rss, rlim;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct libgtop_proc_signal
 | 
			
		||||
{
 | 
			
		||||
    unsigned long signal [LIBGTOP_NSIG];
 | 
			
		||||
    unsigned long blocked [LIBGTOP_NSIG];
 | 
			
		||||
    unsigned long ignore [LIBGTOP_NSIG];
 | 
			
		||||
    unsigned long catch [LIBGTOP_NSIG];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct libgtop_proc_maps_header
 | 
			
		||||
{
 | 
			
		||||
    unsigned long start, end, offset, perm;
 | 
			
		||||
    off_t filename_offset;
 | 
			
		||||
    ino_t inode;
 | 
			
		||||
    dev_t device;
 | 
			
		||||
} __attribute__ ((aligned (64)));
 | 
			
		||||
 | 
			
		||||
struct libgtop_proc_maps
 | 
			
		||||
{
 | 
			
		||||
    libgtop_proc_maps_header_t header;
 | 
			
		||||
    char filename [LIBGTOP_MAP_PATH_LEN];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct libgtop_netload
 | 
			
		||||
{
 | 
			
		||||
    unsigned long rx_packets;		/* total packets received	*/
 | 
			
		||||
    unsigned long tx_packets;		/* total packets transmitted	*/
 | 
			
		||||
    unsigned long rx_bytes;		/* total bytes received 	*/
 | 
			
		||||
    unsigned long tx_bytes;		/* total bytes transmitted	*/
 | 
			
		||||
    unsigned long rx_errors;		/* bad packets received		*/
 | 
			
		||||
    unsigned long tx_errors;		/* packet transmit problems	*/
 | 
			
		||||
    unsigned long rx_dropped;		/* no space in linux buffers	*/
 | 
			
		||||
    unsigned long tx_dropped;		/* no space available in linux	*/
 | 
			
		||||
    unsigned long multicast;		/* multicast packets received	*/
 | 
			
		||||
    unsigned long collisions;
 | 
			
		||||
    
 | 
			
		||||
    /* detailed rx_errors: */
 | 
			
		||||
    unsigned long rx_length_errors;
 | 
			
		||||
    unsigned long rx_over_errors;	/* receiver ring buff overflow	*/
 | 
			
		||||
    unsigned long rx_crc_errors;	/* recved pkt with crc error	*/
 | 
			
		||||
    unsigned long rx_frame_errors;	/* recv'd frame alignment error */
 | 
			
		||||
    unsigned long rx_fifo_errors;	/* recv'r fifo overrun		*/
 | 
			
		||||
    unsigned long rx_missed_errors;	/* receiver missed packet	*/
 | 
			
		||||
    
 | 
			
		||||
    /* detailed tx_errors */
 | 
			
		||||
    unsigned long tx_aborted_errors;
 | 
			
		||||
    unsigned long tx_carrier_errors;
 | 
			
		||||
    unsigned long tx_fifo_errors;
 | 
			
		||||
    unsigned long tx_heartbeat_errors;
 | 
			
		||||
    unsigned long tx_window_errors;
 | 
			
		||||
    
 | 
			
		||||
    /* for cslip etc */
 | 
			
		||||
    unsigned long rx_compressed;
 | 
			
		||||
    unsigned long tx_compressed;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										30
									
								
								kernel/sysctl/libgtop_syms.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								kernel/sysctl/libgtop_syms.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,30 @@
 | 
			
		||||
/*
 | 
			
		||||
 * linux/libgtop/libgtop_syms.c
 | 
			
		||||
 * Copyright (C) 1999 Martin Baulig
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <linux/config.h>
 | 
			
		||||
#include <linux/module.h>
 | 
			
		||||
 | 
			
		||||
#include <linux/sched.h>
 | 
			
		||||
 | 
			
		||||
#include <linux/mm.h>
 | 
			
		||||
#include <linux/pagemap.h>
 | 
			
		||||
#include <linux/swap.h>
 | 
			
		||||
 | 
			
		||||
extern unsigned long total_forks;
 | 
			
		||||
 | 
			
		||||
EXPORT_SYMBOL(task);
 | 
			
		||||
EXPORT_SYMBOL(init_mm);
 | 
			
		||||
EXPORT_SYMBOL(pidhash);
 | 
			
		||||
EXPORT_SYMBOL(avenrun);
 | 
			
		||||
EXPORT_SYMBOL(nr_running);
 | 
			
		||||
EXPORT_SYMBOL(nr_tasks);
 | 
			
		||||
EXPORT_SYMBOL(last_pid);
 | 
			
		||||
EXPORT_SYMBOL(total_forks);
 | 
			
		||||
EXPORT_SYMBOL(si_swapinfo);
 | 
			
		||||
 | 
			
		||||
extern void scheduling_functions_start_here(void);
 | 
			
		||||
extern void scheduling_functions_end_here(void);
 | 
			
		||||
EXPORT_SYMBOL(scheduling_functions_start_here);
 | 
			
		||||
EXPORT_SYMBOL(scheduling_functions_end_here);
 | 
			
		||||
							
								
								
									
										4
									
								
								kernel/sysctl/main.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								kernel/sysctl/main.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,4 @@
 | 
			
		||||
/*
 | 
			
		||||
 * linux/libgtop/main.c
 | 
			
		||||
 * Copyright (C) 1999 Martin Baulig
 | 
			
		||||
 */
 | 
			
		||||
							
								
								
									
										81
									
								
								kernel/sysctl/patch-2.2.1
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										81
									
								
								kernel/sysctl/patch-2.2.1
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,81 @@
 | 
			
		||||
diff -ru linux-2.2.1/Makefile hacker/Makefile
 | 
			
		||||
--- linux-2.2.1/Makefile	Sun Jan 31 22:45:42 1999
 | 
			
		||||
+++ hacker/Makefile	Sun Mar 21 16:10:41 1999
 | 
			
		||||
@@ -109,6 +109,7 @@
 | 
			
		||||
 DRIVERS		=drivers/block/block.a \
 | 
			
		||||
 		 drivers/char/char.a \
 | 
			
		||||
 	         drivers/misc/misc.a
 | 
			
		||||
+EXTRAS		=
 | 
			
		||||
 LIBS		=$(TOPDIR)/lib/lib.a
 | 
			
		||||
 SUBDIRS		=kernel drivers mm fs net ipc lib
 | 
			
		||||
 
 | 
			
		||||
@@ -186,6 +187,11 @@
 | 
			
		||||
 DRIVERS := $(DRIVERS) drivers/net/irda/irda_drivers.a
 | 
			
		||||
 endif
 | 
			
		||||
 
 | 
			
		||||
+ifdef CONFIG_LIBGTOP
 | 
			
		||||
+SUBDIRS := $(SUBDIRS) libgtop
 | 
			
		||||
+EXTRAS  := $(EXTRAS) libgtop/kernel.o
 | 
			
		||||
+endif
 | 
			
		||||
+
 | 
			
		||||
 include arch/$(ARCH)/Makefile
 | 
			
		||||
 
 | 
			
		||||
 .S.s:
 | 
			
		||||
@@ -206,6 +212,7 @@
 | 
			
		||||
 		$(FILESYSTEMS) \
 | 
			
		||||
 		$(NETWORKS) \
 | 
			
		||||
 		$(DRIVERS) \
 | 
			
		||||
+		$(EXTRAS) \
 | 
			
		||||
 		$(LIBS) \
 | 
			
		||||
 		--end-group \
 | 
			
		||||
 		-o vmlinux
 | 
			
		||||
diff -ru linux-2.2.1/arch/i386/config.in hacker/arch/i386/config.in
 | 
			
		||||
--- linux-2.2.1/arch/i386/config.in	Sun Jan 31 22:25:25 1999
 | 
			
		||||
+++ hacker/arch/i386/config.in	Sat Mar 20 18:26:18 1999
 | 
			
		||||
@@ -84,6 +84,9 @@
 | 
			
		||||
 bool 'System V IPC' CONFIG_SYSVIPC
 | 
			
		||||
 bool 'BSD Process Accounting' CONFIG_BSD_PROCESS_ACCT
 | 
			
		||||
 bool 'Sysctl support' CONFIG_SYSCTL
 | 
			
		||||
+if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
 | 
			
		||||
+  tristate 'LibGTop support' CONFIG_LIBGTOP
 | 
			
		||||
+fi
 | 
			
		||||
 tristate 'Kernel support for a.out binaries' CONFIG_BINFMT_AOUT
 | 
			
		||||
 tristate 'Kernel support for ELF binaries' CONFIG_BINFMT_ELF
 | 
			
		||||
 tristate 'Kernel support for MISC binaries' CONFIG_BINFMT_MISC
 | 
			
		||||
diff -ru linux-2.2.1/include/linux/sysctl.h hacker/include/linux/sysctl.h
 | 
			
		||||
--- linux-2.2.1/include/linux/sysctl.h	Sun Jan 31 22:24:14 1999
 | 
			
		||||
+++ hacker/include/linux/sysctl.h	Sat Mar 20 19:12:54 1999
 | 
			
		||||
@@ -56,7 +56,8 @@
 | 
			
		||||
 	CTL_PROC=4,		/* Process info */
 | 
			
		||||
 	CTL_FS=5,		/* Filesystems */
 | 
			
		||||
 	CTL_DEBUG=6,		/* Debugging */
 | 
			
		||||
-	CTL_DEV=7		/* Devices */
 | 
			
		||||
+	CTL_DEV=7,		/* Devices */
 | 
			
		||||
+	CTL_LIBGTOP=408		/* LibGTop */
 | 
			
		||||
 };
 | 
			
		||||
 
 | 
			
		||||
 
 | 
			
		||||
diff -ru linux-2.2.1/kernel/sysctl.c hacker/kernel/sysctl.c
 | 
			
		||||
--- linux-2.2.1/kernel/sysctl.c	Sun Jan 31 22:24:43 1999
 | 
			
		||||
+++ hacker/kernel/sysctl.c	Sat Mar 20 19:24:34 1999
 | 
			
		||||
@@ -82,7 +82,9 @@
 | 
			
		||||
 static ctl_table fs_table[];
 | 
			
		||||
 static ctl_table debug_table[];
 | 
			
		||||
 static ctl_table dev_table[];
 | 
			
		||||
-
 | 
			
		||||
+#ifdef CONFIG_LIBGTOP
 | 
			
		||||
+extern ctl_table libgtop_table[];
 | 
			
		||||
+#endif
 | 
			
		||||
 
 | 
			
		||||
 /* /proc declarations: */
 | 
			
		||||
 
 | 
			
		||||
@@ -148,6 +150,9 @@
 | 
			
		||||
 	{CTL_FS, "fs", NULL, 0, 0555, fs_table},
 | 
			
		||||
 	{CTL_DEBUG, "debug", NULL, 0, 0555, debug_table},
 | 
			
		||||
         {CTL_DEV, "dev", NULL, 0, 0555, dev_table},
 | 
			
		||||
+#ifdef CONFIG_LIBGTOP
 | 
			
		||||
+	{CTL_LIBGTOP, "libgtop", NULL, 0, 0555, libgtop_table},
 | 
			
		||||
+#endif
 | 
			
		||||
 	{0}
 | 
			
		||||
 };
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										188
									
								
								kernel/table.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										188
									
								
								kernel/table.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,188 @@
 | 
			
		||||
#ifndef _LINUX_TABLE_H
 | 
			
		||||
#define _LINUX_TABLE_H
 | 
			
		||||
 | 
			
		||||
#ifdef _KERNEL
 | 
			
		||||
#include <linux/types.h>
 | 
			
		||||
#else
 | 
			
		||||
#define NR_TASKS		512
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define TABLE_KERN_PROC_ALL		0	/* all processes */
 | 
			
		||||
#define TABLE_KERN_PROC_PID		1
 | 
			
		||||
#define TABLE_KERN_PROC_PGRP		2
 | 
			
		||||
#define TABLE_KERN_PROC_SESSION		3
 | 
			
		||||
#define TABLE_KERN_PROC_TTY		4
 | 
			
		||||
#define TABLE_KERN_PROC_UID		5
 | 
			
		||||
#define TABLE_KERN_PROC_RUID		6
 | 
			
		||||
 | 
			
		||||
#define TABLE_KERN_PROC_MASK		15	
 | 
			
		||||
 | 
			
		||||
#define TABLE_EXCLUDE_IDLE		0x1000
 | 
			
		||||
#define TABLE_EXCLUDE_SYSTEM		0x2000
 | 
			
		||||
#define TABLE_EXCLUDE_NOTTY		0x4000
 | 
			
		||||
 | 
			
		||||
#define TABLE_VERSION		0
 | 
			
		||||
#define TABLE_CPU		1
 | 
			
		||||
#define TABLE_MEM		2
 | 
			
		||||
#define TABLE_SWAP		3
 | 
			
		||||
#define TABLE_LOADAVG		4
 | 
			
		||||
#define TABLE_UPTIME		5
 | 
			
		||||
#define TABLE_PROCLIST		6
 | 
			
		||||
#define TABLE_PROC_UID		7
 | 
			
		||||
#define TABLE_PROC_MEM		8
 | 
			
		||||
#define TABLE_PROC_SEGMENT	9
 | 
			
		||||
#define TABLE_PROC_TIME		10
 | 
			
		||||
#define TABLE_PROC_STATE	11
 | 
			
		||||
#define TABLE_PROC_SIGNAL	12
 | 
			
		||||
#define TABLE_PROC_KERNEL	13
 | 
			
		||||
 | 
			
		||||
/* CPU Usage (in jiffies = 1/100th seconds) */
 | 
			
		||||
 | 
			
		||||
struct table_cpu
 | 
			
		||||
{
 | 
			
		||||
	unsigned long total;		/* Total CPU Time		*/
 | 
			
		||||
	unsigned long user;		/* CPU Time in User Mode	*/
 | 
			
		||||
	unsigned long nice;		/* CPU Time in User Mode (nice)	*/
 | 
			
		||||
	unsigned long sys;		/* CPU Time in System Mode	*/
 | 
			
		||||
	unsigned long idle;		/* CPU Time in the Idle Task	*/
 | 
			
		||||
	unsigned long frequency;	/* Tick frequency		*/
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* Memory Usage (in bytes) */
 | 
			
		||||
 | 
			
		||||
struct table_mem
 | 
			
		||||
{
 | 
			
		||||
	unsigned long total;		/* Total physical memory	*/
 | 
			
		||||
	unsigned long used;		/* Used memory size		*/
 | 
			
		||||
	unsigned long free;		/* Free memory size		*/
 | 
			
		||||
	unsigned long shared;		/* Shared memory size		*/
 | 
			
		||||
	unsigned long buffer;		/* Size of buffers		*/
 | 
			
		||||
	unsigned long cached;		/* Size of cached memory       	*/
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* Swap Space (in bytes) */
 | 
			
		||||
 | 
			
		||||
struct table_swap
 | 
			
		||||
{
 | 
			
		||||
	unsigned long total;		/* Total swap space		*/
 | 
			
		||||
	unsigned long used;		/* Used swap space		*/
 | 
			
		||||
	unsigned long free;		/* Free swap space		*/
 | 
			
		||||
	unsigned long pagein;		/* Total # of pages swapped in	*/
 | 
			
		||||
	unsigned long pageout;		/* Total # of pages swapped out	*/
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* Load average */
 | 
			
		||||
 | 
			
		||||
struct table_loadavg
 | 
			
		||||
{
 | 
			
		||||
	double loadavg [3];
 | 
			
		||||
	unsigned nr_running;
 | 
			
		||||
	unsigned nr_tasks;
 | 
			
		||||
	unsigned last_pid;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* Uptime */
 | 
			
		||||
 | 
			
		||||
struct table_uptime
 | 
			
		||||
{
 | 
			
		||||
	unsigned long uptime;
 | 
			
		||||
	unsigned long idle;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* Process list. */
 | 
			
		||||
 | 
			
		||||
struct proclist_args
 | 
			
		||||
{
 | 
			
		||||
	int which, arg;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct table_proclist
 | 
			
		||||
{
 | 
			
		||||
	int nr_running, nr_tasks, last_pid;
 | 
			
		||||
	unsigned pids [NR_TASKS];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* Information about processes. */
 | 
			
		||||
 | 
			
		||||
struct table_proc_state
 | 
			
		||||
{
 | 
			
		||||
	long state;
 | 
			
		||||
	unsigned long flags;
 | 
			
		||||
	char comm[16];
 | 
			
		||||
	int uid, gid;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct table_proc_uid
 | 
			
		||||
{
 | 
			
		||||
	int uid, euid, suid, fsuid;
 | 
			
		||||
	int gid, egid, sgid, fsgid;
 | 
			
		||||
	int pid, pgrp, ppid;
 | 
			
		||||
	int session;
 | 
			
		||||
	unsigned int tty;
 | 
			
		||||
	int tpgid;
 | 
			
		||||
	long priority;
 | 
			
		||||
	long counter;
 | 
			
		||||
	long def_priority;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct table_proc_mem
 | 
			
		||||
{
 | 
			
		||||
	unsigned long context;
 | 
			
		||||
	unsigned long start_code, end_code, start_data, end_data;
 | 
			
		||||
	unsigned long start_brk, brk, start_stack, start_mmap;
 | 
			
		||||
	unsigned long arg_start, arg_end, env_start, env_end;
 | 
			
		||||
	unsigned long rss, rlim, total_vm, locked_vm;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct table_proc_segment
 | 
			
		||||
{
 | 
			
		||||
	unsigned long vsize;
 | 
			
		||||
	unsigned long size, resident, shared;
 | 
			
		||||
	unsigned long trs, lrs, drs, srs, dt;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct table_proc_time
 | 
			
		||||
{
 | 
			
		||||
	long utime, stime, cutime, cstime, start_time;
 | 
			
		||||
	unsigned long timeout, policy, rt_priority;
 | 
			
		||||
	unsigned long it_real_value, it_prof_value, it_virt_value;
 | 
			
		||||
	unsigned long it_real_incr, it_prof_incr, it_virt_incr;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct table_proc_signal
 | 
			
		||||
{
 | 
			
		||||
	unsigned long long signal,
 | 
			
		||||
		blocked,	/* bitmap of masked signals */
 | 
			
		||||
		ignored,	/* mask of ignored signals */
 | 
			
		||||
		caught;		/* mask of caught signals */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct table_proc_kernel
 | 
			
		||||
{
 | 
			
		||||
	unsigned long keip, kesp, wchan;
 | 
			
		||||
	unsigned long min_flt, maj_flt, cmin_flt, cmaj_flt;
 | 
			
		||||
	unsigned long nswap, cnswap;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* Union */
 | 
			
		||||
 | 
			
		||||
union table
 | 
			
		||||
{
 | 
			
		||||
	struct table_cpu cpu;
 | 
			
		||||
	struct table_mem mem;
 | 
			
		||||
	struct table_swap swap;
 | 
			
		||||
	struct table_loadavg loadavg;
 | 
			
		||||
	struct table_uptime uptime;
 | 
			
		||||
	struct table_proclist proclist;
 | 
			
		||||
	struct table_proc_uid proc_uid;
 | 
			
		||||
	struct table_proc_mem proc_mem;
 | 
			
		||||
	struct table_proc_segment proc_segment;
 | 
			
		||||
	struct table_proc_time proc_time;
 | 
			
		||||
	struct table_proc_state proc_state;	
 | 
			
		||||
	struct table_proc_signal proc_signal;
 | 
			
		||||
	struct table_proc_kernel proc_kernel;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif /* _LINUX_IPC_H */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										13
									
								
								kernel/table20/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								kernel/table20/Makefile
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
			
		||||
#
 | 
			
		||||
# Makefile for the linux system information tables.
 | 
			
		||||
#
 | 
			
		||||
# Note! Dependencies are done automagically by 'make dep', which also
 | 
			
		||||
# removes any old dependencies. DON'T put your own dependencies here
 | 
			
		||||
# unless it's something special (ie not a .c file).
 | 
			
		||||
#
 | 
			
		||||
# Note 2! The CFLAGS definition is now in the main makefile...
 | 
			
		||||
 | 
			
		||||
O_TARGET := table.o
 | 
			
		||||
O_OBJS   := main.o
 | 
			
		||||
 | 
			
		||||
include $(TOPDIR)/Rules.make
 | 
			
		||||
							
								
								
									
										21
									
								
								kernel/table20/README
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								kernel/table20/README
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,21 @@
 | 
			
		||||
This is a new system call `table ()' for the Linux table. It is faster
 | 
			
		||||
than reading from /proc and can be used to fetch all information required
 | 
			
		||||
for libgtop until whe have some other function (extended sysctl, ...) in
 | 
			
		||||
standard kernels.
 | 
			
		||||
 | 
			
		||||
I didn't want to change sysctl or some other function myself cause this may
 | 
			
		||||
cause other applications relying upon those function to fail. This is
 | 
			
		||||
something for the ``real'' kernel gurus ...
 | 
			
		||||
 | 
			
		||||
To use this new system call for libgtop, do the following:
 | 
			
		||||
 | 
			
		||||
* Copy this directory to /usr/src/linux/table
 | 
			
		||||
* Make /usr/src/linux/include/linux/table.h symlink to /usr/src/linux/table/table.h
 | 
			
		||||
* Apply the patch `kernel.patch' to the kernel, compile, install and reboot
 | 
			
		||||
* Recompile libgtop (remove `config.cache' and run the `autogen.sh' again).
 | 
			
		||||
 | 
			
		||||
If you want to change and/or add something - feel free to do so !
 | 
			
		||||
 | 
			
		||||
Have fun,
 | 
			
		||||
 | 
			
		||||
Martin
 | 
			
		||||
							
								
								
									
										706
									
								
								kernel/table20/entry-i386.S
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										706
									
								
								kernel/table20/entry-i386.S
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,706 @@
 | 
			
		||||
/*
 | 
			
		||||
 *  linux/arch/i386/entry.S
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (C) 1991, 1992  Linus Torvalds
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * entry.S contains the system-call and fault low-level handling routines.
 | 
			
		||||
 * This also contains the timer-interrupt handler, as well as all interrupts
 | 
			
		||||
 * and faults that can result in a task-switch.
 | 
			
		||||
 *
 | 
			
		||||
 * NOTE: This code handles signal-recognition, which happens every time
 | 
			
		||||
 * after a timer-interrupt and after each system call.
 | 
			
		||||
 *
 | 
			
		||||
 * I changed all the .align's to 4 (16 byte alignment), as that's faster
 | 
			
		||||
 * on a 486.
 | 
			
		||||
 *
 | 
			
		||||
 * Stack layout in 'ret_from_system_call':
 | 
			
		||||
 * 	ptrace needs to have all regs on the stack.
 | 
			
		||||
 *	if the order here is changed, it needs to be 
 | 
			
		||||
 *	updated in fork.c:copy_process, signal.c:do_signal,
 | 
			
		||||
 *	ptrace.c and ptrace.h
 | 
			
		||||
 *
 | 
			
		||||
 *	 0(%esp) - %ebx
 | 
			
		||||
 *	 4(%esp) - %ecx
 | 
			
		||||
 *	 8(%esp) - %edx
 | 
			
		||||
 *       C(%esp) - %esi
 | 
			
		||||
 *	10(%esp) - %edi
 | 
			
		||||
 *	14(%esp) - %ebp
 | 
			
		||||
 *	18(%esp) - %eax
 | 
			
		||||
 *	1C(%esp) - %ds
 | 
			
		||||
 *	20(%esp) - %es
 | 
			
		||||
 *      24(%esp) - %fs
 | 
			
		||||
 *	28(%esp) - %gs
 | 
			
		||||
 *	2C(%esp) - orig_eax
 | 
			
		||||
 *	30(%esp) - %eip
 | 
			
		||||
 *	34(%esp) - %cs
 | 
			
		||||
 *	38(%esp) - %eflags
 | 
			
		||||
 *	3C(%esp) - %oldesp
 | 
			
		||||
 *	40(%esp) - %oldss
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <linux/sys.h>
 | 
			
		||||
#include <linux/linkage.h>
 | 
			
		||||
#include <asm/segment.h>
 | 
			
		||||
#define ASSEMBLY
 | 
			
		||||
#include <asm/smp.h>
 | 
			
		||||
 | 
			
		||||
EBX		= 0x00
 | 
			
		||||
ECX		= 0x04
 | 
			
		||||
EDX		= 0x08
 | 
			
		||||
ESI		= 0x0C
 | 
			
		||||
EDI		= 0x10
 | 
			
		||||
EBP		= 0x14
 | 
			
		||||
EAX		= 0x18
 | 
			
		||||
DS		= 0x1C
 | 
			
		||||
ES		= 0x20
 | 
			
		||||
FS		= 0x24
 | 
			
		||||
GS		= 0x28
 | 
			
		||||
ORIG_EAX	= 0x2C
 | 
			
		||||
EIP		= 0x30
 | 
			
		||||
CS		= 0x34
 | 
			
		||||
EFLAGS		= 0x38
 | 
			
		||||
OLDESP		= 0x3C
 | 
			
		||||
OLDSS		= 0x40
 | 
			
		||||
 | 
			
		||||
CF_MASK		= 0x00000001
 | 
			
		||||
IF_MASK		= 0x00000200
 | 
			
		||||
NT_MASK		= 0x00004000
 | 
			
		||||
VM_MASK		= 0x00020000
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * these are offsets into the task-struct.
 | 
			
		||||
 */
 | 
			
		||||
state		=  0
 | 
			
		||||
counter		=  4
 | 
			
		||||
priority	=  8
 | 
			
		||||
signal		= 12
 | 
			
		||||
blocked		= 16
 | 
			
		||||
flags		= 20
 | 
			
		||||
dbgreg6		= 52
 | 
			
		||||
dbgreg7		= 56
 | 
			
		||||
exec_domain	= 60
 | 
			
		||||
 | 
			
		||||
ENOSYS = 38
 | 
			
		||||
 | 
			
		||||
#define SAVE_ALL \
 | 
			
		||||
	cld; \
 | 
			
		||||
	push %gs; \
 | 
			
		||||
	push %fs; \
 | 
			
		||||
	push %es; \
 | 
			
		||||
	push %ds; \
 | 
			
		||||
	pushl %eax; \
 | 
			
		||||
	pushl %ebp; \
 | 
			
		||||
	pushl %edi; \
 | 
			
		||||
	pushl %esi; \
 | 
			
		||||
	pushl %edx; \
 | 
			
		||||
	pushl %ecx; \
 | 
			
		||||
	pushl %ebx; \
 | 
			
		||||
	movl $(KERNEL_DS),%edx; \
 | 
			
		||||
	mov %dx,%ds; \
 | 
			
		||||
	mov %dx,%es; \
 | 
			
		||||
	movl $(USER_DS),%edx; \
 | 
			
		||||
	mov %dx,%fs;
 | 
			
		||||
 | 
			
		||||
#ifdef	__SMP__
 | 
			
		||||
 | 
			
		||||
#define GET_PROCESSOR_ID \
 | 
			
		||||
	movl SYMBOL_NAME(apic_reg), %edx; \
 | 
			
		||||
	movl 32(%edx), %eax;\
 | 
			
		||||
	movl %eax,SYMBOL_NAME(apic_retval); \
 | 
			
		||||
	shrl $24,%eax; \
 | 
			
		||||
	andb $0x0F,%al;
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 *	Get the processor ID multiplied by 4
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#define GET_PROCESSOR_OFFSET(x) \
 | 
			
		||||
	movl SYMBOL_NAME(apic_reg), x ; \
 | 
			
		||||
	movl 32( x ), x ; \
 | 
			
		||||
	shrl $22, x ; \
 | 
			
		||||
	andl $0x3C, x ;
 | 
			
		||||
 | 
			
		||||
/* macro LEAVE_KERNEL decrements kernel_counter and resets kernel_flag and
 | 
			
		||||
   saves processor variables if zero */
 | 
			
		||||
#define	LEAVE_KERNEL \
 | 
			
		||||
	pushfl; \
 | 
			
		||||
	cli; \
 | 
			
		||||
	GET_PROCESSOR_ID \
 | 
			
		||||
	btrl $ SMP_FROM_SYSCALL,SYMBOL_NAME(smp_proc_in_lock)(,%eax,4); \
 | 
			
		||||
	decl SYMBOL_NAME(syscall_count); \
 | 
			
		||||
	decl SYMBOL_NAME(kernel_counter); \
 | 
			
		||||
	jnz 1f;	\
 | 
			
		||||
	movb SYMBOL_NAME(saved_active_kernel_processor), %al; \
 | 
			
		||||
	movb %al, SYMBOL_NAME(active_kernel_processor); \
 | 
			
		||||
	cmpb $(NO_PROC_ID), %al; \
 | 
			
		||||
	jnz 1f; \
 | 
			
		||||
	lock; \
 | 
			
		||||
	btrl $0, SYMBOL_NAME(kernel_flag); \
 | 
			
		||||
1:	popfl;
 | 
			
		||||
 | 
			
		||||
/* macro ENTER_KERNEL waits for entering the kernel, increments
 | 
			
		||||
   kernel_counter, and reloads the processor variables if necessary
 | 
			
		||||
   uses : %eax, %edx (pushed and popped) 
 | 
			
		||||
 | 
			
		||||
   Note: We go to great pains to minimise the number of locked operations.
 | 
			
		||||
   We want to spin without locking, and lock when we attempt an update.
 | 
			
		||||
   The pentium has a MESI cache so the spin without lock will exit when
 | 
			
		||||
   another CPU write invalidates our cache, and the lock is avoided when
 | 
			
		||||
   possible so we don't play ping-pong games with the cache line.
 | 
			
		||||
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#ifndef __SMP_PROF__
 | 
			
		||||
 | 
			
		||||
#define SMP_PROF_A
 | 
			
		||||
#define SMP_PROF_B 
 | 
			
		||||
 | 
			
		||||
#else
 | 
			
		||||
 | 
			
		||||
#define SMP_PROF_A movl $0,SYMBOL_NAME(smp_spins_syscall_cur)(,%eax,4);
 | 
			
		||||
#define SMP_PROF_B incl SYMBOL_NAME(smp_spins_syscall)(,%eax,4); \
 | 
			
		||||
        incl SYMBOL_NAME(smp_spins_syscall_cur)(,%eax,4);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define	ENTER_KERNEL \
 | 
			
		||||
	pushl %eax; \
 | 
			
		||||
	pushl %ebx; \
 | 
			
		||||
	pushl %ecx; \
 | 
			
		||||
	pushl %edx; \
 | 
			
		||||
	pushfl; \
 | 
			
		||||
	cli; \
 | 
			
		||||
	movl $6000, %ebx; \
 | 
			
		||||
	movl SYMBOL_NAME(smp_loops_per_tick), %ecx; \
 | 
			
		||||
	GET_PROCESSOR_ID \
 | 
			
		||||
	btsl $ SMP_FROM_SYSCALL,SYMBOL_NAME(smp_proc_in_lock)(,%eax,4); \
 | 
			
		||||
	SMP_PROF_A \
 | 
			
		||||
1:	lock; \
 | 
			
		||||
	btsl $0, SYMBOL_NAME(kernel_flag); \
 | 
			
		||||
	jnc 3f; \
 | 
			
		||||
	cmpb SYMBOL_NAME(active_kernel_processor), %al; \
 | 
			
		||||
	je 4f; \
 | 
			
		||||
2:	SMP_PROF_B \
 | 
			
		||||
	btl %eax, SYMBOL_NAME(smp_invalidate_needed); \
 | 
			
		||||
	jnc 5f; \
 | 
			
		||||
	lock; \
 | 
			
		||||
	btrl %eax, SYMBOL_NAME(smp_invalidate_needed); \
 | 
			
		||||
	jnc 5f; \
 | 
			
		||||
	movl %cr3,%edx; \
 | 
			
		||||
	movl %edx,%cr3; \
 | 
			
		||||
5:	sti; \
 | 
			
		||||
	decl %ecx; \
 | 
			
		||||
	cli; \
 | 
			
		||||
	jne 7f; \
 | 
			
		||||
	decl %ebx; \
 | 
			
		||||
	jne 6f; \
 | 
			
		||||
	call SYMBOL_NAME(non_irq_deadlock_detected); \
 | 
			
		||||
6:	movl SYMBOL_NAME(smp_loops_per_tick), %ecx; \
 | 
			
		||||
	cmpb SYMBOL_NAME(boot_cpu_id), %al; \
 | 
			
		||||
	jne 7f; \
 | 
			
		||||
	incl SYMBOL_NAME(jiffies);  \
 | 
			
		||||
7:	btl $0, SYMBOL_NAME(kernel_flag); \
 | 
			
		||||
	jc 2b; \
 | 
			
		||||
	jmp 1b; \
 | 
			
		||||
3:	movb %al, SYMBOL_NAME(active_kernel_processor); \
 | 
			
		||||
4:	incl SYMBOL_NAME(kernel_counter); \
 | 
			
		||||
	incl SYMBOL_NAME(syscall_count); \
 | 
			
		||||
	popfl; \
 | 
			
		||||
	popl %edx; \
 | 
			
		||||
	popl %ecx; \
 | 
			
		||||
	popl %ebx; \
 | 
			
		||||
	popl %eax;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define RESTORE_ALL \
 | 
			
		||||
	cmpw $(KERNEL_CS),CS(%esp); \
 | 
			
		||||
	je 1f;   \
 | 
			
		||||
	GET_PROCESSOR_OFFSET(%edx) \
 | 
			
		||||
	movl SYMBOL_NAME(current_set)(,%edx), %eax ; ; \
 | 
			
		||||
	movl dbgreg7(%eax),%ebx; \
 | 
			
		||||
	movl %ebx,%db7;	\
 | 
			
		||||
1:	LEAVE_KERNEL \
 | 
			
		||||
	popl %ebx; \
 | 
			
		||||
	popl %ecx; \
 | 
			
		||||
	popl %edx; \
 | 
			
		||||
	popl %esi; \
 | 
			
		||||
	popl %edi; \
 | 
			
		||||
	popl %ebp; \
 | 
			
		||||
	popl %eax; \
 | 
			
		||||
	pop %ds; \
 | 
			
		||||
	pop %es; \
 | 
			
		||||
	pop %fs; \
 | 
			
		||||
	pop %gs; \
 | 
			
		||||
	addl $4,%esp; \
 | 
			
		||||
	iret
 | 
			
		||||
 | 
			
		||||
#else
 | 
			
		||||
 | 
			
		||||
#define RESTORE_ALL \
 | 
			
		||||
	cmpw $(KERNEL_CS),CS(%esp); \
 | 
			
		||||
	je 1f;   \
 | 
			
		||||
	movl SYMBOL_NAME(current_set),%eax; \
 | 
			
		||||
	movl dbgreg7(%eax),%ebx; \
 | 
			
		||||
	movl %ebx,%db7;	\
 | 
			
		||||
1:	\
 | 
			
		||||
	popl %ebx; \
 | 
			
		||||
	popl %ecx; \
 | 
			
		||||
	popl %edx; \
 | 
			
		||||
	popl %esi; \
 | 
			
		||||
	popl %edi; \
 | 
			
		||||
	popl %ebp; \
 | 
			
		||||
	popl %eax; \
 | 
			
		||||
	pop %ds; \
 | 
			
		||||
	pop %es; \
 | 
			
		||||
	pop %fs; \
 | 
			
		||||
	pop %gs; \
 | 
			
		||||
	addl $4,%esp; \
 | 
			
		||||
	iret
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
ENTRY(lcall7)
 | 
			
		||||
	pushfl			# We get a different stack layout with call gates,
 | 
			
		||||
	pushl %eax		# which has to be cleaned up later..
 | 
			
		||||
	SAVE_ALL
 | 
			
		||||
#ifdef __SMP__
 | 
			
		||||
	ENTER_KERNEL
 | 
			
		||||
#endif
 | 
			
		||||
	movl EIP(%esp),%eax	# due to call gates, this is eflags, not eip..
 | 
			
		||||
	movl CS(%esp),%edx	# this is eip..
 | 
			
		||||
	movl EFLAGS(%esp),%ecx	# and this is cs..
 | 
			
		||||
	movl %eax,EFLAGS(%esp)	#
 | 
			
		||||
	movl %edx,EIP(%esp)	# Now we move them to their "normal" places
 | 
			
		||||
	movl %ecx,CS(%esp)	#
 | 
			
		||||
	movl %esp,%eax
 | 
			
		||||
#ifdef __SMP__
 | 
			
		||||
	GET_PROCESSOR_OFFSET(%edx)	# Processor offset into edx
 | 
			
		||||
	movl SYMBOL_NAME(current_set)(,%edx),%edx
 | 
			
		||||
#else
 | 
			
		||||
	movl SYMBOL_NAME(current_set),%edx
 | 
			
		||||
#endif
 | 
			
		||||
	pushl %eax
 | 
			
		||||
	movl exec_domain(%edx),%edx	# Get the execution domain
 | 
			
		||||
	movl 4(%edx),%edx	# Get the lcall7 handler for the domain
 | 
			
		||||
	call *%edx
 | 
			
		||||
	popl %eax
 | 
			
		||||
	jmp ret_from_sys_call
 | 
			
		||||
 | 
			
		||||
	ALIGN
 | 
			
		||||
handle_bottom_half:
 | 
			
		||||
	incl SYMBOL_NAME(intr_count)
 | 
			
		||||
	call SYMBOL_NAME(do_bottom_half)
 | 
			
		||||
	decl SYMBOL_NAME(intr_count)
 | 
			
		||||
	jmp 9f
 | 
			
		||||
	ALIGN
 | 
			
		||||
reschedule:
 | 
			
		||||
	pushl $ret_from_sys_call
 | 
			
		||||
	jmp SYMBOL_NAME(schedule)    # test
 | 
			
		||||
 | 
			
		||||
ENTRY(system_call)
 | 
			
		||||
	pushl %eax			# save orig_eax
 | 
			
		||||
	SAVE_ALL
 | 
			
		||||
#ifdef __SMP__
 | 
			
		||||
	ENTER_KERNEL
 | 
			
		||||
#endif
 | 
			
		||||
	movl $-ENOSYS,EAX(%esp)
 | 
			
		||||
	cmpl $(NR_syscalls),%eax
 | 
			
		||||
	jae ret_from_sys_call
 | 
			
		||||
	movl SYMBOL_NAME(sys_call_table)(,%eax,4),%eax
 | 
			
		||||
	testl %eax,%eax
 | 
			
		||||
	je ret_from_sys_call
 | 
			
		||||
#ifdef __SMP__
 | 
			
		||||
	GET_PROCESSOR_OFFSET(%edx)
 | 
			
		||||
	movl SYMBOL_NAME(current_set)(,%edx),%ebx
 | 
			
		||||
#else
 | 
			
		||||
	movl SYMBOL_NAME(current_set),%ebx
 | 
			
		||||
#endif
 | 
			
		||||
	andl $~CF_MASK,EFLAGS(%esp)	# clear carry - assume no errors
 | 
			
		||||
	movl %db6,%edx
 | 
			
		||||
	movl %edx,dbgreg6(%ebx)  # save current hardware debugging status
 | 
			
		||||
	testb $0x20,flags(%ebx)		# PF_TRACESYS
 | 
			
		||||
	jne 1f
 | 
			
		||||
	call *%eax
 | 
			
		||||
	movl %eax,EAX(%esp)		# save the return value
 | 
			
		||||
	jmp ret_from_sys_call
 | 
			
		||||
	ALIGN
 | 
			
		||||
1:	call SYMBOL_NAME(syscall_trace)
 | 
			
		||||
	movl ORIG_EAX(%esp),%eax
 | 
			
		||||
	call SYMBOL_NAME(sys_call_table)(,%eax,4)
 | 
			
		||||
	movl %eax,EAX(%esp)		# save the return value
 | 
			
		||||
#ifdef __SMP__
 | 
			
		||||
	GET_PROCESSOR_OFFSET(%eax)
 | 
			
		||||
	movl SYMBOL_NAME(current_set)(,%eax),%eax
 | 
			
		||||
#else
 | 
			
		||||
	movl SYMBOL_NAME(current_set),%eax
 | 
			
		||||
#endif
 | 
			
		||||
	call SYMBOL_NAME(syscall_trace)
 | 
			
		||||
 | 
			
		||||
	ALIGN
 | 
			
		||||
	.globl ret_from_sys_call
 | 
			
		||||
ret_from_sys_call:
 | 
			
		||||
	cmpl $0,SYMBOL_NAME(intr_count)
 | 
			
		||||
	jne 2f
 | 
			
		||||
9:	movl SYMBOL_NAME(bh_mask),%eax
 | 
			
		||||
	andl SYMBOL_NAME(bh_active),%eax
 | 
			
		||||
	jne handle_bottom_half
 | 
			
		||||
#ifdef __SMP__
 | 
			
		||||
	cmpb $(NO_PROC_ID), SYMBOL_NAME(saved_active_kernel_processor)
 | 
			
		||||
	jne 2f
 | 
			
		||||
#endif
 | 
			
		||||
	movl EFLAGS(%esp),%eax		# check VM86 flag: CS/SS are
 | 
			
		||||
	testl $(VM_MASK),%eax		# different then
 | 
			
		||||
	jne 1f
 | 
			
		||||
	cmpw $(KERNEL_CS),CS(%esp)	# was old code segment supervisor ?
 | 
			
		||||
	je 2f
 | 
			
		||||
1:	sti
 | 
			
		||||
	orl $(IF_MASK),%eax		# these just try to make sure
 | 
			
		||||
	andl $~NT_MASK,%eax		# the program doesn't do anything
 | 
			
		||||
	movl %eax,EFLAGS(%esp)		# stupid
 | 
			
		||||
	cmpl $0,SYMBOL_NAME(need_resched)
 | 
			
		||||
	jne reschedule
 | 
			
		||||
#ifdef __SMP__
 | 
			
		||||
	GET_PROCESSOR_OFFSET(%eax)
 | 
			
		||||
	movl SYMBOL_NAME(current_set)(,%eax), %eax
 | 
			
		||||
#else
 | 
			
		||||
	movl SYMBOL_NAME(current_set),%eax
 | 
			
		||||
#endif
 | 
			
		||||
	cmpl SYMBOL_NAME(task),%eax	# task[0] cannot have signals
 | 
			
		||||
	je 2f
 | 
			
		||||
	movl blocked(%eax),%ecx
 | 
			
		||||
	movl %ecx,%ebx			# save blocked in %ebx for signal handling
 | 
			
		||||
	notl %ecx
 | 
			
		||||
	andl signal(%eax),%ecx
 | 
			
		||||
	jne signal_return
 | 
			
		||||
2:	RESTORE_ALL
 | 
			
		||||
	ALIGN
 | 
			
		||||
signal_return:
 | 
			
		||||
	movl %esp,%ecx
 | 
			
		||||
	pushl %ecx
 | 
			
		||||
	testl $(VM_MASK),EFLAGS(%ecx)
 | 
			
		||||
	jne v86_signal_return
 | 
			
		||||
	pushl %ebx
 | 
			
		||||
	call SYMBOL_NAME(do_signal)
 | 
			
		||||
	popl %ebx
 | 
			
		||||
	popl %ebx
 | 
			
		||||
	RESTORE_ALL
 | 
			
		||||
	ALIGN
 | 
			
		||||
v86_signal_return:
 | 
			
		||||
	call SYMBOL_NAME(save_v86_state)
 | 
			
		||||
	movl %eax,%esp
 | 
			
		||||
	pushl %eax
 | 
			
		||||
	pushl %ebx
 | 
			
		||||
	call SYMBOL_NAME(do_signal)
 | 
			
		||||
	popl %ebx
 | 
			
		||||
	popl %ebx
 | 
			
		||||
	RESTORE_ALL
 | 
			
		||||
 | 
			
		||||
ENTRY(divide_error)
 | 
			
		||||
	pushl $0		# no error code
 | 
			
		||||
	pushl $ SYMBOL_NAME(do_divide_error)
 | 
			
		||||
	ALIGN
 | 
			
		||||
error_code:
 | 
			
		||||
	push %fs
 | 
			
		||||
	push %es
 | 
			
		||||
	push %ds
 | 
			
		||||
	pushl %eax
 | 
			
		||||
	xorl %eax,%eax
 | 
			
		||||
	pushl %ebp
 | 
			
		||||
	pushl %edi
 | 
			
		||||
	pushl %esi
 | 
			
		||||
	pushl %edx
 | 
			
		||||
	decl %eax			# eax = -1
 | 
			
		||||
	pushl %ecx
 | 
			
		||||
	pushl %ebx
 | 
			
		||||
	cld
 | 
			
		||||
	xorl %ebx,%ebx			# zero ebx
 | 
			
		||||
	xchgl %eax, ORIG_EAX(%esp)	# orig_eax (get the error code. )
 | 
			
		||||
	mov %gs,%bx			# get the lower order bits of gs
 | 
			
		||||
	movl %esp,%edx
 | 
			
		||||
	xchgl %ebx, GS(%esp)		# get the address and save gs.
 | 
			
		||||
	pushl %eax			# push the error code
 | 
			
		||||
	pushl %edx
 | 
			
		||||
	movl $(KERNEL_DS),%edx
 | 
			
		||||
	mov %dx,%ds
 | 
			
		||||
	mov %dx,%es
 | 
			
		||||
	movl $(USER_DS),%edx
 | 
			
		||||
	mov %dx,%fs
 | 
			
		||||
#ifdef __SMP__
 | 
			
		||||
	ENTER_KERNEL
 | 
			
		||||
	GET_PROCESSOR_OFFSET(%eax)
 | 
			
		||||
	movl SYMBOL_NAME(current_set)(,%eax), %eax
 | 
			
		||||
#else
 | 
			
		||||
	movl SYMBOL_NAME(current_set),%eax
 | 
			
		||||
#endif
 | 
			
		||||
	movl %db6,%edx
 | 
			
		||||
	movl %edx,dbgreg6(%eax)  # save current hardware debugging status
 | 
			
		||||
	call *%ebx
 | 
			
		||||
	addl $8,%esp
 | 
			
		||||
	jmp ret_from_sys_call
 | 
			
		||||
 | 
			
		||||
ENTRY(coprocessor_error)
 | 
			
		||||
	pushl $0
 | 
			
		||||
	pushl $ SYMBOL_NAME(do_coprocessor_error)
 | 
			
		||||
	jmp error_code
 | 
			
		||||
 | 
			
		||||
ENTRY(device_not_available)
 | 
			
		||||
	pushl $-1		# mark this as an int
 | 
			
		||||
	SAVE_ALL
 | 
			
		||||
#ifdef __SMP__
 | 
			
		||||
	ENTER_KERNEL
 | 
			
		||||
#endif
 | 
			
		||||
	pushl $ret_from_sys_call
 | 
			
		||||
	movl %cr0,%eax
 | 
			
		||||
	testl $0x4,%eax			# EM (math emulation bit)
 | 
			
		||||
	je SYMBOL_NAME(math_state_restore)
 | 
			
		||||
	pushl $0		# temporary storage for ORIG_EIP
 | 
			
		||||
	call  SYMBOL_NAME(math_emulate)
 | 
			
		||||
	addl $4,%esp
 | 
			
		||||
	ret
 | 
			
		||||
 | 
			
		||||
ENTRY(debug)
 | 
			
		||||
	pushl $0
 | 
			
		||||
	pushl $ SYMBOL_NAME(do_debug)
 | 
			
		||||
	jmp error_code
 | 
			
		||||
 | 
			
		||||
ENTRY(nmi)
 | 
			
		||||
	pushl $0
 | 
			
		||||
	pushl $ SYMBOL_NAME(do_nmi)
 | 
			
		||||
	jmp error_code
 | 
			
		||||
 | 
			
		||||
ENTRY(int3)
 | 
			
		||||
	pushl $0
 | 
			
		||||
	pushl $ SYMBOL_NAME(do_int3)
 | 
			
		||||
	jmp error_code
 | 
			
		||||
 | 
			
		||||
ENTRY(overflow)
 | 
			
		||||
	pushl $0
 | 
			
		||||
	pushl $ SYMBOL_NAME(do_overflow)
 | 
			
		||||
	jmp error_code
 | 
			
		||||
 | 
			
		||||
ENTRY(bounds)
 | 
			
		||||
	pushl $0
 | 
			
		||||
	pushl $ SYMBOL_NAME(do_bounds)
 | 
			
		||||
	jmp error_code
 | 
			
		||||
 | 
			
		||||
ENTRY(invalid_op)
 | 
			
		||||
	pushl $0
 | 
			
		||||
	pushl $ SYMBOL_NAME(do_invalid_op)
 | 
			
		||||
	jmp error_code
 | 
			
		||||
 | 
			
		||||
ENTRY(coprocessor_segment_overrun)
 | 
			
		||||
	pushl $0
 | 
			
		||||
	pushl $ SYMBOL_NAME(do_coprocessor_segment_overrun)
 | 
			
		||||
	jmp error_code
 | 
			
		||||
 | 
			
		||||
ENTRY(reserved)
 | 
			
		||||
	pushl $0
 | 
			
		||||
	pushl $ SYMBOL_NAME(do_reserved)
 | 
			
		||||
	jmp error_code
 | 
			
		||||
 | 
			
		||||
ENTRY(double_fault)
 | 
			
		||||
	pushl $ SYMBOL_NAME(do_double_fault)
 | 
			
		||||
	jmp error_code
 | 
			
		||||
 | 
			
		||||
ENTRY(invalid_TSS)
 | 
			
		||||
	pushl $ SYMBOL_NAME(do_invalid_TSS)
 | 
			
		||||
	jmp error_code
 | 
			
		||||
 | 
			
		||||
ENTRY(segment_not_present)
 | 
			
		||||
	pushl $ SYMBOL_NAME(do_segment_not_present)
 | 
			
		||||
	jmp error_code
 | 
			
		||||
 | 
			
		||||
ENTRY(stack_segment)
 | 
			
		||||
	pushl $ SYMBOL_NAME(do_stack_segment)
 | 
			
		||||
	jmp error_code
 | 
			
		||||
 | 
			
		||||
ENTRY(general_protection)
 | 
			
		||||
	pushl $ SYMBOL_NAME(do_general_protection)
 | 
			
		||||
	jmp error_code
 | 
			
		||||
 | 
			
		||||
ENTRY(alignment_check)
 | 
			
		||||
	pushl $ SYMBOL_NAME(do_alignment_check)
 | 
			
		||||
	jmp error_code
 | 
			
		||||
 | 
			
		||||
ENTRY(page_fault)
 | 
			
		||||
	pushl $ SYMBOL_NAME(do_page_fault)
 | 
			
		||||
	jmp error_code
 | 
			
		||||
 | 
			
		||||
ENTRY(spurious_interrupt_bug)
 | 
			
		||||
	pushl $0
 | 
			
		||||
	pushl $ SYMBOL_NAME(do_spurious_interrupt_bug)
 | 
			
		||||
	jmp error_code
 | 
			
		||||
 | 
			
		||||
.data
 | 
			
		||||
ENTRY(sys_call_table)
 | 
			
		||||
	.long SYMBOL_NAME(sys_setup)		/* 0 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_exit)
 | 
			
		||||
	.long SYMBOL_NAME(sys_fork)
 | 
			
		||||
	.long SYMBOL_NAME(sys_read)
 | 
			
		||||
	.long SYMBOL_NAME(sys_write)
 | 
			
		||||
	.long SYMBOL_NAME(sys_open)		/* 5 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_close)
 | 
			
		||||
	.long SYMBOL_NAME(sys_waitpid)
 | 
			
		||||
	.long SYMBOL_NAME(sys_creat)
 | 
			
		||||
	.long SYMBOL_NAME(sys_link)
 | 
			
		||||
	.long SYMBOL_NAME(sys_unlink)		/* 10 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_execve)
 | 
			
		||||
	.long SYMBOL_NAME(sys_chdir)
 | 
			
		||||
	.long SYMBOL_NAME(sys_time)
 | 
			
		||||
	.long SYMBOL_NAME(sys_mknod)
 | 
			
		||||
	.long SYMBOL_NAME(sys_chmod)		/* 15 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_chown)
 | 
			
		||||
	.long SYMBOL_NAME(sys_break)
 | 
			
		||||
	.long SYMBOL_NAME(sys_stat)
 | 
			
		||||
	.long SYMBOL_NAME(sys_lseek)
 | 
			
		||||
	.long SYMBOL_NAME(sys_getpid)		/* 20 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_mount)
 | 
			
		||||
	.long SYMBOL_NAME(sys_umount)
 | 
			
		||||
	.long SYMBOL_NAME(sys_setuid)
 | 
			
		||||
	.long SYMBOL_NAME(sys_getuid)
 | 
			
		||||
	.long SYMBOL_NAME(sys_stime)		/* 25 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_ptrace)
 | 
			
		||||
	.long SYMBOL_NAME(sys_alarm)
 | 
			
		||||
	.long SYMBOL_NAME(sys_fstat)
 | 
			
		||||
	.long SYMBOL_NAME(sys_pause)
 | 
			
		||||
	.long SYMBOL_NAME(sys_utime)		/* 30 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_stty)
 | 
			
		||||
	.long SYMBOL_NAME(sys_gtty)
 | 
			
		||||
	.long SYMBOL_NAME(sys_access)
 | 
			
		||||
	.long SYMBOL_NAME(sys_nice)
 | 
			
		||||
	.long SYMBOL_NAME(sys_ftime)		/* 35 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_sync)
 | 
			
		||||
	.long SYMBOL_NAME(sys_kill)
 | 
			
		||||
	.long SYMBOL_NAME(sys_rename)
 | 
			
		||||
	.long SYMBOL_NAME(sys_mkdir)
 | 
			
		||||
	.long SYMBOL_NAME(sys_rmdir)		/* 40 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_dup)
 | 
			
		||||
	.long SYMBOL_NAME(sys_pipe)
 | 
			
		||||
	.long SYMBOL_NAME(sys_times)
 | 
			
		||||
	.long SYMBOL_NAME(sys_prof)
 | 
			
		||||
	.long SYMBOL_NAME(sys_brk)		/* 45 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_setgid)
 | 
			
		||||
	.long SYMBOL_NAME(sys_getgid)
 | 
			
		||||
	.long SYMBOL_NAME(sys_signal)
 | 
			
		||||
	.long SYMBOL_NAME(sys_geteuid)
 | 
			
		||||
	.long SYMBOL_NAME(sys_getegid)		/* 50 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_acct)
 | 
			
		||||
	.long SYMBOL_NAME(sys_phys)
 | 
			
		||||
	.long SYMBOL_NAME(sys_lock)
 | 
			
		||||
	.long SYMBOL_NAME(sys_ioctl)
 | 
			
		||||
	.long SYMBOL_NAME(sys_fcntl)		/* 55 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_mpx)
 | 
			
		||||
	.long SYMBOL_NAME(sys_setpgid)
 | 
			
		||||
	.long SYMBOL_NAME(sys_ulimit)
 | 
			
		||||
	.long SYMBOL_NAME(sys_olduname)
 | 
			
		||||
	.long SYMBOL_NAME(sys_umask)		/* 60 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_chroot)
 | 
			
		||||
	.long SYMBOL_NAME(sys_ustat)
 | 
			
		||||
	.long SYMBOL_NAME(sys_dup2)
 | 
			
		||||
	.long SYMBOL_NAME(sys_getppid)
 | 
			
		||||
	.long SYMBOL_NAME(sys_getpgrp)		/* 65 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_setsid)
 | 
			
		||||
	.long SYMBOL_NAME(sys_sigaction)
 | 
			
		||||
	.long SYMBOL_NAME(sys_sgetmask)
 | 
			
		||||
	.long SYMBOL_NAME(sys_ssetmask)
 | 
			
		||||
	.long SYMBOL_NAME(sys_setreuid)		/* 70 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_setregid)
 | 
			
		||||
	.long SYMBOL_NAME(sys_sigsuspend)
 | 
			
		||||
	.long SYMBOL_NAME(sys_sigpending)
 | 
			
		||||
	.long SYMBOL_NAME(sys_sethostname)
 | 
			
		||||
	.long SYMBOL_NAME(sys_setrlimit)	/* 75 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_getrlimit)
 | 
			
		||||
	.long SYMBOL_NAME(sys_getrusage)
 | 
			
		||||
	.long SYMBOL_NAME(sys_gettimeofday)
 | 
			
		||||
	.long SYMBOL_NAME(sys_settimeofday)
 | 
			
		||||
	.long SYMBOL_NAME(sys_getgroups)	/* 80 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_setgroups)
 | 
			
		||||
	.long SYMBOL_NAME(old_select)
 | 
			
		||||
	.long SYMBOL_NAME(sys_symlink)
 | 
			
		||||
	.long SYMBOL_NAME(sys_lstat)
 | 
			
		||||
	.long SYMBOL_NAME(sys_readlink)		/* 85 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_uselib)
 | 
			
		||||
	.long SYMBOL_NAME(sys_swapon)
 | 
			
		||||
	.long SYMBOL_NAME(sys_reboot)
 | 
			
		||||
	.long SYMBOL_NAME(old_readdir)
 | 
			
		||||
	.long SYMBOL_NAME(old_mmap)		/* 90 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_munmap)
 | 
			
		||||
	.long SYMBOL_NAME(sys_truncate)
 | 
			
		||||
	.long SYMBOL_NAME(sys_ftruncate)
 | 
			
		||||
	.long SYMBOL_NAME(sys_fchmod)
 | 
			
		||||
	.long SYMBOL_NAME(sys_fchown)		/* 95 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_getpriority)
 | 
			
		||||
	.long SYMBOL_NAME(sys_setpriority)
 | 
			
		||||
	.long SYMBOL_NAME(sys_profil)
 | 
			
		||||
	.long SYMBOL_NAME(sys_statfs)
 | 
			
		||||
	.long SYMBOL_NAME(sys_fstatfs)		/* 100 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_ioperm)
 | 
			
		||||
	.long SYMBOL_NAME(sys_socketcall)
 | 
			
		||||
	.long SYMBOL_NAME(sys_syslog)
 | 
			
		||||
	.long SYMBOL_NAME(sys_setitimer)
 | 
			
		||||
	.long SYMBOL_NAME(sys_getitimer)	/* 105 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_newstat)
 | 
			
		||||
	.long SYMBOL_NAME(sys_newlstat)
 | 
			
		||||
	.long SYMBOL_NAME(sys_newfstat)
 | 
			
		||||
	.long SYMBOL_NAME(sys_uname)
 | 
			
		||||
	.long SYMBOL_NAME(sys_iopl)		/* 110 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_vhangup)
 | 
			
		||||
	.long SYMBOL_NAME(sys_idle)
 | 
			
		||||
	.long SYMBOL_NAME(sys_vm86old)
 | 
			
		||||
	.long SYMBOL_NAME(sys_wait4)
 | 
			
		||||
	.long SYMBOL_NAME(sys_swapoff)		/* 115 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_sysinfo)
 | 
			
		||||
	.long SYMBOL_NAME(sys_ipc)
 | 
			
		||||
	.long SYMBOL_NAME(sys_fsync)
 | 
			
		||||
	.long SYMBOL_NAME(sys_sigreturn)
 | 
			
		||||
	.long SYMBOL_NAME(sys_clone)		/* 120 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_setdomainname)
 | 
			
		||||
	.long SYMBOL_NAME(sys_newuname)
 | 
			
		||||
	.long SYMBOL_NAME(sys_modify_ldt)
 | 
			
		||||
	.long SYMBOL_NAME(sys_adjtimex)
 | 
			
		||||
	.long SYMBOL_NAME(sys_mprotect)		/* 125 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_sigprocmask)
 | 
			
		||||
	.long SYMBOL_NAME(sys_create_module)
 | 
			
		||||
	.long SYMBOL_NAME(sys_init_module)
 | 
			
		||||
	.long SYMBOL_NAME(sys_delete_module)
 | 
			
		||||
	.long SYMBOL_NAME(sys_get_kernel_syms)	/* 130 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_quotactl)
 | 
			
		||||
	.long SYMBOL_NAME(sys_getpgid)
 | 
			
		||||
	.long SYMBOL_NAME(sys_fchdir)
 | 
			
		||||
	.long SYMBOL_NAME(sys_bdflush)
 | 
			
		||||
	.long SYMBOL_NAME(sys_sysfs)		/* 135 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_personality)
 | 
			
		||||
	.long 0					/* for afs_syscall */
 | 
			
		||||
	.long SYMBOL_NAME(sys_setfsuid)
 | 
			
		||||
	.long SYMBOL_NAME(sys_setfsgid)
 | 
			
		||||
	.long SYMBOL_NAME(sys_llseek)		/* 140 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_getdents)
 | 
			
		||||
	.long SYMBOL_NAME(sys_select)
 | 
			
		||||
	.long SYMBOL_NAME(sys_flock)
 | 
			
		||||
	.long SYMBOL_NAME(sys_msync)
 | 
			
		||||
	.long SYMBOL_NAME(sys_readv)		/* 145 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_writev)
 | 
			
		||||
	.long SYMBOL_NAME(sys_getsid)
 | 
			
		||||
	.long SYMBOL_NAME(sys_fdatasync)
 | 
			
		||||
	.long SYMBOL_NAME(sys_sysctl)
 | 
			
		||||
	.long SYMBOL_NAME(sys_mlock)		/* 150 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_munlock)
 | 
			
		||||
	.long SYMBOL_NAME(sys_mlockall)
 | 
			
		||||
	.long SYMBOL_NAME(sys_munlockall)
 | 
			
		||||
	.long SYMBOL_NAME(sys_sched_setparam)
 | 
			
		||||
	.long SYMBOL_NAME(sys_sched_getparam)   /* 155 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_sched_setscheduler)
 | 
			
		||||
	.long SYMBOL_NAME(sys_sched_getscheduler)
 | 
			
		||||
	.long SYMBOL_NAME(sys_sched_yield)
 | 
			
		||||
	.long SYMBOL_NAME(sys_sched_get_priority_max)
 | 
			
		||||
	.long SYMBOL_NAME(sys_sched_get_priority_min)  /* 160 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_sched_rr_get_interval)
 | 
			
		||||
	.long SYMBOL_NAME(sys_nanosleep)
 | 
			
		||||
	.long SYMBOL_NAME(sys_mremap)
 | 
			
		||||
	.long 0,0
 | 
			
		||||
	.long SYMBOL_NAME(sys_vm86)
 | 
			
		||||
	.long 0,0,0,0					/* 170 */
 | 
			
		||||
	.long 0,0,0,0,0,0,0,0,0,0			/* 180 */
 | 
			
		||||
	.long 0,0,0,0,0,0,0
 | 
			
		||||
	.long SYMBOL_NAME(sys_table)
 | 
			
		||||
	.space (NR_syscalls-188)*4
 | 
			
		||||
							
								
								
									
										51
									
								
								kernel/table20/kernel.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								kernel/table20/kernel.patch
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,51 @@
 | 
			
		||||
diff -ur linux-2.0.32/Makefile linux-hacked/Makefile
 | 
			
		||||
--- linux-2.0.32/Makefile	Fri Nov  7 19:51:05 1997
 | 
			
		||||
+++ linux-hacked/Makefile	Thu Jun 11 20:41:12 1998
 | 
			
		||||
@@ -87,7 +87,7 @@
 | 
			
		||||
 # standard CFLAGS
 | 
			
		||||
 #
 | 
			
		||||
 
 | 
			
		||||
-CFLAGS = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -fno-strength-reduce
 | 
			
		||||
+CFLAGS = -Wall -Wstrict-prototypes -g -O2 -fomit-frame-pointer -fno-strength-reduce
 | 
			
		||||
 
 | 
			
		||||
 ifdef CONFIG_CPP
 | 
			
		||||
 CFLAGS := $(CFLAGS) -x c++
 | 
			
		||||
@@ -113,12 +113,12 @@
 | 
			
		||||
 # Include the make variables (CC, etc...)
 | 
			
		||||
 #
 | 
			
		||||
 
 | 
			
		||||
-ARCHIVES	=kernel/kernel.o mm/mm.o fs/fs.o ipc/ipc.o net/network.a
 | 
			
		||||
+ARCHIVES	=kernel/kernel.o mm/mm.o fs/fs.o ipc/ipc.o net/network.a table/table.o
 | 
			
		||||
 FILESYSTEMS	=fs/filesystems.a
 | 
			
		||||
 DRIVERS		=drivers/block/block.a \
 | 
			
		||||
 		 drivers/char/char.a
 | 
			
		||||
 LIBS		=$(TOPDIR)/lib/lib.a
 | 
			
		||||
-SUBDIRS		=kernel drivers mm fs net ipc lib
 | 
			
		||||
+SUBDIRS		=kernel drivers mm fs net ipc lib table
 | 
			
		||||
 
 | 
			
		||||
 ifeq ($(CONFIG_ISDN),y)
 | 
			
		||||
 DRIVERS := $(DRIVERS) drivers/isdn/isdn.a
 | 
			
		||||
diff -ur linux-2.0.32/arch/i386/kernel/entry.S linux-hacked/arch/i386/kernel/entry.S
 | 
			
		||||
--- linux-2.0.32/arch/i386/kernel/entry.S	Tue Sep 16 23:42:45 1997
 | 
			
		||||
+++ linux-hacked/arch/i386/kernel/entry.S	Thu Jun 11 21:37:20 1998
 | 
			
		||||
@@ -699,4 +699,8 @@
 | 
			
		||||
 	.long SYMBOL_NAME(sys_mremap)
 | 
			
		||||
 	.long 0,0
 | 
			
		||||
 	.long SYMBOL_NAME(sys_vm86)
 | 
			
		||||
-	.space (NR_syscalls-166)*4
 | 
			
		||||
+	.long 0,0,0,0					/* 170 */
 | 
			
		||||
+	.long 0,0,0,0,0,0,0,0,0,0			/* 180 */
 | 
			
		||||
+	.long 0,0,0,0,0,0,0
 | 
			
		||||
+	.long SYMBOL_NAME(sys_table)
 | 
			
		||||
+	.space (NR_syscalls-188)*4
 | 
			
		||||
diff -ur linux-2.0.32/include/asm-i386/unistd.h linux-hacked/include/asm-i386/unistd.h
 | 
			
		||||
--- linux-2.0.32/include/asm-i386/unistd.h	Fri Mar 22 07:34:02 1996
 | 
			
		||||
+++ linux-hacked/include/asm-i386/unistd.h	Thu Jun 11 21:37:03 1998
 | 
			
		||||
@@ -169,6 +169,7 @@
 | 
			
		||||
 #define __NR_sched_rr_get_interval	161
 | 
			
		||||
 #define __NR_nanosleep		162
 | 
			
		||||
 #define __NR_mremap		163
 | 
			
		||||
+#define __NR_table		188
 | 
			
		||||
 
 | 
			
		||||
 /* XXX - _foo needs to be __foo, while __NR_bar could be _NR_bar. */
 | 
			
		||||
 #define _syscall0(type,name) \
 | 
			
		||||
							
								
								
									
										468
									
								
								kernel/table20/main.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										468
									
								
								kernel/table20/main.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,468 @@
 | 
			
		||||
/*
 | 
			
		||||
 * linux/table/table_impl.c
 | 
			
		||||
 * Copyright (C) 1998 Martin Baulig
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <linux/types.h>
 | 
			
		||||
#include <linux/errno.h>
 | 
			
		||||
#include <linux/sched.h>
 | 
			
		||||
#include <linux/kernel.h>
 | 
			
		||||
#include <linux/kernel_stat.h>
 | 
			
		||||
#include <linux/tty.h>
 | 
			
		||||
#include <linux/user.h>
 | 
			
		||||
#include <linux/a.out.h>
 | 
			
		||||
#include <linux/string.h>
 | 
			
		||||
#include <linux/mman.h>
 | 
			
		||||
#include <linux/proc_fs.h>
 | 
			
		||||
#include <linux/ioport.h>
 | 
			
		||||
#include <linux/config.h>
 | 
			
		||||
#include <linux/mm.h>
 | 
			
		||||
#include <linux/pagemap.h>
 | 
			
		||||
#include <linux/swap.h>
 | 
			
		||||
 | 
			
		||||
#include <asm/segment.h>
 | 
			
		||||
#include <asm/pgtable.h>
 | 
			
		||||
#include <asm/io.h>
 | 
			
		||||
 | 
			
		||||
#include <linux/table.h>
 | 
			
		||||
 | 
			
		||||
#include "version.h"
 | 
			
		||||
 | 
			
		||||
#if defined(__i386__)
 | 
			
		||||
# define KSTK_EIP(tsk)	(((unsigned long *)tsk->kernel_stack_page)[1019])
 | 
			
		||||
# define KSTK_ESP(tsk)	(((unsigned long *)tsk->kernel_stack_page)[1022])
 | 
			
		||||
#elif defined(__alpha__)
 | 
			
		||||
  /*
 | 
			
		||||
   * See arch/alpha/kernel/ptrace.c for details.
 | 
			
		||||
   */
 | 
			
		||||
# define PT_REG(reg)		(PAGE_SIZE - sizeof(struct pt_regs)	\
 | 
			
		||||
				 + (long)&((struct pt_regs *)0)->reg)
 | 
			
		||||
# define KSTK_EIP(tsk)	(*(unsigned long *)(tsk->kernel_stack_page + PT_REG(pc)))
 | 
			
		||||
# define KSTK_ESP(tsk)	((tsk) == current ? rdusp() : (tsk)->tss.usp)
 | 
			
		||||
#elif defined(__sparc__)
 | 
			
		||||
# define PT_REG(reg)            (PAGE_SIZE - sizeof(struct pt_regs)     \
 | 
			
		||||
                                 + (long)&((struct pt_regs *)0)->reg)
 | 
			
		||||
# define KSTK_EIP(tsk)  (*(unsigned long *)(tsk->kernel_stack_page + PT_REG(pc)))
 | 
			
		||||
# define KSTK_ESP(tsk)  (*(unsigned long *)(tsk->kernel_stack_page + PT_REG(u_regs[UREG_FP])))
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
static struct task_struct *
 | 
			
		||||
get_task (pid_t pid)
 | 
			
		||||
{
 | 
			
		||||
	struct task_struct ** p;
 | 
			
		||||
	
 | 
			
		||||
	p = task;
 | 
			
		||||
	while (++p < task+NR_TASKS) {
 | 
			
		||||
		if (*p && (*p)->pid == pid)
 | 
			
		||||
			return *p;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline void statm_pte_range(pmd_t * pmd, unsigned long address, unsigned long size,
 | 
			
		||||
	int * pages, int * shared, int * dirty, int * total)
 | 
			
		||||
{
 | 
			
		||||
	pte_t * pte;
 | 
			
		||||
	unsigned long end;
 | 
			
		||||
 | 
			
		||||
	if (pmd_none(*pmd))
 | 
			
		||||
		return;
 | 
			
		||||
	if (pmd_bad(*pmd)) {
 | 
			
		||||
		printk("statm_pte_range: bad pmd (%08lx)\n", pmd_val(*pmd));
 | 
			
		||||
		pmd_clear(pmd);
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
	pte = pte_offset(pmd, address);
 | 
			
		||||
	address &= ~PMD_MASK;
 | 
			
		||||
	end = address + size;
 | 
			
		||||
	if (end > PMD_SIZE)
 | 
			
		||||
		end = PMD_SIZE;
 | 
			
		||||
	do {
 | 
			
		||||
		pte_t page = *pte;
 | 
			
		||||
 | 
			
		||||
		address += PAGE_SIZE;
 | 
			
		||||
		pte++;
 | 
			
		||||
		if (pte_none(page))
 | 
			
		||||
			continue;
 | 
			
		||||
		++*total;
 | 
			
		||||
		if (!pte_present(page))
 | 
			
		||||
			continue;
 | 
			
		||||
		++*pages;
 | 
			
		||||
		if (pte_dirty(page))
 | 
			
		||||
			++*dirty;
 | 
			
		||||
		if (pte_page(page) >= high_memory)
 | 
			
		||||
			continue;
 | 
			
		||||
		if (mem_map[MAP_NR(pte_page(page))].count > 1)
 | 
			
		||||
			++*shared;
 | 
			
		||||
	} while (address < end);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline void statm_pmd_range(pgd_t * pgd, unsigned long address, unsigned long size,
 | 
			
		||||
	int * pages, int * shared, int * dirty, int * total)
 | 
			
		||||
{
 | 
			
		||||
	pmd_t * pmd;
 | 
			
		||||
	unsigned long end;
 | 
			
		||||
 | 
			
		||||
	if (pgd_none(*pgd))
 | 
			
		||||
		return;
 | 
			
		||||
	if (pgd_bad(*pgd)) {
 | 
			
		||||
		printk("statm_pmd_range: bad pgd (%08lx)\n", pgd_val(*pgd));
 | 
			
		||||
		pgd_clear(pgd);
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
	pmd = pmd_offset(pgd, address);
 | 
			
		||||
	address &= ~PGDIR_MASK;
 | 
			
		||||
	end = address + size;
 | 
			
		||||
	if (end > PGDIR_SIZE)
 | 
			
		||||
		end = PGDIR_SIZE;
 | 
			
		||||
	do {
 | 
			
		||||
		statm_pte_range(pmd, address, end - address, pages, shared, dirty, total);
 | 
			
		||||
		address = (address + PMD_SIZE) & PMD_MASK;
 | 
			
		||||
		pmd++;
 | 
			
		||||
	} while (address < end);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void statm_pgd_range(pgd_t * pgd, unsigned long address, unsigned long end,
 | 
			
		||||
	int * pages, int * shared, int * dirty, int * total)
 | 
			
		||||
{
 | 
			
		||||
	while (address < end) {
 | 
			
		||||
		statm_pmd_range(pgd, address, end - address, pages, shared, dirty, total);
 | 
			
		||||
		address = (address + PGDIR_SIZE) & PGDIR_MASK;
 | 
			
		||||
		pgd++;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static unsigned long
 | 
			
		||||
get_wchan (struct task_struct *p)
 | 
			
		||||
{
 | 
			
		||||
	if (!p || p == current || p->state == TASK_RUNNING)
 | 
			
		||||
		return 0;
 | 
			
		||||
#if defined(__i386__)
 | 
			
		||||
	{
 | 
			
		||||
		unsigned long ebp, eip;
 | 
			
		||||
		unsigned long stack_page;
 | 
			
		||||
		int count = 0;
 | 
			
		||||
 | 
			
		||||
		stack_page = p->kernel_stack_page;
 | 
			
		||||
		if (!stack_page)
 | 
			
		||||
			return 0;
 | 
			
		||||
		ebp = p->tss.ebp;
 | 
			
		||||
		do {
 | 
			
		||||
			if (ebp < stack_page || ebp >= 4092+stack_page)
 | 
			
		||||
				return 0;
 | 
			
		||||
			eip = *(unsigned long *) (ebp+4);
 | 
			
		||||
			if (eip < (unsigned long) interruptible_sleep_on
 | 
			
		||||
			    || eip >= (unsigned long) add_timer)
 | 
			
		||||
				return eip;
 | 
			
		||||
			ebp = *(unsigned long *) ebp;
 | 
			
		||||
		} while (count++ < 16);
 | 
			
		||||
	}
 | 
			
		||||
#elif defined(__alpha__)
 | 
			
		||||
	/*
 | 
			
		||||
	 * This one depends on the frame size of schedule().  Do a
 | 
			
		||||
	 * "disass schedule" in gdb to find the frame size.  Also, the
 | 
			
		||||
	 * code assumes that sleep_on() follows immediately after
 | 
			
		||||
	 * interruptible_sleep_on() and that add_timer() follows
 | 
			
		||||
	 * immediately after interruptible_sleep().  Ugly, isn't it?
 | 
			
		||||
	 * Maybe adding a wchan field to task_struct would be better,
 | 
			
		||||
	 * after all...
 | 
			
		||||
	 */
 | 
			
		||||
	{
 | 
			
		||||
		unsigned long schedule_frame;
 | 
			
		||||
		unsigned long pc;
 | 
			
		||||
		
 | 
			
		||||
		pc = thread_saved_pc(&p->tss);
 | 
			
		||||
		if (pc >= (unsigned long) interruptible_sleep_on && pc < (unsigned long) add_timer) {
 | 
			
		||||
			schedule_frame = ((unsigned long *)p->tss.ksp)[6];
 | 
			
		||||
			return ((unsigned long *)schedule_frame)[12];
 | 
			
		||||
		}
 | 
			
		||||
		return pc;
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
asmlinkage int
 | 
			
		||||
sys_table (int type, union table *buf, const void *param)
 | 
			
		||||
{
 | 
			
		||||
	union table tbl;
 | 
			
		||||
	struct sysinfo i;
 | 
			
		||||
	struct task_struct *tsk = NULL;
 | 
			
		||||
	struct ip_chain *chain;
 | 
			
		||||
	struct ip_fwkernel *rule;
 | 
			
		||||
	char devname [9];
 | 
			
		||||
	int index, err;
 | 
			
		||||
	pid_t pid;
 | 
			
		||||
 | 
			
		||||
	if (type == TABLE_VERSION)
 | 
			
		||||
		return _TABLE_VERSION;
 | 
			
		||||
 | 
			
		||||
	if (!buf)
 | 
			
		||||
		return -EFAULT;
 | 
			
		||||
 | 
			
		||||
	memset (&tbl, 0, sizeof (union table));
 | 
			
		||||
 | 
			
		||||
	/* For TABLE_PROC_*, read pid and get task_struct */
 | 
			
		||||
 | 
			
		||||
	switch (type) {
 | 
			
		||||
	case TABLE_PROC_UID:
 | 
			
		||||
	case TABLE_PROC_MEM:
 | 
			
		||||
	case TABLE_PROC_SEGMENT:
 | 
			
		||||
	case TABLE_PROC_TIME:
 | 
			
		||||
	case TABLE_PROC_STATE:
 | 
			
		||||
	case TABLE_PROC_SIGNAL:
 | 
			
		||||
	case TABLE_PROC_KERNEL:
 | 
			
		||||
	  err = verify_area (VERIFY_READ, param, sizeof (pid_t));
 | 
			
		||||
		if (err)
 | 
			
		||||
			return err;
 | 
			
		||||
		memcpy_fromfs (&pid, param, sizeof (pid_t));
 | 
			
		||||
 | 
			
		||||
		tsk = get_task (pid);
 | 
			
		||||
		if (tsk == NULL)
 | 
			
		||||
			return -ESRCH;
 | 
			
		||||
		break;
 | 
			
		||||
	case TABLE_NETACCT:
 | 
			
		||||
		err = verify_area (VERIFY_READ, param, 5);
 | 
			
		||||
		if (err)
 | 
			
		||||
			return err;
 | 
			
		||||
		copy_from_user (devname, param, 5);
 | 
			
		||||
		devname [5] = 0;
 | 
			
		||||
 | 
			
		||||
		break;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* Main function dispatcher */
 | 
			
		||||
 | 
			
		||||
	switch (type) {
 | 
			
		||||
	case TABLE_PROCLIST:
 | 
			
		||||
		tsk = task [0];
 | 
			
		||||
		for (index = 0; index < nr_tasks; index++) {
 | 
			
		||||
			tbl.proclist.pids [index] = tsk->pid;
 | 
			
		||||
			tsk = tsk->next_task;
 | 
			
		||||
		}
 | 
			
		||||
		tbl.proclist.nr_running = nr_running;
 | 
			
		||||
		tbl.proclist.nr_tasks = nr_tasks;
 | 
			
		||||
		tbl.proclist.last_pid = last_pid;
 | 
			
		||||
		break;
 | 
			
		||||
	case TABLE_CPU:
 | 
			
		||||
		tbl.cpu.total = jiffies;    
 | 
			
		||||
		tbl.cpu.user  = kstat.cpu_user;
 | 
			
		||||
		tbl.cpu.nice  = kstat.cpu_nice;
 | 
			
		||||
		tbl.cpu.sys   = kstat.cpu_system;
 | 
			
		||||
		tbl.cpu.idle  = tbl.cpu.total -
 | 
			
		||||
			(tbl.cpu.user + tbl.cpu.nice + tbl.cpu.sys);
 | 
			
		||||
		tbl.cpu.frequency = HZ;
 | 
			
		||||
		break;
 | 
			
		||||
	case TABLE_MEM:
 | 
			
		||||
		si_meminfo (&i);
 | 
			
		||||
		tbl.mem.total  = i.totalram;
 | 
			
		||||
		tbl.mem.used   = i.totalram - i.freeram;
 | 
			
		||||
		tbl.mem.free   = i.freeram;
 | 
			
		||||
		tbl.mem.shared = i.sharedram;
 | 
			
		||||
		tbl.mem.buffer = i.bufferram;
 | 
			
		||||
		tbl.mem.cached = page_cache_size << PAGE_SHIFT;
 | 
			
		||||
		break;
 | 
			
		||||
	case TABLE_SWAP:
 | 
			
		||||
		si_swapinfo (&i);
 | 
			
		||||
		tbl.swap.total = i.totalswap;
 | 
			
		||||
		tbl.swap.used  = i.totalswap - i.freeswap;
 | 
			
		||||
		tbl.swap.free  = i.freeswap;
 | 
			
		||||
		tbl.swap.pagein = kstat.pswpin;
 | 
			
		||||
		tbl.swap.pageout = kstat.pswpout;
 | 
			
		||||
		break;
 | 
			
		||||
	case TABLE_LOADAVG:
 | 
			
		||||
		tbl.loadavg.loadavg [0] = (double) avenrun [0] / (1 << FSHIFT);
 | 
			
		||||
		tbl.loadavg.loadavg [1] = (double) avenrun [1] / (1 << FSHIFT);
 | 
			
		||||
		tbl.loadavg.loadavg [2] = (double) avenrun [2] / (1 << FSHIFT);
 | 
			
		||||
		tbl.loadavg.nr_running = nr_running;
 | 
			
		||||
		tbl.loadavg.nr_tasks = nr_tasks;
 | 
			
		||||
		tbl.loadavg.last_pid = last_pid;
 | 
			
		||||
		break;
 | 
			
		||||
	case TABLE_UPTIME:
 | 
			
		||||
		tbl.uptime.uptime = jiffies;
 | 
			
		||||
		tbl.uptime.idle   = task[0]->utime + task[0]->stime;
 | 
			
		||||
		break;
 | 
			
		||||
	case TABLE_PROC_STATE:
 | 
			
		||||
		tbl.proc_state.state = tsk->state;
 | 
			
		||||
		tbl.proc_state.flags = tsk->flags;
 | 
			
		||||
		memcpy (tbl.proc_state.comm, tsk->comm,
 | 
			
		||||
			sizeof (tbl.proc_state.comm));
 | 
			
		||||
		break;
 | 
			
		||||
	case TABLE_PROC_UID:
 | 
			
		||||
		tbl.proc_uid.uid = tsk->uid;
 | 
			
		||||
		tbl.proc_uid.euid = tsk->euid;
 | 
			
		||||
		tbl.proc_uid.suid = tsk->suid;
 | 
			
		||||
		tbl.proc_uid.fsuid = tsk->fsuid;
 | 
			
		||||
		
 | 
			
		||||
		tbl.proc_uid.gid = tsk->gid;
 | 
			
		||||
		tbl.proc_uid.egid = tsk->egid;
 | 
			
		||||
		tbl.proc_uid.sgid = tsk->sgid;
 | 
			
		||||
		tbl.proc_uid.fsgid = tsk->fsgid;
 | 
			
		||||
		
 | 
			
		||||
		tbl.proc_uid.pid = tsk->pid;
 | 
			
		||||
		tbl.proc_uid.pgrp = tsk->pgrp;
 | 
			
		||||
		tbl.proc_uid.ppid = tsk->p_pptr->pid;
 | 
			
		||||
		
 | 
			
		||||
		tbl.proc_uid.session = tsk->session;
 | 
			
		||||
	        tbl.proc_uid.tty = tsk->tty ?
 | 
			
		||||
			kdev_t_to_nr (tsk->tty->device) : 0;
 | 
			
		||||
		tbl.proc_uid.tpgid = tsk->tty ? tsk->tty->pgrp : -1;
 | 
			
		||||
		
 | 
			
		||||
		tbl.proc_uid.priority = tsk->priority;
 | 
			
		||||
		tbl.proc_uid.counter = tsk->counter;
 | 
			
		||||
		tbl.proc_uid.def_priority = DEF_PRIORITY;
 | 
			
		||||
		break;
 | 
			
		||||
	case TABLE_PROC_SIGNAL:
 | 
			
		||||
		tbl.proc_signal.signal = tsk->signal;
 | 
			
		||||
		tbl.proc_signal.blocked = tsk->blocked;
 | 
			
		||||
 | 
			
		||||
		if (tsk->sig) {
 | 
			
		||||
			struct sigaction * action = tsk->sig->action;
 | 
			
		||||
			unsigned long sig_ign = 0, sig_caught = 0;
 | 
			
		||||
			unsigned long bit = 1;
 | 
			
		||||
			int i;
 | 
			
		||||
			
 | 
			
		||||
			for (i = 0; i < 32; i++) {
 | 
			
		||||
				switch((unsigned long) action->sa_handler) {
 | 
			
		||||
				case 0:
 | 
			
		||||
					break;
 | 
			
		||||
				case 1:
 | 
			
		||||
					sig_ign |= bit;
 | 
			
		||||
					break;
 | 
			
		||||
				default:
 | 
			
		||||
					sig_caught |= bit;
 | 
			
		||||
				}
 | 
			
		||||
				bit <<= 1;
 | 
			
		||||
				action++;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			tbl.proc_signal.ignored = sig_ign;
 | 
			
		||||
			tbl.proc_signal.caught  = sig_caught;
 | 
			
		||||
		} else {
 | 
			
		||||
			tbl.proc_signal.ignored = 0;
 | 
			
		||||
			tbl.proc_signal.caught  = 0;
 | 
			
		||||
		}
 | 
			
		||||
		break;
 | 
			
		||||
	case TABLE_PROC_MEM:
 | 
			
		||||
		if (tsk->mm && tsk->mm != &init_mm) {
 | 
			
		||||
			tbl.proc_mem.context = tsk->mm->context;
 | 
			
		||||
			tbl.proc_mem.start_code = tsk->mm->start_code;
 | 
			
		||||
			tbl.proc_mem.end_code = tsk->mm->end_code;
 | 
			
		||||
			tbl.proc_mem.start_data = tsk->mm-> start_data;
 | 
			
		||||
			tbl.proc_mem.end_data = tsk->mm->end_data;
 | 
			
		||||
			tbl.proc_mem.start_brk = tsk->mm->start_brk;
 | 
			
		||||
			tbl.proc_mem.brk = tsk->mm->brk;
 | 
			
		||||
			tbl.proc_mem.start_stack = tsk->mm->start_stack;
 | 
			
		||||
			tbl.proc_mem.start_mmap = tsk->mm->start_mmap;
 | 
			
		||||
			tbl.proc_mem.arg_start = tsk->mm->arg_start;
 | 
			
		||||
			tbl.proc_mem.arg_end = tsk->mm->arg_end;
 | 
			
		||||
			tbl.proc_mem.env_start = tsk->mm->env_start;
 | 
			
		||||
			tbl.proc_mem.env_end = tsk->mm->env_end;
 | 
			
		||||
			tbl.proc_mem.rss = tsk->mm->rss;
 | 
			
		||||
			tbl.proc_mem.total_vm = tsk->mm->total_vm;
 | 
			
		||||
			tbl.proc_mem.locked_vm = tsk->mm->locked_vm;
 | 
			
		||||
		}
 | 
			
		||||
		tbl.proc_mem.rlim = tsk->rlim ?
 | 
			
		||||
			tsk->rlim[RLIMIT_RSS].rlim_cur : 0;
 | 
			
		||||
		break;
 | 
			
		||||
	case TABLE_PROC_SEGMENT:
 | 
			
		||||
		if (tsk->mm && tsk->mm != &init_mm) {
 | 
			
		||||
			unsigned long vsize = 0;
 | 
			
		||||
			int size = 0, resident = 0, share = 0;
 | 
			
		||||
			int trs = 0, lrs = 0, drs = 0, dt = 0;
 | 
			
		||||
			struct vm_area_struct * vma = tsk->mm->mmap;
 | 
			
		||||
 | 
			
		||||
			while (vma) {
 | 
			
		||||
				pgd_t *pgd = pgd_offset(tsk->mm, vma->vm_start);
 | 
			
		||||
				int pages = 0, shared = 0, dirty = 0, total = 0;
 | 
			
		||||
				
 | 
			
		||||
				vsize += vma->vm_end - vma->vm_start;
 | 
			
		||||
 | 
			
		||||
				statm_pgd_range (pgd, vma->vm_start, vma->vm_end,
 | 
			
		||||
						 &pages, &shared, &dirty, &total);
 | 
			
		||||
				resident += pages;
 | 
			
		||||
				share += shared;
 | 
			
		||||
				dt += dirty;
 | 
			
		||||
				size += total;
 | 
			
		||||
				if (vma->vm_flags & VM_EXECUTABLE)
 | 
			
		||||
					trs += pages;	/* text */
 | 
			
		||||
				else if (vma->vm_flags & VM_GROWSDOWN)
 | 
			
		||||
					drs += pages;	/* stack */
 | 
			
		||||
				else if (vma->vm_end > 0x60000000)
 | 
			
		||||
					lrs += pages;	/* library */
 | 
			
		||||
				else
 | 
			
		||||
					drs += pages;
 | 
			
		||||
				vma = vma->vm_next;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			tbl.proc_segment.vsize = vsize;
 | 
			
		||||
			tbl.proc_segment.size = size;
 | 
			
		||||
			tbl.proc_segment.resident = resident;
 | 
			
		||||
			tbl.proc_segment.shared = share;
 | 
			
		||||
			tbl.proc_segment.trs = trs;
 | 
			
		||||
			tbl.proc_segment.lrs = lrs;
 | 
			
		||||
			tbl.proc_segment.dt = dt;
 | 
			
		||||
		}
 | 
			
		||||
		break;
 | 
			
		||||
	case TABLE_PROC_TIME:
 | 
			
		||||
		tbl.proc_time.utime = tsk->utime;
 | 
			
		||||
		tbl.proc_time.stime = tsk->stime;
 | 
			
		||||
		tbl.proc_time.cutime = tsk->cutime;
 | 
			
		||||
		tbl.proc_time.cstime = tsk->cstime;
 | 
			
		||||
 | 
			
		||||
		tbl.proc_time.start_time = tsk->start_time;
 | 
			
		||||
		tbl.proc_time.timeout = tsk->timeout;
 | 
			
		||||
		tbl.proc_time.policy = tsk->policy;
 | 
			
		||||
		tbl.proc_time.rt_priority = tsk->rt_priority;
 | 
			
		||||
 | 
			
		||||
		tbl.proc_time.it_real_value = tsk->it_real_value;
 | 
			
		||||
		tbl.proc_time.it_prof_value = tsk->it_prof_value;
 | 
			
		||||
		tbl.proc_time.it_virt_value = tsk->it_virt_value;
 | 
			
		||||
		tbl.proc_time.it_real_incr = tsk->it_real_incr;
 | 
			
		||||
		tbl.proc_time.it_prof_incr = tsk->it_prof_incr;
 | 
			
		||||
		tbl.proc_time.it_virt_incr = tsk->it_virt_incr;
 | 
			
		||||
		break;
 | 
			
		||||
	case TABLE_PROC_KERNEL:
 | 
			
		||||
		tbl.proc_kernel.min_flt = tsk->min_flt;
 | 
			
		||||
		tbl.proc_kernel.cmin_flt = tsk->cmin_flt;
 | 
			
		||||
		tbl.proc_kernel.maj_flt = tsk->maj_flt;
 | 
			
		||||
		tbl.proc_kernel.cmaj_flt = tsk->cmaj_flt;
 | 
			
		||||
		
 | 
			
		||||
		tbl.proc_kernel.kesp = tsk->kernel_stack_page ? KSTK_EIP(tsk) : 0;
 | 
			
		||||
		tbl.proc_kernel.keip = tsk->kernel_stack_page ? KSTK_ESP(tsk) : 0;
 | 
			
		||||
		
 | 
			
		||||
		tbl.proc_kernel.nswap = tsk->nswap;
 | 
			
		||||
		tbl.proc_kernel.cnswap = tsk->cnswap;
 | 
			
		||||
 | 
			
		||||
		tbl.proc_kernel.wchan = get_wchan (tsk);
 | 
			
		||||
		break;
 | 
			
		||||
	case TABLE_NETACCT:
 | 
			
		||||
		for (chain = ip_fw_chains; chain; chain = chain->next) {
 | 
			
		||||
			for (rule = chain->chain; rule; rule = rule->next) {
 | 
			
		||||
				const char *name = rule->ipfw.fw_vianame;
 | 
			
		||||
				int k;
 | 
			
		||||
				
 | 
			
		||||
				if (name [0] && !strncmp (param, name, 5))
 | 
			
		||||
					continue;
 | 
			
		||||
				
 | 
			
		||||
				for (k = 0; k < NUM_SLOTS; k++) {
 | 
			
		||||
					tbl.netacct.packets +=
 | 
			
		||||
						rule->counters[k].pcnt;
 | 
			
		||||
					tbl.netacct.bytes +=
 | 
			
		||||
						rule->counters[k].bcnt;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		break;
 | 
			
		||||
	default:
 | 
			
		||||
		return -EINVAL;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	err = verify_area (VERIFY_WRITE, buf, sizeof (struct table));
 | 
			
		||||
	if (err)
 | 
			
		||||
		return err;
 | 
			
		||||
 | 
			
		||||
	memcpy_tofs (buf, &tbl, sizeof (union table));
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										324
									
								
								kernel/table20/unistd-i386.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										324
									
								
								kernel/table20/unistd-i386.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,324 @@
 | 
			
		||||
#ifndef _ASM_I386_UNISTD_H_
 | 
			
		||||
#define _ASM_I386_UNISTD_H_
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * This file contains the system call numbers.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#define __NR_setup		  0	/* used only by init, to get system going */
 | 
			
		||||
#define __NR_exit		  1
 | 
			
		||||
#define __NR_fork		  2
 | 
			
		||||
#define __NR_read		  3
 | 
			
		||||
#define __NR_write		  4
 | 
			
		||||
#define __NR_open		  5
 | 
			
		||||
#define __NR_close		  6
 | 
			
		||||
#define __NR_waitpid		  7
 | 
			
		||||
#define __NR_creat		  8
 | 
			
		||||
#define __NR_link		  9
 | 
			
		||||
#define __NR_unlink		 10
 | 
			
		||||
#define __NR_execve		 11
 | 
			
		||||
#define __NR_chdir		 12
 | 
			
		||||
#define __NR_time		 13
 | 
			
		||||
#define __NR_mknod		 14
 | 
			
		||||
#define __NR_chmod		 15
 | 
			
		||||
#define __NR_chown		 16
 | 
			
		||||
#define __NR_break		 17
 | 
			
		||||
#define __NR_oldstat		 18
 | 
			
		||||
#define __NR_lseek		 19
 | 
			
		||||
#define __NR_getpid		 20
 | 
			
		||||
#define __NR_mount		 21
 | 
			
		||||
#define __NR_umount		 22
 | 
			
		||||
#define __NR_setuid		 23
 | 
			
		||||
#define __NR_getuid		 24
 | 
			
		||||
#define __NR_stime		 25
 | 
			
		||||
#define __NR_ptrace		 26
 | 
			
		||||
#define __NR_alarm		 27
 | 
			
		||||
#define __NR_oldfstat		 28
 | 
			
		||||
#define __NR_pause		 29
 | 
			
		||||
#define __NR_utime		 30
 | 
			
		||||
#define __NR_stty		 31
 | 
			
		||||
#define __NR_gtty		 32
 | 
			
		||||
#define __NR_access		 33
 | 
			
		||||
#define __NR_nice		 34
 | 
			
		||||
#define __NR_ftime		 35
 | 
			
		||||
#define __NR_sync		 36
 | 
			
		||||
#define __NR_kill		 37
 | 
			
		||||
#define __NR_rename		 38
 | 
			
		||||
#define __NR_mkdir		 39
 | 
			
		||||
#define __NR_rmdir		 40
 | 
			
		||||
#define __NR_dup		 41
 | 
			
		||||
#define __NR_pipe		 42
 | 
			
		||||
#define __NR_times		 43
 | 
			
		||||
#define __NR_prof		 44
 | 
			
		||||
#define __NR_brk		 45
 | 
			
		||||
#define __NR_setgid		 46
 | 
			
		||||
#define __NR_getgid		 47
 | 
			
		||||
#define __NR_signal		 48
 | 
			
		||||
#define __NR_geteuid		 49
 | 
			
		||||
#define __NR_getegid		 50
 | 
			
		||||
#define __NR_acct		 51
 | 
			
		||||
#define __NR_phys		 52
 | 
			
		||||
#define __NR_lock		 53
 | 
			
		||||
#define __NR_ioctl		 54
 | 
			
		||||
#define __NR_fcntl		 55
 | 
			
		||||
#define __NR_mpx		 56
 | 
			
		||||
#define __NR_setpgid		 57
 | 
			
		||||
#define __NR_ulimit		 58
 | 
			
		||||
#define __NR_oldolduname	 59
 | 
			
		||||
#define __NR_umask		 60
 | 
			
		||||
#define __NR_chroot		 61
 | 
			
		||||
#define __NR_ustat		 62
 | 
			
		||||
#define __NR_dup2		 63
 | 
			
		||||
#define __NR_getppid		 64
 | 
			
		||||
#define __NR_getpgrp		 65
 | 
			
		||||
#define __NR_setsid		 66
 | 
			
		||||
#define __NR_sigaction		 67
 | 
			
		||||
#define __NR_sgetmask		 68
 | 
			
		||||
#define __NR_ssetmask		 69
 | 
			
		||||
#define __NR_setreuid		 70
 | 
			
		||||
#define __NR_setregid		 71
 | 
			
		||||
#define __NR_sigsuspend		 72
 | 
			
		||||
#define __NR_sigpending		 73
 | 
			
		||||
#define __NR_sethostname	 74
 | 
			
		||||
#define __NR_setrlimit		 75
 | 
			
		||||
#define __NR_getrlimit		 76
 | 
			
		||||
#define __NR_getrusage		 77
 | 
			
		||||
#define __NR_gettimeofday	 78
 | 
			
		||||
#define __NR_settimeofday	 79
 | 
			
		||||
#define __NR_getgroups		 80
 | 
			
		||||
#define __NR_setgroups		 81
 | 
			
		||||
#define __NR_select		 82
 | 
			
		||||
#define __NR_symlink		 83
 | 
			
		||||
#define __NR_oldlstat		 84
 | 
			
		||||
#define __NR_readlink		 85
 | 
			
		||||
#define __NR_uselib		 86
 | 
			
		||||
#define __NR_swapon		 87
 | 
			
		||||
#define __NR_reboot		 88
 | 
			
		||||
#define __NR_readdir		 89
 | 
			
		||||
#define __NR_mmap		 90
 | 
			
		||||
#define __NR_munmap		 91
 | 
			
		||||
#define __NR_truncate		 92
 | 
			
		||||
#define __NR_ftruncate		 93
 | 
			
		||||
#define __NR_fchmod		 94
 | 
			
		||||
#define __NR_fchown		 95
 | 
			
		||||
#define __NR_getpriority	 96
 | 
			
		||||
#define __NR_setpriority	 97
 | 
			
		||||
#define __NR_profil		 98
 | 
			
		||||
#define __NR_statfs		 99
 | 
			
		||||
#define __NR_fstatfs		100
 | 
			
		||||
#define __NR_ioperm		101
 | 
			
		||||
#define __NR_socketcall		102
 | 
			
		||||
#define __NR_syslog		103
 | 
			
		||||
#define __NR_setitimer		104
 | 
			
		||||
#define __NR_getitimer		105
 | 
			
		||||
#define __NR_stat		106
 | 
			
		||||
#define __NR_lstat		107
 | 
			
		||||
#define __NR_fstat		108
 | 
			
		||||
#define __NR_olduname		109
 | 
			
		||||
#define __NR_iopl		110
 | 
			
		||||
#define __NR_vhangup		111
 | 
			
		||||
#define __NR_idle		112
 | 
			
		||||
#define __NR_vm86		113
 | 
			
		||||
#define __NR_wait4		114
 | 
			
		||||
#define __NR_swapoff		115
 | 
			
		||||
#define __NR_sysinfo		116
 | 
			
		||||
#define __NR_ipc		117
 | 
			
		||||
#define __NR_fsync		118
 | 
			
		||||
#define __NR_sigreturn		119
 | 
			
		||||
#define __NR_clone		120
 | 
			
		||||
#define __NR_setdomainname	121
 | 
			
		||||
#define __NR_uname		122
 | 
			
		||||
#define __NR_modify_ldt		123
 | 
			
		||||
#define __NR_adjtimex		124
 | 
			
		||||
#define __NR_mprotect		125
 | 
			
		||||
#define __NR_sigprocmask	126
 | 
			
		||||
#define __NR_create_module	127
 | 
			
		||||
#define __NR_init_module	128
 | 
			
		||||
#define __NR_delete_module	129
 | 
			
		||||
#define __NR_get_kernel_syms	130
 | 
			
		||||
#define __NR_quotactl		131
 | 
			
		||||
#define __NR_getpgid		132
 | 
			
		||||
#define __NR_fchdir		133
 | 
			
		||||
#define __NR_bdflush		134
 | 
			
		||||
#define __NR_sysfs		135
 | 
			
		||||
#define __NR_personality	136
 | 
			
		||||
#define __NR_afs_syscall	137 /* Syscall for Andrew File System */
 | 
			
		||||
#define __NR_setfsuid		138
 | 
			
		||||
#define __NR_setfsgid		139
 | 
			
		||||
#define __NR__llseek		140
 | 
			
		||||
#define __NR_getdents		141
 | 
			
		||||
#define __NR__newselect		142
 | 
			
		||||
#define __NR_flock		143
 | 
			
		||||
#define __NR_msync		144
 | 
			
		||||
#define __NR_readv		145
 | 
			
		||||
#define __NR_writev		146
 | 
			
		||||
#define __NR_getsid		147
 | 
			
		||||
#define __NR_fdatasync		148
 | 
			
		||||
#define __NR__sysctl		149
 | 
			
		||||
#define __NR_mlock		150
 | 
			
		||||
#define __NR_munlock		151
 | 
			
		||||
#define __NR_mlockall		152
 | 
			
		||||
#define __NR_munlockall		153
 | 
			
		||||
#define __NR_sched_setparam		154
 | 
			
		||||
#define __NR_sched_getparam		155
 | 
			
		||||
#define __NR_sched_setscheduler		156
 | 
			
		||||
#define __NR_sched_getscheduler		157
 | 
			
		||||
#define __NR_sched_yield		158
 | 
			
		||||
#define __NR_sched_get_priority_max	159
 | 
			
		||||
#define __NR_sched_get_priority_min	160
 | 
			
		||||
#define __NR_sched_rr_get_interval	161
 | 
			
		||||
#define __NR_nanosleep		162
 | 
			
		||||
#define __NR_mremap		163
 | 
			
		||||
#define __NR_table		188
 | 
			
		||||
 | 
			
		||||
/* XXX - _foo needs to be __foo, while __NR_bar could be _NR_bar. */
 | 
			
		||||
#define _syscall0(type,name) \
 | 
			
		||||
type name(void) \
 | 
			
		||||
{ \
 | 
			
		||||
long __res; \
 | 
			
		||||
__asm__ volatile ("int $0x80" \
 | 
			
		||||
	: "=a" (__res) \
 | 
			
		||||
	: "0" (__NR_##name)); \
 | 
			
		||||
if (__res >= 0) \
 | 
			
		||||
	return (type) __res; \
 | 
			
		||||
errno = -__res; \
 | 
			
		||||
return -1; \
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#define _syscall1(type,name,type1,arg1) \
 | 
			
		||||
type name(type1 arg1) \
 | 
			
		||||
{ \
 | 
			
		||||
long __res; \
 | 
			
		||||
__asm__ volatile ("int $0x80" \
 | 
			
		||||
	: "=a" (__res) \
 | 
			
		||||
	: "0" (__NR_##name),"b" ((long)(arg1))); \
 | 
			
		||||
if (__res >= 0) \
 | 
			
		||||
	return (type) __res; \
 | 
			
		||||
errno = -__res; \
 | 
			
		||||
return -1; \
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#define _syscall2(type,name,type1,arg1,type2,arg2) \
 | 
			
		||||
type name(type1 arg1,type2 arg2) \
 | 
			
		||||
{ \
 | 
			
		||||
long __res; \
 | 
			
		||||
__asm__ volatile ("int $0x80" \
 | 
			
		||||
	: "=a" (__res) \
 | 
			
		||||
	: "0" (__NR_##name),"b" ((long)(arg1)),"c" ((long)(arg2))); \
 | 
			
		||||
if (__res >= 0) \
 | 
			
		||||
	return (type) __res; \
 | 
			
		||||
errno = -__res; \
 | 
			
		||||
return -1; \
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \
 | 
			
		||||
type name(type1 arg1,type2 arg2,type3 arg3) \
 | 
			
		||||
{ \
 | 
			
		||||
long __res; \
 | 
			
		||||
__asm__ volatile ("int $0x80" \
 | 
			
		||||
	: "=a" (__res) \
 | 
			
		||||
	: "0" (__NR_##name),"b" ((long)(arg1)),"c" ((long)(arg2)), \
 | 
			
		||||
		  "d" ((long)(arg3))); \
 | 
			
		||||
if (__res>=0) \
 | 
			
		||||
	return (type) __res; \
 | 
			
		||||
errno=-__res; \
 | 
			
		||||
return -1; \
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4) \
 | 
			
		||||
type name (type1 arg1, type2 arg2, type3 arg3, type4 arg4) \
 | 
			
		||||
{ \
 | 
			
		||||
long __res; \
 | 
			
		||||
__asm__ volatile ("int $0x80" \
 | 
			
		||||
	: "=a" (__res) \
 | 
			
		||||
	: "0" (__NR_##name),"b" ((long)(arg1)),"c" ((long)(arg2)), \
 | 
			
		||||
	  "d" ((long)(arg3)),"S" ((long)(arg4))); \
 | 
			
		||||
if (__res>=0) \
 | 
			
		||||
	return (type) __res; \
 | 
			
		||||
errno=-__res; \
 | 
			
		||||
return -1; \
 | 
			
		||||
} 
 | 
			
		||||
 | 
			
		||||
#define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4, \
 | 
			
		||||
	  type5,arg5) \
 | 
			
		||||
type name (type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5) \
 | 
			
		||||
{ \
 | 
			
		||||
long __res; \
 | 
			
		||||
__asm__ volatile ("int $0x80" \
 | 
			
		||||
	: "=a" (__res) \
 | 
			
		||||
	: "0" (__NR_##name),"b" ((long)(arg1)),"c" ((long)(arg2)), \
 | 
			
		||||
	  "d" ((long)(arg3)),"S" ((long)(arg4)),"D" ((long)(arg5))); \
 | 
			
		||||
if (__res>=0) \
 | 
			
		||||
	return (type) __res; \
 | 
			
		||||
errno=-__res; \
 | 
			
		||||
return -1; \
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#ifdef __KERNEL_SYSCALLS__
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * we need this inline - forking from kernel space will result
 | 
			
		||||
 * in NO COPY ON WRITE (!!!), until an execve is executed. This
 | 
			
		||||
 * is no problem, but for the stack. This is handled by not letting
 | 
			
		||||
 * main() use the stack at all after fork(). Thus, no function
 | 
			
		||||
 * calls - which means inline code for fork too, as otherwise we
 | 
			
		||||
 * would use the stack upon exit from 'fork()'.
 | 
			
		||||
 *
 | 
			
		||||
 * Actually only pause and fork are needed inline, so that there
 | 
			
		||||
 * won't be any messing with the stack from main(), but we define
 | 
			
		||||
 * some others too.
 | 
			
		||||
 */
 | 
			
		||||
#define __NR__exit __NR_exit
 | 
			
		||||
static inline _syscall0(int,idle)
 | 
			
		||||
static inline _syscall0(int,fork)
 | 
			
		||||
static inline _syscall2(int,clone,unsigned long,flags,char *,esp)
 | 
			
		||||
static inline _syscall0(int,pause)
 | 
			
		||||
static inline _syscall0(int,setup)
 | 
			
		||||
static inline _syscall0(int,sync)
 | 
			
		||||
static inline _syscall0(pid_t,setsid)
 | 
			
		||||
static inline _syscall3(int,write,int,fd,const char *,buf,off_t,count)
 | 
			
		||||
static inline _syscall1(int,dup,int,fd)
 | 
			
		||||
static inline _syscall3(int,execve,const char *,file,char **,argv,char **,envp)
 | 
			
		||||
static inline _syscall3(int,open,const char *,file,int,flag,int,mode)
 | 
			
		||||
static inline _syscall1(int,close,int,fd)
 | 
			
		||||
static inline _syscall1(int,_exit,int,exitcode)
 | 
			
		||||
static inline _syscall3(pid_t,waitpid,pid_t,pid,int *,wait_stat,int,options)
 | 
			
		||||
 | 
			
		||||
static inline pid_t wait(int * wait_stat)
 | 
			
		||||
{
 | 
			
		||||
	return waitpid(-1,wait_stat,0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * This is the mechanism for creating a new kernel thread.
 | 
			
		||||
 *
 | 
			
		||||
 * NOTE! Only a kernel-only process(ie the swapper or direct descendants
 | 
			
		||||
 * who haven't done an "execve()") should use this: it will work within
 | 
			
		||||
 * a system call from a "real" process, but the process memory space will
 | 
			
		||||
 * not be free'd until both the parent and the child have exited.
 | 
			
		||||
 */
 | 
			
		||||
static inline pid_t kernel_thread(int (*fn)(void *), void * arg, unsigned long flags)
 | 
			
		||||
{
 | 
			
		||||
	long retval;
 | 
			
		||||
 | 
			
		||||
	__asm__ __volatile__(
 | 
			
		||||
		"movl %%esp,%%esi\n\t"
 | 
			
		||||
		"int $0x80\n\t"		/* Linux/i386 system call */
 | 
			
		||||
		"cmpl %%esp,%%esi\n\t"	/* child or parent? */
 | 
			
		||||
		"je 1f\n\t"		/* parent - jump */
 | 
			
		||||
		"pushl %3\n\t"		/* push argument */
 | 
			
		||||
		"call *%4\n\t"		/* call fn */
 | 
			
		||||
		"movl %2,%0\n\t"	/* exit */
 | 
			
		||||
		"int $0x80\n"
 | 
			
		||||
		"1:\t"
 | 
			
		||||
		:"=a" (retval)
 | 
			
		||||
		:"0" (__NR_clone), "i" (__NR_exit),
 | 
			
		||||
		 "r" (arg), "r" (fn),
 | 
			
		||||
		 "b" (flags | CLONE_VM)
 | 
			
		||||
		:"si");
 | 
			
		||||
	return retval;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* _ASM_I386_UNISTD_H_ */
 | 
			
		||||
							
								
								
									
										1
									
								
								kernel/table20/version.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								kernel/table20/version.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
#define _TABLE_VERSION	1
 | 
			
		||||
							
								
								
									
										4
									
								
								kernel/table21/.cvsignore
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								kernel/table21/.cvsignore
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,4 @@
 | 
			
		||||
kernel.patch
 | 
			
		||||
.main.o.flags
 | 
			
		||||
.table.o.flags
 | 
			
		||||
.module.o.flags
 | 
			
		||||
							
								
								
									
										16
									
								
								kernel/table21/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								kernel/table21/Makefile
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,16 @@
 | 
			
		||||
#
 | 
			
		||||
# Makefile for the linux system information tables.
 | 
			
		||||
#
 | 
			
		||||
# Note! Dependencies are done automagically by 'make dep', which also
 | 
			
		||||
# removes any old dependencies. DON'T put your own dependencies here
 | 
			
		||||
# unless it's something special (ie not a .c file).
 | 
			
		||||
#
 | 
			
		||||
# Note 2! The CFLAGS definition is now in the main makefile...
 | 
			
		||||
 | 
			
		||||
O_TARGET := table.o
 | 
			
		||||
OX_OBJS  := main.o
 | 
			
		||||
 | 
			
		||||
M_TARGET := table_mod.o
 | 
			
		||||
MX_OBJS  := module.o
 | 
			
		||||
 | 
			
		||||
include $(TOPDIR)/Rules.make
 | 
			
		||||
							
								
								
									
										21
									
								
								kernel/table21/README
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								kernel/table21/README
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,21 @@
 | 
			
		||||
This is a new system call `table ()' for the Linux table. It is faster
 | 
			
		||||
than reading from /proc and can be used to fetch all information required
 | 
			
		||||
for libgtop until whe have some other function (extended sysctl, ...) in
 | 
			
		||||
standard kernels.
 | 
			
		||||
 | 
			
		||||
I didn't want to change sysctl or some other function myself cause this may
 | 
			
		||||
cause other applications relying upon those function to fail. This is
 | 
			
		||||
something for the ``real'' kernel gurus ...
 | 
			
		||||
 | 
			
		||||
To use this new system call for libgtop, do the following:
 | 
			
		||||
 | 
			
		||||
* Copy this directory to /usr/src/linux/table
 | 
			
		||||
* Make /usr/src/linux/include/linux/table.h symlink to /usr/src/linux/table/table.h
 | 
			
		||||
* Apply the patch `kernel.patch' to the kernel, compile, install and reboot
 | 
			
		||||
* Recompile libgtop (remove `config.cache' and run the `autogen.sh' again).
 | 
			
		||||
 | 
			
		||||
If you want to change and/or add something - feel free to do so !
 | 
			
		||||
 | 
			
		||||
Have fun,
 | 
			
		||||
 | 
			
		||||
Martin
 | 
			
		||||
							
								
								
									
										571
									
								
								kernel/table21/entry-i386.S
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										571
									
								
								kernel/table21/entry-i386.S
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,571 @@
 | 
			
		||||
/*
 | 
			
		||||
 *  linux/arch/i386/entry.S
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (C) 1991, 1992  Linus Torvalds
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * entry.S contains the system-call and fault low-level handling routines.
 | 
			
		||||
 * This also contains the timer-interrupt handler, as well as all interrupts
 | 
			
		||||
 * and faults that can result in a task-switch.
 | 
			
		||||
 *
 | 
			
		||||
 * NOTE: This code handles signal-recognition, which happens every time
 | 
			
		||||
 * after a timer-interrupt and after each system call.
 | 
			
		||||
 *
 | 
			
		||||
 * I changed all the .align's to 4 (16 byte alignment), as that's faster
 | 
			
		||||
 * on a 486.
 | 
			
		||||
 *
 | 
			
		||||
 * Stack layout in 'ret_from_system_call':
 | 
			
		||||
 * 	ptrace needs to have all regs on the stack.
 | 
			
		||||
 *	if the order here is changed, it needs to be
 | 
			
		||||
 *	updated in fork.c:copy_process, signal.c:do_signal,
 | 
			
		||||
 *	ptrace.c and ptrace.h
 | 
			
		||||
 *
 | 
			
		||||
 *	 0(%esp) - %ebx
 | 
			
		||||
 *	 4(%esp) - %ecx
 | 
			
		||||
 *	 8(%esp) - %edx
 | 
			
		||||
 *       C(%esp) - %esi
 | 
			
		||||
 *	10(%esp) - %edi
 | 
			
		||||
 *	14(%esp) - %ebp
 | 
			
		||||
 *	18(%esp) - %eax
 | 
			
		||||
 *	1C(%esp) - %ds
 | 
			
		||||
 *	20(%esp) - %es
 | 
			
		||||
 *	24(%esp) - orig_eax
 | 
			
		||||
 *	28(%esp) - %eip
 | 
			
		||||
 *	2C(%esp) - %cs
 | 
			
		||||
 *	30(%esp) - %eflags
 | 
			
		||||
 *	34(%esp) - %oldesp
 | 
			
		||||
 *	38(%esp) - %oldss
 | 
			
		||||
 *
 | 
			
		||||
 * "current" is in register %ebx during any slow entries.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <linux/sys.h>
 | 
			
		||||
#include <linux/linkage.h>
 | 
			
		||||
#include <asm/segment.h>
 | 
			
		||||
#define ASSEMBLY
 | 
			
		||||
#include <asm/smp.h>
 | 
			
		||||
 | 
			
		||||
EBX		= 0x00
 | 
			
		||||
ECX		= 0x04
 | 
			
		||||
EDX		= 0x08
 | 
			
		||||
ESI		= 0x0C
 | 
			
		||||
EDI		= 0x10
 | 
			
		||||
EBP		= 0x14
 | 
			
		||||
EAX		= 0x18
 | 
			
		||||
DS		= 0x1C
 | 
			
		||||
ES		= 0x20
 | 
			
		||||
ORIG_EAX	= 0x24
 | 
			
		||||
EIP		= 0x28
 | 
			
		||||
CS		= 0x2C
 | 
			
		||||
EFLAGS		= 0x30
 | 
			
		||||
OLDESP		= 0x34
 | 
			
		||||
OLDSS		= 0x38
 | 
			
		||||
 | 
			
		||||
CF_MASK		= 0x00000001
 | 
			
		||||
IF_MASK		= 0x00000200
 | 
			
		||||
NT_MASK		= 0x00004000
 | 
			
		||||
VM_MASK		= 0x00020000
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * these are offsets into the task-struct.
 | 
			
		||||
 */
 | 
			
		||||
state		=  0
 | 
			
		||||
flags		=  4
 | 
			
		||||
sigpending	=  8
 | 
			
		||||
addr_limit	= 12
 | 
			
		||||
exec_domain	= 16
 | 
			
		||||
need_resched	= 20
 | 
			
		||||
 | 
			
		||||
ENOSYS = 38
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define SAVE_ALL \
 | 
			
		||||
	cld; \
 | 
			
		||||
	pushl %es; \
 | 
			
		||||
	pushl %ds; \
 | 
			
		||||
	pushl %eax; \
 | 
			
		||||
	pushl %ebp; \
 | 
			
		||||
	pushl %edi; \
 | 
			
		||||
	pushl %esi; \
 | 
			
		||||
	pushl %edx; \
 | 
			
		||||
	pushl %ecx; \
 | 
			
		||||
	pushl %ebx; \
 | 
			
		||||
	movl $(__KERNEL_DS),%edx; \
 | 
			
		||||
	movl %dx,%ds; \
 | 
			
		||||
	movl %dx,%es;
 | 
			
		||||
 | 
			
		||||
#define RESTORE_ALL	\
 | 
			
		||||
	popl %ebx;	\
 | 
			
		||||
	popl %ecx;	\
 | 
			
		||||
	popl %edx;	\
 | 
			
		||||
	popl %esi;	\
 | 
			
		||||
	popl %edi;	\
 | 
			
		||||
	popl %ebp;	\
 | 
			
		||||
	popl %eax;	\
 | 
			
		||||
1:	popl %ds;	\
 | 
			
		||||
2:	popl %es;	\
 | 
			
		||||
3:	addl $4,%esp;	\
 | 
			
		||||
	iret;		\
 | 
			
		||||
.section fixup,"ax";	\
 | 
			
		||||
4:	pushl $0;	\
 | 
			
		||||
	popl %ds;	\
 | 
			
		||||
	jmp 2b;		\
 | 
			
		||||
5:	pushl $0;	\
 | 
			
		||||
	popl %es;	\
 | 
			
		||||
	jmp 3b;		\
 | 
			
		||||
.previous;		\
 | 
			
		||||
.section __ex_table,"a";\
 | 
			
		||||
	.align 4;	\
 | 
			
		||||
	.long 1b,4b;	\
 | 
			
		||||
	.long 2b,5b;	\
 | 
			
		||||
.previous
 | 
			
		||||
 | 
			
		||||
#define GET_CURRENT(reg) \
 | 
			
		||||
	movl %esp, reg; \
 | 
			
		||||
	andl $-8192, reg;
 | 
			
		||||
 | 
			
		||||
ENTRY(lcall7)
 | 
			
		||||
	pushfl			# We get a different stack layout with call gates,
 | 
			
		||||
	pushl %eax		# which has to be cleaned up later..
 | 
			
		||||
	SAVE_ALL
 | 
			
		||||
	movl EIP(%esp),%eax	# due to call gates, this is eflags, not eip..
 | 
			
		||||
	movl CS(%esp),%edx	# this is eip..
 | 
			
		||||
	movl EFLAGS(%esp),%ecx	# and this is cs..
 | 
			
		||||
	movl %eax,EFLAGS(%esp)	#
 | 
			
		||||
	movl %edx,EIP(%esp)	# Now we move them to their "normal" places
 | 
			
		||||
	movl %ecx,CS(%esp)	#
 | 
			
		||||
	movl %esp,%ebx
 | 
			
		||||
	pushl %ebx
 | 
			
		||||
	andl $-8192,%ebx	# GET_CURRENT
 | 
			
		||||
	movl exec_domain(%ebx),%edx	# Get the execution domain
 | 
			
		||||
	movl 4(%edx),%edx	# Get the lcall7 handler for the domain
 | 
			
		||||
	call *%edx
 | 
			
		||||
	popl %eax
 | 
			
		||||
	jmp ret_from_sys_call
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef __SMP__
 | 
			
		||||
	ALIGN
 | 
			
		||||
	.globl	ret_from_smpfork
 | 
			
		||||
ret_from_smpfork:
 | 
			
		||||
	GET_CURRENT(%ebx)
 | 
			
		||||
	btrl	$0, SYMBOL_NAME(scheduler_lock)
 | 
			
		||||
	jmp	ret_from_sys_call
 | 
			
		||||
#endif /* __SMP__ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Return to user mode is not as complex as all this looks,
 | 
			
		||||
 * but we want the default path for a system call return to
 | 
			
		||||
 * go as quickly as possible which is why some of this is
 | 
			
		||||
 * less clear than it otherwise should be.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
ENTRY(system_call)
 | 
			
		||||
	pushl %eax			# save orig_eax
 | 
			
		||||
	SAVE_ALL
 | 
			
		||||
	GET_CURRENT(%ebx)
 | 
			
		||||
	cmpl $(NR_syscalls),%eax
 | 
			
		||||
	jae badsys
 | 
			
		||||
	testb $0x20,flags(%ebx)		# PF_TRACESYS
 | 
			
		||||
	jne tracesys
 | 
			
		||||
	call *SYMBOL_NAME(sys_call_table)(,%eax,4)
 | 
			
		||||
	movl %eax,EAX(%esp)		# save the return value
 | 
			
		||||
	ALIGN
 | 
			
		||||
	.globl ret_from_sys_call
 | 
			
		||||
	.globl ret_from_intr
 | 
			
		||||
ret_from_sys_call:
 | 
			
		||||
	movl SYMBOL_NAME(bh_mask),%eax
 | 
			
		||||
	andl SYMBOL_NAME(bh_active),%eax
 | 
			
		||||
	jne handle_bottom_half
 | 
			
		||||
ret_with_reschedule:
 | 
			
		||||
	cmpl $0,need_resched(%ebx)
 | 
			
		||||
	jne reschedule
 | 
			
		||||
	cmpl $0,sigpending(%ebx)
 | 
			
		||||
	jne signal_return
 | 
			
		||||
	RESTORE_ALL
 | 
			
		||||
	ALIGN
 | 
			
		||||
signal_return:
 | 
			
		||||
	testl $(VM_MASK),EFLAGS(%esp)
 | 
			
		||||
	pushl %esp
 | 
			
		||||
	jne v86_signal_return
 | 
			
		||||
	pushl $0
 | 
			
		||||
	call SYMBOL_NAME(do_signal)
 | 
			
		||||
	addl $8,%esp
 | 
			
		||||
	RESTORE_ALL
 | 
			
		||||
	ALIGN
 | 
			
		||||
v86_signal_return:
 | 
			
		||||
	call SYMBOL_NAME(save_v86_state)
 | 
			
		||||
	movl %eax,%esp
 | 
			
		||||
	pushl %eax
 | 
			
		||||
	pushl $0
 | 
			
		||||
	call SYMBOL_NAME(do_signal)
 | 
			
		||||
	addl $8,%esp
 | 
			
		||||
	RESTORE_ALL
 | 
			
		||||
	ALIGN
 | 
			
		||||
tracesys:
 | 
			
		||||
	movl $-ENOSYS,EAX(%esp)
 | 
			
		||||
	call SYMBOL_NAME(syscall_trace)
 | 
			
		||||
	movl ORIG_EAX(%esp),%eax
 | 
			
		||||
	call *SYMBOL_NAME(sys_call_table)(,%eax,4)
 | 
			
		||||
	movl %eax,EAX(%esp)		# save the return value
 | 
			
		||||
	call SYMBOL_NAME(syscall_trace)
 | 
			
		||||
	jmp ret_from_sys_call
 | 
			
		||||
badsys:
 | 
			
		||||
	movl $-ENOSYS,EAX(%esp)
 | 
			
		||||
	jmp ret_from_sys_call
 | 
			
		||||
 | 
			
		||||
	ALIGN
 | 
			
		||||
ret_from_exception:
 | 
			
		||||
	movl SYMBOL_NAME(bh_mask),%eax
 | 
			
		||||
	andl SYMBOL_NAME(bh_active),%eax
 | 
			
		||||
	jne handle_bottom_half
 | 
			
		||||
	ALIGN
 | 
			
		||||
ret_from_intr:
 | 
			
		||||
	GET_CURRENT(%ebx)
 | 
			
		||||
	movl EFLAGS(%esp),%eax		# mix EFLAGS and CS
 | 
			
		||||
	movb CS(%esp),%al
 | 
			
		||||
	testl $(VM_MASK | 3),%eax	# return to VM86 mode or non-supervisor?
 | 
			
		||||
	jne ret_with_reschedule
 | 
			
		||||
	RESTORE_ALL
 | 
			
		||||
 | 
			
		||||
	ALIGN
 | 
			
		||||
handle_bottom_half:
 | 
			
		||||
	pushl $ret_from_intr
 | 
			
		||||
	jmp SYMBOL_NAME(do_bottom_half)
 | 
			
		||||
 | 
			
		||||
	ALIGN
 | 
			
		||||
reschedule:
 | 
			
		||||
	pushl $ret_from_sys_call
 | 
			
		||||
	jmp SYMBOL_NAME(schedule)    # test
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
ENTRY(divide_error)
 | 
			
		||||
	pushl $0		# no error code
 | 
			
		||||
	pushl $ SYMBOL_NAME(do_divide_error)
 | 
			
		||||
	ALIGN
 | 
			
		||||
error_code:
 | 
			
		||||
	pushl %ds
 | 
			
		||||
	pushl %eax
 | 
			
		||||
	xorl %eax,%eax
 | 
			
		||||
	pushl %ebp
 | 
			
		||||
	pushl %edi
 | 
			
		||||
	pushl %esi
 | 
			
		||||
	pushl %edx
 | 
			
		||||
	decl %eax			# eax = -1
 | 
			
		||||
	pushl %ecx
 | 
			
		||||
	pushl %ebx
 | 
			
		||||
#if 1
 | 
			
		||||
	xorl %ecx,%ecx			# zero ecx
 | 
			
		||||
	cld
 | 
			
		||||
	mov %es,%cx			# get the lower order bits of es
 | 
			
		||||
#else
 | 
			
		||||
	cld
 | 
			
		||||
# Some older processors leave the top 16 bits of the 32 bit destination
 | 
			
		||||
# register undefined, rather than zeroed in the following instruction.
 | 
			
		||||
# This won't matter when restoring or loading a segment register from the
 | 
			
		||||
# stack.  It may be a problem if any code reads the full 32 bit value.
 | 
			
		||||
# dosemu? kernel?  Would somebody like to verify that this way is really OK?
 | 
			
		||||
	movl %es,%cx
 | 
			
		||||
#endif
 | 
			
		||||
	xchgl %eax, ORIG_EAX(%esp)	# orig_eax (get the error code. )
 | 
			
		||||
	movl %esp,%edx
 | 
			
		||||
	xchgl %ecx, ES(%esp)		# get the address and save es.
 | 
			
		||||
	pushl %eax			# push the error code
 | 
			
		||||
	pushl %edx
 | 
			
		||||
	movl $(__KERNEL_DS),%edx
 | 
			
		||||
	movl %dx,%ds
 | 
			
		||||
	movl %dx,%es
 | 
			
		||||
	GET_CURRENT(%ebx)
 | 
			
		||||
	call *%ecx
 | 
			
		||||
	addl $8,%esp
 | 
			
		||||
	jmp ret_from_exception
 | 
			
		||||
 | 
			
		||||
ENTRY(coprocessor_error)
 | 
			
		||||
	pushl $0
 | 
			
		||||
	pushl $ SYMBOL_NAME(do_coprocessor_error)
 | 
			
		||||
	jmp error_code
 | 
			
		||||
 | 
			
		||||
ENTRY(device_not_available)
 | 
			
		||||
	pushl $-1		# mark this as an int
 | 
			
		||||
	SAVE_ALL
 | 
			
		||||
	GET_CURRENT(%ebx)
 | 
			
		||||
	pushl $ret_from_exception
 | 
			
		||||
	movl %cr0,%eax
 | 
			
		||||
	testl $0x4,%eax			# EM (math emulation bit)
 | 
			
		||||
	je SYMBOL_NAME(math_state_restore)
 | 
			
		||||
	pushl $0		# temporary storage for ORIG_EIP
 | 
			
		||||
	call  SYMBOL_NAME(math_emulate)
 | 
			
		||||
	addl $4,%esp
 | 
			
		||||
	ret
 | 
			
		||||
 | 
			
		||||
ENTRY(debug)
 | 
			
		||||
	pushl $0
 | 
			
		||||
	pushl $ SYMBOL_NAME(do_debug)
 | 
			
		||||
	jmp error_code
 | 
			
		||||
 | 
			
		||||
ENTRY(nmi)
 | 
			
		||||
	pushl $0
 | 
			
		||||
	pushl $ SYMBOL_NAME(do_nmi)
 | 
			
		||||
	jmp error_code
 | 
			
		||||
 | 
			
		||||
ENTRY(int3)
 | 
			
		||||
	pushl $0
 | 
			
		||||
	pushl $ SYMBOL_NAME(do_int3)
 | 
			
		||||
	jmp error_code
 | 
			
		||||
 | 
			
		||||
ENTRY(overflow)
 | 
			
		||||
	pushl $0
 | 
			
		||||
	pushl $ SYMBOL_NAME(do_overflow)
 | 
			
		||||
	jmp error_code
 | 
			
		||||
 | 
			
		||||
ENTRY(bounds)
 | 
			
		||||
	pushl $0
 | 
			
		||||
	pushl $ SYMBOL_NAME(do_bounds)
 | 
			
		||||
	jmp error_code
 | 
			
		||||
 | 
			
		||||
ENTRY(invalid_op)
 | 
			
		||||
	pushl $0
 | 
			
		||||
	pushl $ SYMBOL_NAME(do_invalid_op)
 | 
			
		||||
	jmp error_code
 | 
			
		||||
 | 
			
		||||
ENTRY(coprocessor_segment_overrun)
 | 
			
		||||
	pushl $0
 | 
			
		||||
	pushl $ SYMBOL_NAME(do_coprocessor_segment_overrun)
 | 
			
		||||
	jmp error_code
 | 
			
		||||
 | 
			
		||||
ENTRY(reserved)
 | 
			
		||||
	pushl $0
 | 
			
		||||
	pushl $ SYMBOL_NAME(do_reserved)
 | 
			
		||||
	jmp error_code
 | 
			
		||||
 | 
			
		||||
ENTRY(double_fault)
 | 
			
		||||
	pushl $ SYMBOL_NAME(do_double_fault)
 | 
			
		||||
	jmp error_code
 | 
			
		||||
 | 
			
		||||
ENTRY(invalid_TSS)
 | 
			
		||||
	pushl $ SYMBOL_NAME(do_invalid_TSS)
 | 
			
		||||
	jmp error_code
 | 
			
		||||
 | 
			
		||||
ENTRY(segment_not_present)
 | 
			
		||||
	pushl $ SYMBOL_NAME(do_segment_not_present)
 | 
			
		||||
	jmp error_code
 | 
			
		||||
 | 
			
		||||
ENTRY(stack_segment)
 | 
			
		||||
	pushl $ SYMBOL_NAME(do_stack_segment)
 | 
			
		||||
	jmp error_code
 | 
			
		||||
 | 
			
		||||
ENTRY(general_protection)
 | 
			
		||||
	pushl $ SYMBOL_NAME(do_general_protection)
 | 
			
		||||
	jmp error_code
 | 
			
		||||
 | 
			
		||||
ENTRY(alignment_check)
 | 
			
		||||
	pushl $ SYMBOL_NAME(do_alignment_check)
 | 
			
		||||
	jmp error_code
 | 
			
		||||
 | 
			
		||||
ENTRY(page_fault)
 | 
			
		||||
	pushl $ SYMBOL_NAME(do_page_fault)
 | 
			
		||||
	jmp error_code
 | 
			
		||||
 | 
			
		||||
ENTRY(spurious_interrupt_bug)
 | 
			
		||||
	pushl $0
 | 
			
		||||
	pushl $ SYMBOL_NAME(do_spurious_interrupt_bug)
 | 
			
		||||
	jmp error_code
 | 
			
		||||
 | 
			
		||||
.data
 | 
			
		||||
ENTRY(sys_call_table)
 | 
			
		||||
	.long SYMBOL_NAME(sys_setup)		/* 0 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_exit)
 | 
			
		||||
	.long SYMBOL_NAME(sys_fork)
 | 
			
		||||
	.long SYMBOL_NAME(sys_read)
 | 
			
		||||
	.long SYMBOL_NAME(sys_write)
 | 
			
		||||
	.long SYMBOL_NAME(sys_open)		/* 5 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_close)
 | 
			
		||||
	.long SYMBOL_NAME(sys_waitpid)
 | 
			
		||||
	.long SYMBOL_NAME(sys_creat)
 | 
			
		||||
	.long SYMBOL_NAME(sys_link)
 | 
			
		||||
	.long SYMBOL_NAME(sys_unlink)		/* 10 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_execve)
 | 
			
		||||
	.long SYMBOL_NAME(sys_chdir)
 | 
			
		||||
	.long SYMBOL_NAME(sys_time)
 | 
			
		||||
	.long SYMBOL_NAME(sys_mknod)
 | 
			
		||||
	.long SYMBOL_NAME(sys_chmod)		/* 15 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_lchown)
 | 
			
		||||
	.long SYMBOL_NAME(sys_ni_syscall)				/* old break syscall holder */
 | 
			
		||||
	.long SYMBOL_NAME(sys_stat)
 | 
			
		||||
	.long SYMBOL_NAME(sys_lseek)
 | 
			
		||||
	.long SYMBOL_NAME(sys_getpid)		/* 20 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_mount)
 | 
			
		||||
	.long SYMBOL_NAME(sys_umount)
 | 
			
		||||
	.long SYMBOL_NAME(sys_setuid)
 | 
			
		||||
	.long SYMBOL_NAME(sys_getuid)
 | 
			
		||||
	.long SYMBOL_NAME(sys_stime)		/* 25 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_ptrace)
 | 
			
		||||
	.long SYMBOL_NAME(sys_alarm)
 | 
			
		||||
	.long SYMBOL_NAME(sys_fstat)
 | 
			
		||||
	.long SYMBOL_NAME(sys_pause)
 | 
			
		||||
	.long SYMBOL_NAME(sys_utime)		/* 30 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_ni_syscall)				/* old stty syscall holder */
 | 
			
		||||
	.long SYMBOL_NAME(sys_ni_syscall)				/* old gtty syscall holder */
 | 
			
		||||
	.long SYMBOL_NAME(sys_access)
 | 
			
		||||
	.long SYMBOL_NAME(sys_nice)
 | 
			
		||||
	.long SYMBOL_NAME(sys_ni_syscall)	/* 35 */		/* old ftime syscall holder */
 | 
			
		||||
	.long SYMBOL_NAME(sys_sync)
 | 
			
		||||
	.long SYMBOL_NAME(sys_kill)
 | 
			
		||||
	.long SYMBOL_NAME(sys_rename)
 | 
			
		||||
	.long SYMBOL_NAME(sys_mkdir)
 | 
			
		||||
	.long SYMBOL_NAME(sys_rmdir)		/* 40 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_dup)
 | 
			
		||||
	.long SYMBOL_NAME(sys_pipe)
 | 
			
		||||
	.long SYMBOL_NAME(sys_times)
 | 
			
		||||
	.long SYMBOL_NAME(sys_ni_syscall)				/* old prof syscall holder */
 | 
			
		||||
	.long SYMBOL_NAME(sys_brk)		/* 45 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_setgid)
 | 
			
		||||
	.long SYMBOL_NAME(sys_getgid)
 | 
			
		||||
	.long SYMBOL_NAME(sys_signal)
 | 
			
		||||
	.long SYMBOL_NAME(sys_geteuid)
 | 
			
		||||
	.long SYMBOL_NAME(sys_getegid)		/* 50 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_acct)
 | 
			
		||||
	.long SYMBOL_NAME(sys_ni_syscall)				/* old phys syscall holder */
 | 
			
		||||
	.long SYMBOL_NAME(sys_ni_syscall)				/* old lock syscall holder */
 | 
			
		||||
	.long SYMBOL_NAME(sys_ioctl)
 | 
			
		||||
	.long SYMBOL_NAME(sys_fcntl)		/* 55 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_ni_syscall)				/* old mpx syscall holder */
 | 
			
		||||
	.long SYMBOL_NAME(sys_setpgid)
 | 
			
		||||
	.long SYMBOL_NAME(sys_ni_syscall)				/* old ulimit syscall holder */
 | 
			
		||||
	.long SYMBOL_NAME(sys_olduname)
 | 
			
		||||
	.long SYMBOL_NAME(sys_umask)		/* 60 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_chroot)
 | 
			
		||||
	.long SYMBOL_NAME(sys_ustat)
 | 
			
		||||
	.long SYMBOL_NAME(sys_dup2)
 | 
			
		||||
	.long SYMBOL_NAME(sys_getppid)
 | 
			
		||||
	.long SYMBOL_NAME(sys_getpgrp)		/* 65 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_setsid)
 | 
			
		||||
	.long SYMBOL_NAME(sys_sigaction)
 | 
			
		||||
	.long SYMBOL_NAME(sys_sgetmask)
 | 
			
		||||
	.long SYMBOL_NAME(sys_ssetmask)
 | 
			
		||||
	.long SYMBOL_NAME(sys_setreuid)		/* 70 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_setregid)
 | 
			
		||||
	.long SYMBOL_NAME(sys_sigsuspend)
 | 
			
		||||
	.long SYMBOL_NAME(sys_sigpending)
 | 
			
		||||
	.long SYMBOL_NAME(sys_sethostname)
 | 
			
		||||
	.long SYMBOL_NAME(sys_setrlimit)	/* 75 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_getrlimit)
 | 
			
		||||
	.long SYMBOL_NAME(sys_getrusage)
 | 
			
		||||
	.long SYMBOL_NAME(sys_gettimeofday)
 | 
			
		||||
	.long SYMBOL_NAME(sys_settimeofday)
 | 
			
		||||
	.long SYMBOL_NAME(sys_getgroups)	/* 80 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_setgroups)
 | 
			
		||||
	.long SYMBOL_NAME(old_select)
 | 
			
		||||
	.long SYMBOL_NAME(sys_symlink)
 | 
			
		||||
	.long SYMBOL_NAME(sys_lstat)
 | 
			
		||||
	.long SYMBOL_NAME(sys_readlink)		/* 85 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_uselib)
 | 
			
		||||
	.long SYMBOL_NAME(sys_swapon)
 | 
			
		||||
	.long SYMBOL_NAME(sys_reboot)
 | 
			
		||||
	.long SYMBOL_NAME(old_readdir)
 | 
			
		||||
	.long SYMBOL_NAME(old_mmap)		/* 90 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_munmap)
 | 
			
		||||
	.long SYMBOL_NAME(sys_truncate)
 | 
			
		||||
	.long SYMBOL_NAME(sys_ftruncate)
 | 
			
		||||
	.long SYMBOL_NAME(sys_fchmod)
 | 
			
		||||
	.long SYMBOL_NAME(sys_fchown)		/* 95 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_getpriority)
 | 
			
		||||
	.long SYMBOL_NAME(sys_setpriority)
 | 
			
		||||
	.long SYMBOL_NAME(sys_ni_syscall)				/* old profil syscall holder */
 | 
			
		||||
	.long SYMBOL_NAME(sys_statfs)
 | 
			
		||||
	.long SYMBOL_NAME(sys_fstatfs)		/* 100 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_ioperm)
 | 
			
		||||
	.long SYMBOL_NAME(sys_socketcall)
 | 
			
		||||
	.long SYMBOL_NAME(sys_syslog)
 | 
			
		||||
	.long SYMBOL_NAME(sys_setitimer)
 | 
			
		||||
	.long SYMBOL_NAME(sys_getitimer)	/* 105 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_newstat)
 | 
			
		||||
	.long SYMBOL_NAME(sys_newlstat)
 | 
			
		||||
	.long SYMBOL_NAME(sys_newfstat)
 | 
			
		||||
	.long SYMBOL_NAME(sys_uname)
 | 
			
		||||
	.long SYMBOL_NAME(sys_iopl)		/* 110 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_vhangup)
 | 
			
		||||
	.long SYMBOL_NAME(sys_idle)
 | 
			
		||||
	.long SYMBOL_NAME(sys_vm86old)
 | 
			
		||||
	.long SYMBOL_NAME(sys_wait4)
 | 
			
		||||
	.long SYMBOL_NAME(sys_swapoff)		/* 115 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_sysinfo)
 | 
			
		||||
	.long SYMBOL_NAME(sys_ipc)
 | 
			
		||||
	.long SYMBOL_NAME(sys_fsync)
 | 
			
		||||
	.long SYMBOL_NAME(sys_sigreturn)
 | 
			
		||||
	.long SYMBOL_NAME(sys_clone)		/* 120 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_setdomainname)
 | 
			
		||||
	.long SYMBOL_NAME(sys_newuname)
 | 
			
		||||
	.long SYMBOL_NAME(sys_modify_ldt)
 | 
			
		||||
	.long SYMBOL_NAME(sys_adjtimex)
 | 
			
		||||
	.long SYMBOL_NAME(sys_mprotect)		/* 125 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_sigprocmask)
 | 
			
		||||
	.long SYMBOL_NAME(sys_create_module)
 | 
			
		||||
	.long SYMBOL_NAME(sys_init_module)
 | 
			
		||||
	.long SYMBOL_NAME(sys_delete_module)
 | 
			
		||||
	.long SYMBOL_NAME(sys_get_kernel_syms)	/* 130 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_quotactl)
 | 
			
		||||
	.long SYMBOL_NAME(sys_getpgid)
 | 
			
		||||
	.long SYMBOL_NAME(sys_fchdir)
 | 
			
		||||
	.long SYMBOL_NAME(sys_bdflush)
 | 
			
		||||
	.long SYMBOL_NAME(sys_sysfs)		/* 135 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_personality)
 | 
			
		||||
	.long SYMBOL_NAME(sys_ni_syscall)	/* for afs_syscall */
 | 
			
		||||
	.long SYMBOL_NAME(sys_setfsuid)
 | 
			
		||||
	.long SYMBOL_NAME(sys_setfsgid)
 | 
			
		||||
	.long SYMBOL_NAME(sys_llseek)		/* 140 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_getdents)
 | 
			
		||||
	.long SYMBOL_NAME(sys_select)
 | 
			
		||||
	.long SYMBOL_NAME(sys_flock)
 | 
			
		||||
	.long SYMBOL_NAME(sys_msync)
 | 
			
		||||
	.long SYMBOL_NAME(sys_readv)		/* 145 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_writev)
 | 
			
		||||
	.long SYMBOL_NAME(sys_getsid)
 | 
			
		||||
	.long SYMBOL_NAME(sys_fdatasync)
 | 
			
		||||
	.long SYMBOL_NAME(sys_sysctl)
 | 
			
		||||
	.long SYMBOL_NAME(sys_mlock)		/* 150 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_munlock)
 | 
			
		||||
	.long SYMBOL_NAME(sys_mlockall)
 | 
			
		||||
	.long SYMBOL_NAME(sys_munlockall)
 | 
			
		||||
	.long SYMBOL_NAME(sys_sched_setparam)
 | 
			
		||||
	.long SYMBOL_NAME(sys_sched_getparam)   /* 155 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_sched_setscheduler)
 | 
			
		||||
	.long SYMBOL_NAME(sys_sched_getscheduler)
 | 
			
		||||
	.long SYMBOL_NAME(sys_sched_yield)
 | 
			
		||||
	.long SYMBOL_NAME(sys_sched_get_priority_max)
 | 
			
		||||
	.long SYMBOL_NAME(sys_sched_get_priority_min)  /* 160 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_sched_rr_get_interval)
 | 
			
		||||
	.long SYMBOL_NAME(sys_nanosleep)
 | 
			
		||||
	.long SYMBOL_NAME(sys_mremap)
 | 
			
		||||
	.long SYMBOL_NAME(sys_setresuid)
 | 
			
		||||
	.long SYMBOL_NAME(sys_getresuid)	/* 165 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_vm86)
 | 
			
		||||
	.long SYMBOL_NAME(sys_query_module)
 | 
			
		||||
	.long SYMBOL_NAME(sys_poll)
 | 
			
		||||
	.long SYMBOL_NAME(sys_nfsservctl)
 | 
			
		||||
	.long SYMBOL_NAME(sys_setresgid)	/* 170 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_getresgid)
 | 
			
		||||
	.long SYMBOL_NAME(sys_prctl)
 | 
			
		||||
	.long SYMBOL_NAME(sys_rt_sigreturn)
 | 
			
		||||
	.long SYMBOL_NAME(sys_rt_sigaction)
 | 
			
		||||
	.long SYMBOL_NAME(sys_rt_sigprocmask)	/* 175 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_rt_sigpending)
 | 
			
		||||
	.long SYMBOL_NAME(sys_rt_sigtimedwait)
 | 
			
		||||
	.long SYMBOL_NAME(sys_rt_sigqueueinfo)
 | 
			
		||||
	.long SYMBOL_NAME(sys_rt_sigsuspend)
 | 
			
		||||
	.long SYMBOL_NAME(sys_pread)		/* 180 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_pwrite)
 | 
			
		||||
	.long SYMBOL_NAME(sys_chown)
 | 
			
		||||
	.long SYMBOL_NAME(sys_getcwd)
 | 
			
		||||
	.long SYMBOL_NAME(sys_capget)
 | 
			
		||||
	.long SYMBOL_NAME(sys_capset)           /* 185 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_sigaltstack)
 | 
			
		||||
	.long SYMBOL_NAME(sys_sendfile)
 | 
			
		||||
	.long SYMBOL_NAME(sys_ni_syscall)		/* streams1 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_ni_syscall)		/* streams2 */
 | 
			
		||||
	.long SYMBOL_NAME(sys_table)		/* 190 */
 | 
			
		||||
	
 | 
			
		||||
	.rept NR_syscalls-190
 | 
			
		||||
		.long SYMBOL_NAME(sys_ni_syscall)
 | 
			
		||||
	.endr
 | 
			
		||||
							
								
								
									
										61
									
								
								kernel/table21/main.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								kernel/table21/main.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,61 @@
 | 
			
		||||
/*
 | 
			
		||||
 * linux/table/table_impl.c
 | 
			
		||||
 * Copyright (C) 1998 Martin Baulig
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <linux/types.h>
 | 
			
		||||
#include <linux/errno.h>
 | 
			
		||||
#include <linux/sched.h>
 | 
			
		||||
#include <linux/kernel.h>
 | 
			
		||||
#include <linux/kernel_stat.h>
 | 
			
		||||
#include <linux/tty.h>
 | 
			
		||||
#include <linux/user.h>
 | 
			
		||||
#include <linux/a.out.h>
 | 
			
		||||
#include <linux/string.h>
 | 
			
		||||
#include <linux/mman.h>
 | 
			
		||||
#include <linux/proc_fs.h>
 | 
			
		||||
#include <linux/ioport.h>
 | 
			
		||||
#include <linux/config.h>
 | 
			
		||||
#include <linux/mm.h>
 | 
			
		||||
#include <linux/pagemap.h>
 | 
			
		||||
#include <linux/swap.h>
 | 
			
		||||
#include <linux/slab.h>
 | 
			
		||||
#include <linux/smp.h>
 | 
			
		||||
#include <linux/signal.h>
 | 
			
		||||
 | 
			
		||||
#include <asm/uaccess.h>
 | 
			
		||||
#include <asm/pgtable.h>
 | 
			
		||||
#include <asm/io.h>
 | 
			
		||||
 | 
			
		||||
#include <linux/module.h>
 | 
			
		||||
#include <linux/table.h>
 | 
			
		||||
 | 
			
		||||
#include "version.h"
 | 
			
		||||
 | 
			
		||||
extern void scheduling_functions_start_here(void);
 | 
			
		||||
extern void scheduling_functions_end_here(void);
 | 
			
		||||
 | 
			
		||||
int (*table_function_ptr) (int, union table *, const void *) = 0;
 | 
			
		||||
 | 
			
		||||
EXPORT_SYMBOL(table_function_ptr);
 | 
			
		||||
 | 
			
		||||
EXPORT_SYMBOL(nr_running);
 | 
			
		||||
EXPORT_SYMBOL(pidhash);
 | 
			
		||||
EXPORT_SYMBOL(task);
 | 
			
		||||
EXPORT_SYMBOL(si_swapinfo);
 | 
			
		||||
EXPORT_SYMBOL(scheduling_functions_start_here);
 | 
			
		||||
EXPORT_SYMBOL(scheduling_functions_end_here);
 | 
			
		||||
EXPORT_SYMBOL(avenrun);
 | 
			
		||||
EXPORT_SYMBOL(nr_tasks);
 | 
			
		||||
EXPORT_SYMBOL(last_pid);
 | 
			
		||||
EXPORT_SYMBOL(page_cache_size);
 | 
			
		||||
EXPORT_SYMBOL(init_mm);
 | 
			
		||||
 | 
			
		||||
asmlinkage int
 | 
			
		||||
sys_table (int type, union table *buf, const void *param)
 | 
			
		||||
{
 | 
			
		||||
	if (table_function_ptr == 0)
 | 
			
		||||
		return -ENOSYS;
 | 
			
		||||
 | 
			
		||||
	return (*table_function_ptr) (type, buf, param);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										607
									
								
								kernel/table21/module.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										607
									
								
								kernel/table21/module.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,607 @@
 | 
			
		||||
/*
 | 
			
		||||
 * linux/table/table_impl.c
 | 
			
		||||
 * Copyright (C) 1998 Martin Baulig
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <linux/types.h>
 | 
			
		||||
#include <linux/errno.h>
 | 
			
		||||
#include <linux/sched.h>
 | 
			
		||||
#include <linux/kernel.h>
 | 
			
		||||
#include <linux/kernel_stat.h>
 | 
			
		||||
#include <linux/tty.h>
 | 
			
		||||
#include <linux/user.h>
 | 
			
		||||
#include <linux/a.out.h>
 | 
			
		||||
#include <linux/string.h>
 | 
			
		||||
#include <linux/mman.h>
 | 
			
		||||
#include <linux/proc_fs.h>
 | 
			
		||||
#include <linux/ioport.h>
 | 
			
		||||
#include <linux/config.h>
 | 
			
		||||
#include <linux/mm.h>
 | 
			
		||||
#include <linux/pagemap.h>
 | 
			
		||||
#include <linux/swap.h>
 | 
			
		||||
#include <linux/slab.h>
 | 
			
		||||
#include <linux/smp.h>
 | 
			
		||||
#include <linux/signal.h>
 | 
			
		||||
 | 
			
		||||
#include <asm/uaccess.h>
 | 
			
		||||
#include <asm/pgtable.h>
 | 
			
		||||
#include <asm/io.h>
 | 
			
		||||
 | 
			
		||||
#include <linux/module.h>
 | 
			
		||||
#include <linux/table.h>
 | 
			
		||||
 | 
			
		||||
#include "version.h"
 | 
			
		||||
 | 
			
		||||
extern int (*table_function_ptr) (int, union table *, const void *);
 | 
			
		||||
 | 
			
		||||
int table_fkt (int, union table *, const void *);
 | 
			
		||||
 | 
			
		||||
EXPORT_NO_SYMBOLS;
 | 
			
		||||
 | 
			
		||||
int
 | 
			
		||||
init_module(void)
 | 
			
		||||
{
 | 
			
		||||
	printk ("init_module () = %p - %d, %d\n",
 | 
			
		||||
		table_fkt, sizeof (union table), sizeof (sigset_t));
 | 
			
		||||
	table_function_ptr = table_fkt;
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
cleanup_module(void)
 | 
			
		||||
{
 | 
			
		||||
	table_function_ptr = 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#define LOAD_INT(x) ((x) >> FSHIFT)
 | 
			
		||||
#define LOAD_FRAC(x) LOAD_INT(((x) & (FIXED_1-1)) * 100)
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_DEBUG_MALLOC
 | 
			
		||||
int get_malloc(char * buffer);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
static void collect_sigign_sigcatch(struct task_struct *p, sigset_t *ign,
 | 
			
		||||
				    sigset_t *catch)
 | 
			
		||||
{
 | 
			
		||||
	struct k_sigaction *k;
 | 
			
		||||
	int i;
 | 
			
		||||
 | 
			
		||||
	sigemptyset(ign);
 | 
			
		||||
	sigemptyset(catch);
 | 
			
		||||
 | 
			
		||||
#if 0
 | 
			
		||||
	printk ("collect_sigign_sigcatch: %p - %p\n",
 | 
			
		||||
		p, p->sig);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	if (p->sig) {
 | 
			
		||||
		k = p->sig->action;
 | 
			
		||||
		for (i = 1; i <= _NSIG; ++i, ++k) {
 | 
			
		||||
#if 0
 | 
			
		||||
			printk ("signal: %d - %p (%p, %p)\n",
 | 
			
		||||
				i, k->sa.sa_handler, SIG_IGN, SIG_DFL);
 | 
			
		||||
#endif
 | 
			
		||||
			if (k->sa.sa_handler == SIG_IGN)
 | 
			
		||||
				sigaddset(ign, i);
 | 
			
		||||
			else if (k->sa.sa_handler != SIG_DFL)
 | 
			
		||||
				sigaddset(catch, i);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * These bracket the sleeping functions..
 | 
			
		||||
 */
 | 
			
		||||
extern void scheduling_functions_start_here(void);
 | 
			
		||||
extern void scheduling_functions_end_here(void);
 | 
			
		||||
#define first_sched	((unsigned long) scheduling_functions_start_here)
 | 
			
		||||
#define last_sched	((unsigned long) scheduling_functions_end_here)
 | 
			
		||||
 | 
			
		||||
static unsigned long get_wchan(struct task_struct *p)
 | 
			
		||||
{
 | 
			
		||||
	if (!p || p == current || p->state == TASK_RUNNING)
 | 
			
		||||
		return 0;
 | 
			
		||||
#if defined(__i386__)
 | 
			
		||||
	{
 | 
			
		||||
		unsigned long ebp, eip;
 | 
			
		||||
		unsigned long stack_page;
 | 
			
		||||
		int count = 0;
 | 
			
		||||
 | 
			
		||||
		stack_page = 4096 + (unsigned long)p;
 | 
			
		||||
		if (!stack_page)
 | 
			
		||||
			return 0;
 | 
			
		||||
		ebp = p->tss.ebp;
 | 
			
		||||
		do {
 | 
			
		||||
			if (ebp < stack_page || ebp >= 4092+stack_page)
 | 
			
		||||
				return 0;
 | 
			
		||||
			eip = *(unsigned long *) (ebp+4);
 | 
			
		||||
			if (eip < first_sched || eip >= last_sched)
 | 
			
		||||
				return eip;
 | 
			
		||||
			ebp = *(unsigned long *) ebp;
 | 
			
		||||
		} while (count++ < 16);
 | 
			
		||||
	}
 | 
			
		||||
#elif defined(__alpha__)
 | 
			
		||||
	/*
 | 
			
		||||
	 * This one depends on the frame size of schedule().  Do a
 | 
			
		||||
	 * "disass schedule" in gdb to find the frame size.  Also, the
 | 
			
		||||
	 * code assumes that sleep_on() follows immediately after
 | 
			
		||||
	 * interruptible_sleep_on() and that add_timer() follows
 | 
			
		||||
	 * immediately after interruptible_sleep().  Ugly, isn't it?
 | 
			
		||||
	 * Maybe adding a wchan field to task_struct would be better,
 | 
			
		||||
	 * after all...
 | 
			
		||||
	 */
 | 
			
		||||
	{
 | 
			
		||||
	    unsigned long schedule_frame;
 | 
			
		||||
	    unsigned long pc;
 | 
			
		||||
 | 
			
		||||
	    pc = thread_saved_pc(&p->tss);
 | 
			
		||||
	    if (pc >= first_sched && pc < last_sched) {
 | 
			
		||||
		schedule_frame = ((unsigned long *)p->tss.ksp)[6];
 | 
			
		||||
		return ((unsigned long *)schedule_frame)[12];
 | 
			
		||||
	    }
 | 
			
		||||
	    return pc;
 | 
			
		||||
	}	
 | 
			
		||||
#elif defined(__mc68000__)
 | 
			
		||||
	{
 | 
			
		||||
	    unsigned long fp, pc;
 | 
			
		||||
	    unsigned long stack_page;
 | 
			
		||||
	    int count = 0;
 | 
			
		||||
	    extern int sys_pause (void);
 | 
			
		||||
 | 
			
		||||
	    stack_page = p->kernel_stack_page;
 | 
			
		||||
	    if (!stack_page)
 | 
			
		||||
		    return 0;
 | 
			
		||||
	    fp = ((struct switch_stack *)p->tss.ksp)->a6;
 | 
			
		||||
	    do {
 | 
			
		||||
		    if (fp < stack_page || fp >= 4088+stack_page)
 | 
			
		||||
			    return 0;
 | 
			
		||||
		    pc = ((unsigned long *)fp)[1];
 | 
			
		||||
		/* FIXME: This depends on the order of these functions. */
 | 
			
		||||
		    if (pc < first_sched || pc >= last_sched)
 | 
			
		||||
		      return pc;
 | 
			
		||||
		    fp = *(unsigned long *) fp;
 | 
			
		||||
	    } while (count++ < 16);
 | 
			
		||||
	}
 | 
			
		||||
#elif defined(__powerpc__)
 | 
			
		||||
	return (p->tss.wchan);
 | 
			
		||||
#elif defined (CONFIG_ARM)
 | 
			
		||||
	{
 | 
			
		||||
		unsigned long fp, lr;
 | 
			
		||||
		unsigned long stack_page;
 | 
			
		||||
		int count = 0;
 | 
			
		||||
 | 
			
		||||
		stack_page = 4096 + (unsigned long)p;
 | 
			
		||||
		fp = get_css_fp (&p->tss);
 | 
			
		||||
		do {
 | 
			
		||||
			if (fp < stack_page || fp > 4092+stack_page)
 | 
			
		||||
				return 0;
 | 
			
		||||
			lr = pc_pointer (((unsigned long *)fp)[-1]);
 | 
			
		||||
			if (lr < first_sched || lr > last_sched)
 | 
			
		||||
				return lr;
 | 
			
		||||
			fp = *(unsigned long *) (fp - 12);
 | 
			
		||||
		} while (count ++ < 16);
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#if defined(__i386__)
 | 
			
		||||
# define KSTK_EIP(tsk)	(((unsigned long *)(4096+(unsigned long)(tsk)))[1019])
 | 
			
		||||
# define KSTK_ESP(tsk)	(((unsigned long *)(4096+(unsigned long)(tsk)))[1022])
 | 
			
		||||
#elif defined(__alpha__)
 | 
			
		||||
  /*
 | 
			
		||||
   * See arch/alpha/kernel/ptrace.c for details.
 | 
			
		||||
   */
 | 
			
		||||
# define PT_REG(reg)		(PAGE_SIZE - sizeof(struct pt_regs)	\
 | 
			
		||||
				 + (long)&((struct pt_regs *)0)->reg)
 | 
			
		||||
# define KSTK_EIP(tsk) \
 | 
			
		||||
    (*(unsigned long *)(PT_REG(pc) + PAGE_SIZE + (unsigned long)(tsk)))
 | 
			
		||||
# define KSTK_ESP(tsk)	((tsk) == current ? rdusp() : (tsk)->tss.usp)
 | 
			
		||||
#elif defined(CONFIG_ARM)
 | 
			
		||||
# define KSTK_EIP(tsk)	(((unsigned long *)(4096+(unsigned long)(tsk)))[1022])
 | 
			
		||||
# define KSTK_ESP(tsk)	(((unsigned long *)(4096+(unsigned long)(tsk)))[1020])
 | 
			
		||||
#elif defined(__mc68000__)
 | 
			
		||||
#define	KSTK_EIP(tsk)	\
 | 
			
		||||
    ({			\
 | 
			
		||||
	unsigned long eip = 0;	 \
 | 
			
		||||
 	if ((tsk)->tss.esp0 > PAGE_SIZE && \
 | 
			
		||||
	    MAP_NR((tsk)->tss.esp0) < max_mapnr) \
 | 
			
		||||
	      eip = ((struct pt_regs *) (tsk)->tss.esp0)->pc;	 \
 | 
			
		||||
        eip; })
 | 
			
		||||
#define	KSTK_ESP(tsk)	((tsk) == current ? rdusp() : (tsk)->tss.usp)
 | 
			
		||||
#elif defined(__powerpc__)
 | 
			
		||||
#define KSTK_EIP(tsk)	((tsk)->tss.regs->nip)
 | 
			
		||||
#define KSTK_ESP(tsk)	((tsk)->tss.regs->gpr[1])
 | 
			
		||||
#elif defined (__sparc_v9__)
 | 
			
		||||
# define KSTK_EIP(tsk)  ((tsk)->tss.kregs->tpc)
 | 
			
		||||
# define KSTK_ESP(tsk)  ((tsk)->tss.kregs->u_regs[UREG_FP])
 | 
			
		||||
#elif defined(__sparc__)
 | 
			
		||||
# define KSTK_EIP(tsk)  ((tsk)->tss.kregs->pc)
 | 
			
		||||
# define KSTK_ESP(tsk)  ((tsk)->tss.kregs->u_regs[UREG_FP])
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* Gcc optimizes away "strlen(x)" for constant x */
 | 
			
		||||
#define ADDBUF(buffer, string) \
 | 
			
		||||
do { memcpy(buffer, string, strlen(string)); \
 | 
			
		||||
     buffer += strlen(string); } while (0)
 | 
			
		||||
 | 
			
		||||
static inline void statm_pte_range(pmd_t * pmd, unsigned long address, unsigned long size,
 | 
			
		||||
	int * pages, int * shared, int * dirty, int * total)
 | 
			
		||||
{
 | 
			
		||||
	pte_t * pte;
 | 
			
		||||
	unsigned long end;
 | 
			
		||||
 | 
			
		||||
	if (pmd_none(*pmd))
 | 
			
		||||
		return;
 | 
			
		||||
	if (pmd_bad(*pmd)) {
 | 
			
		||||
		printk("statm_pte_range: bad pmd (%08lx)\n", pmd_val(*pmd));
 | 
			
		||||
		pmd_clear(pmd);
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
	pte = pte_offset(pmd, address);
 | 
			
		||||
	address &= ~PMD_MASK;
 | 
			
		||||
	end = address + size;
 | 
			
		||||
	if (end > PMD_SIZE)
 | 
			
		||||
		end = PMD_SIZE;
 | 
			
		||||
	do {
 | 
			
		||||
		pte_t page = *pte;
 | 
			
		||||
 | 
			
		||||
		address += PAGE_SIZE;
 | 
			
		||||
		pte++;
 | 
			
		||||
		if (pte_none(page))
 | 
			
		||||
			continue;
 | 
			
		||||
		++*total;
 | 
			
		||||
		if (!pte_present(page))
 | 
			
		||||
			continue;
 | 
			
		||||
		++*pages;
 | 
			
		||||
		if (pte_dirty(page))
 | 
			
		||||
			++*dirty;
 | 
			
		||||
		if (MAP_NR(pte_page(page)) >= max_mapnr)
 | 
			
		||||
			continue;
 | 
			
		||||
		if (atomic_read(&mem_map[MAP_NR(pte_page(page))].count) > 1)
 | 
			
		||||
			++*shared;
 | 
			
		||||
	} while (address < end);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline void statm_pmd_range(pgd_t * pgd, unsigned long address, unsigned long size,
 | 
			
		||||
	int * pages, int * shared, int * dirty, int * total)
 | 
			
		||||
{
 | 
			
		||||
	pmd_t * pmd;
 | 
			
		||||
	unsigned long end;
 | 
			
		||||
 | 
			
		||||
	if (pgd_none(*pgd))
 | 
			
		||||
		return;
 | 
			
		||||
	if (pgd_bad(*pgd)) {
 | 
			
		||||
		printk("statm_pmd_range: bad pgd (%08lx)\n", pgd_val(*pgd));
 | 
			
		||||
		pgd_clear(pgd);
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
	pmd = pmd_offset(pgd, address);
 | 
			
		||||
	address &= ~PGDIR_MASK;
 | 
			
		||||
	end = address + size;
 | 
			
		||||
	if (end > PGDIR_SIZE)
 | 
			
		||||
		end = PGDIR_SIZE;
 | 
			
		||||
	do {
 | 
			
		||||
		statm_pte_range(pmd, address, end - address, pages, shared, dirty, total);
 | 
			
		||||
		address = (address + PMD_SIZE) & PMD_MASK;
 | 
			
		||||
		pmd++;
 | 
			
		||||
	} while (address < end);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void statm_pgd_range(pgd_t * pgd, unsigned long address, unsigned long end,
 | 
			
		||||
	int * pages, int * shared, int * dirty, int * total)
 | 
			
		||||
{
 | 
			
		||||
	while (address < end) {
 | 
			
		||||
		statm_pmd_range(pgd, address, end - address, pages, shared, dirty, total);
 | 
			
		||||
		address = (address + PGDIR_SIZE) & PGDIR_MASK;
 | 
			
		||||
		pgd++;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int
 | 
			
		||||
table_fkt (int type, union table *buf, const void *param)
 | 
			
		||||
{
 | 
			
		||||
	union table tbl;
 | 
			
		||||
	struct sysinfo i;
 | 
			
		||||
	struct task_struct *tsk = NULL;
 | 
			
		||||
	struct proclist_args plistargs;
 | 
			
		||||
	int index, tindex, err, tty;
 | 
			
		||||
	sigset_t sigign, sigcatch;
 | 
			
		||||
	pid_t pid;
 | 
			
		||||
 | 
			
		||||
	if (type == TABLE_VERSION)
 | 
			
		||||
		return _TABLE_VERSION;
 | 
			
		||||
 | 
			
		||||
	if (!buf)
 | 
			
		||||
		return -EFAULT;
 | 
			
		||||
 | 
			
		||||
	memset (&tbl, 0, sizeof (union table));
 | 
			
		||||
 | 
			
		||||
	/* For TABLE_PROC_*, read pid and get task_struct */
 | 
			
		||||
 | 
			
		||||
	switch (type) {
 | 
			
		||||
	case TABLE_PROC_UID:
 | 
			
		||||
	case TABLE_PROC_MEM:
 | 
			
		||||
	case TABLE_PROC_SEGMENT:
 | 
			
		||||
	case TABLE_PROC_TIME:
 | 
			
		||||
	case TABLE_PROC_STATE:
 | 
			
		||||
	case TABLE_PROC_SIGNAL:
 | 
			
		||||
	case TABLE_PROC_KERNEL:
 | 
			
		||||
		err = verify_area (VERIFY_READ, param, sizeof (pid_t));
 | 
			
		||||
		if (err)
 | 
			
		||||
			return err;
 | 
			
		||||
		copy_from_user (&pid, param, sizeof (pid_t));
 | 
			
		||||
 | 
			
		||||
		read_lock (&tasklist_lock);
 | 
			
		||||
		tsk = find_task_by_pid (pid);
 | 
			
		||||
		/* FIXME!! This should be done after the last use */
 | 
			
		||||
		read_unlock(&tasklist_lock);
 | 
			
		||||
 | 
			
		||||
		if (tsk == NULL)
 | 
			
		||||
			return -ESRCH;
 | 
			
		||||
		break;
 | 
			
		||||
	case TABLE_PROCLIST:
 | 
			
		||||
		err = verify_area (VERIFY_READ, param,
 | 
			
		||||
				   sizeof (struct proclist_args));
 | 
			
		||||
		if (err)
 | 
			
		||||
			return err;
 | 
			
		||||
		copy_from_user (&plistargs, param,
 | 
			
		||||
				sizeof (struct proclist_args));
 | 
			
		||||
		break;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* Main function dispatcher */
 | 
			
		||||
 | 
			
		||||
	switch (type) {
 | 
			
		||||
	case TABLE_PROCLIST:
 | 
			
		||||
		tsk = task [0];
 | 
			
		||||
		read_lock (&tasklist_lock);
 | 
			
		||||
		for (index = tindex = 0; index < nr_tasks;
 | 
			
		||||
		     index++, tsk = tsk->next_task) {
 | 
			
		||||
			if (tsk->pid == 0) continue;
 | 
			
		||||
			switch (plistargs.which & TABLE_KERN_PROC_MASK) {
 | 
			
		||||
			case TABLE_KERN_PROC_PID:
 | 
			
		||||
				if (tsk->pid != plistargs.arg) continue;
 | 
			
		||||
				break;
 | 
			
		||||
			case TABLE_KERN_PROC_PGRP:
 | 
			
		||||
				if (tsk->pgrp != plistargs.arg) continue;
 | 
			
		||||
				break;
 | 
			
		||||
			case TABLE_KERN_PROC_SESSION:
 | 
			
		||||
				if (tsk->session != plistargs.arg) continue;
 | 
			
		||||
			case TABLE_KERN_PROC_TTY:
 | 
			
		||||
				tty = tsk->tty ?
 | 
			
		||||
					kdev_t_to_nr (tsk->tty->device) : 0;
 | 
			
		||||
				if (tty != plistargs.arg) continue;
 | 
			
		||||
				break;
 | 
			
		||||
			case TABLE_KERN_PROC_UID:
 | 
			
		||||
				if (tsk->uid != plistargs.arg) continue;
 | 
			
		||||
				break;
 | 
			
		||||
			case TABLE_KERN_PROC_RUID:
 | 
			
		||||
				if (tsk->euid != plistargs.arg) continue;
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			if ((plistargs.which & TABLE_EXCLUDE_IDLE) &&
 | 
			
		||||
			    (tsk->state != 0))
 | 
			
		||||
				continue;
 | 
			
		||||
 | 
			
		||||
			if ((plistargs.which & TABLE_EXCLUDE_NOTTY) &&
 | 
			
		||||
			    (tsk->tty == NULL))
 | 
			
		||||
				continue;
 | 
			
		||||
			
 | 
			
		||||
			tbl.proclist.pids [tindex++] = tsk->pid;
 | 
			
		||||
		}
 | 
			
		||||
		tbl.proclist.nr_running = nr_running;
 | 
			
		||||
		tbl.proclist.last_pid = last_pid;
 | 
			
		||||
		tbl.proclist.nr_tasks = tindex;
 | 
			
		||||
		read_unlock(&tasklist_lock);
 | 
			
		||||
		break;
 | 
			
		||||
	case TABLE_CPU:
 | 
			
		||||
		tbl.cpu.total = jiffies;    
 | 
			
		||||
		tbl.cpu.user  = kstat.cpu_user;
 | 
			
		||||
		tbl.cpu.nice  = kstat.cpu_nice;
 | 
			
		||||
		tbl.cpu.sys   = kstat.cpu_system;
 | 
			
		||||
		tbl.cpu.idle  = tbl.cpu.total -
 | 
			
		||||
			(tbl.cpu.user + tbl.cpu.nice + tbl.cpu.sys);
 | 
			
		||||
		tbl.cpu.frequency = HZ;
 | 
			
		||||
		break;
 | 
			
		||||
	case TABLE_MEM:
 | 
			
		||||
		si_meminfo (&i);
 | 
			
		||||
		tbl.mem.total  = i.totalram;
 | 
			
		||||
		tbl.mem.used   = i.totalram - i.freeram;
 | 
			
		||||
		tbl.mem.free   = i.freeram;
 | 
			
		||||
		tbl.mem.shared = i.sharedram;
 | 
			
		||||
		tbl.mem.buffer = i.bufferram;
 | 
			
		||||
		tbl.mem.cached = page_cache_size << PAGE_SHIFT;
 | 
			
		||||
		break;
 | 
			
		||||
	case TABLE_SWAP:
 | 
			
		||||
		si_swapinfo (&i);
 | 
			
		||||
		tbl.swap.total = i.totalswap;
 | 
			
		||||
		tbl.swap.used  = i.totalswap - i.freeswap;
 | 
			
		||||
		tbl.swap.free  = i.freeswap;
 | 
			
		||||
		break;
 | 
			
		||||
	case TABLE_LOADAVG:
 | 
			
		||||
		tbl.loadavg.loadavg [0] = (double) avenrun [0] / (1 << FSHIFT);
 | 
			
		||||
		tbl.loadavg.loadavg [1] = (double) avenrun [1] / (1 << FSHIFT);
 | 
			
		||||
		tbl.loadavg.loadavg [2] = (double) avenrun [2] / (1 << FSHIFT);
 | 
			
		||||
		tbl.loadavg.nr_running = nr_running;
 | 
			
		||||
		tbl.loadavg.nr_tasks = nr_tasks;
 | 
			
		||||
		tbl.loadavg.last_pid = last_pid;
 | 
			
		||||
		break;
 | 
			
		||||
	case TABLE_UPTIME:
 | 
			
		||||
		tbl.uptime.uptime = jiffies;
 | 
			
		||||
		tbl.uptime.idle   = task[0]->times.tms_utime +
 | 
			
		||||
			task[0]->times.tms_stime;
 | 
			
		||||
		break;
 | 
			
		||||
	case TABLE_PROC_STATE:
 | 
			
		||||
		tbl.proc_state.uid = tsk->uid;
 | 
			
		||||
		tbl.proc_state.gid = tsk->gid;
 | 
			
		||||
		tbl.proc_state.state = tsk->state;
 | 
			
		||||
		tbl.proc_state.flags = tsk->flags;
 | 
			
		||||
		memcpy (tbl.proc_state.comm, tsk->comm,
 | 
			
		||||
			sizeof (tbl.proc_state.comm));
 | 
			
		||||
		break;
 | 
			
		||||
	case TABLE_PROC_UID:
 | 
			
		||||
		tbl.proc_uid.uid = tsk->uid;
 | 
			
		||||
		tbl.proc_uid.euid = tsk->euid;
 | 
			
		||||
		tbl.proc_uid.suid = tsk->suid;
 | 
			
		||||
		tbl.proc_uid.fsuid = tsk->fsuid;
 | 
			
		||||
		
 | 
			
		||||
		tbl.proc_uid.gid = tsk->gid;
 | 
			
		||||
		tbl.proc_uid.egid = tsk->egid;
 | 
			
		||||
		tbl.proc_uid.sgid = tsk->sgid;
 | 
			
		||||
		tbl.proc_uid.fsgid = tsk->fsgid;
 | 
			
		||||
		
 | 
			
		||||
		tbl.proc_uid.pid = tsk->pid;
 | 
			
		||||
		tbl.proc_uid.pgrp = tsk->pgrp;
 | 
			
		||||
		tbl.proc_uid.ppid = tsk->p_pptr->pid;
 | 
			
		||||
		
 | 
			
		||||
		tbl.proc_uid.session = tsk->session;
 | 
			
		||||
	        tbl.proc_uid.tty = tsk->tty ?
 | 
			
		||||
			kdev_t_to_nr (tsk->tty->device) : 0;
 | 
			
		||||
		tbl.proc_uid.tpgid = tsk->tty ? tsk->tty->pgrp : -1;
 | 
			
		||||
		
 | 
			
		||||
		tbl.proc_uid.priority = tsk->priority;
 | 
			
		||||
		tbl.proc_uid.counter = tsk->counter;
 | 
			
		||||
		tbl.proc_uid.def_priority = DEF_PRIORITY;
 | 
			
		||||
		break;
 | 
			
		||||
	case TABLE_PROC_SIGNAL:
 | 
			
		||||
		memcpy (&tbl.proc_signal.signal, &tsk->signal,
 | 
			
		||||
			sizeof (tbl.proc_signal.signal));
 | 
			
		||||
 | 
			
		||||
		memcpy (&tbl.proc_signal.blocked, &tsk->blocked,
 | 
			
		||||
			sizeof (tbl.proc_signal.blocked));
 | 
			
		||||
 | 
			
		||||
		collect_sigign_sigcatch (tsk, &sigign, &sigcatch);
 | 
			
		||||
 | 
			
		||||
		memcpy (&tbl.proc_signal.ignored, &sigign,
 | 
			
		||||
			sizeof (tbl.proc_signal.ignored));
 | 
			
		||||
 | 
			
		||||
		memcpy (&tbl.proc_signal.caught, &sigcatch,
 | 
			
		||||
			sizeof (tbl.proc_signal.caught));
 | 
			
		||||
 | 
			
		||||
#if 0
 | 
			
		||||
		printk ("PROC_SIGNAL: (%lu, %lu) - (%lu, %lu)\n",
 | 
			
		||||
			tbl.proc_signal.ignored.sig [0],
 | 
			
		||||
			tbl.proc_signal.ignored.sig [1],
 | 
			
		||||
			tbl.proc_signal.caught.sig [0],
 | 
			
		||||
			tbl.proc_signal.caught.sig [1]);
 | 
			
		||||
#endif
 | 
			
		||||
		break;
 | 
			
		||||
	case TABLE_PROC_MEM:
 | 
			
		||||
		if (tsk->mm && tsk->mm != &init_mm) {
 | 
			
		||||
			tbl.proc_mem.context = tsk->mm->context;
 | 
			
		||||
			tbl.proc_mem.start_code = tsk->mm->start_code;
 | 
			
		||||
			tbl.proc_mem.end_code = tsk->mm->end_code;
 | 
			
		||||
			tbl.proc_mem.start_data = tsk->mm-> start_data;
 | 
			
		||||
			tbl.proc_mem.end_data = tsk->mm->end_data;
 | 
			
		||||
			tbl.proc_mem.start_brk = tsk->mm->start_brk;
 | 
			
		||||
			tbl.proc_mem.brk = tsk->mm->brk;
 | 
			
		||||
			tbl.proc_mem.start_stack = tsk->mm->start_stack;
 | 
			
		||||
			tbl.proc_mem.start_mmap = tsk->mm->mmap ?
 | 
			
		||||
				tsk->mm->mmap->vm_start : 0;
 | 
			
		||||
			tbl.proc_mem.arg_start = tsk->mm->arg_start;
 | 
			
		||||
			tbl.proc_mem.arg_end = tsk->mm->arg_end;
 | 
			
		||||
			tbl.proc_mem.env_start = tsk->mm->env_start;
 | 
			
		||||
			tbl.proc_mem.env_end = tsk->mm->env_end;
 | 
			
		||||
			tbl.proc_mem.rss = tsk->mm->rss << PAGE_SHIFT;
 | 
			
		||||
			tbl.proc_mem.total_vm = tsk->mm->total_vm;
 | 
			
		||||
			tbl.proc_mem.locked_vm = tsk->mm->locked_vm;
 | 
			
		||||
		}
 | 
			
		||||
		tbl.proc_mem.rlim = tsk->rlim ? tsk->rlim[RLIMIT_RSS].rlim_cur : 0;
 | 
			
		||||
		break;
 | 
			
		||||
	case TABLE_PROC_SEGMENT:
 | 
			
		||||
		if (tsk->mm && tsk->mm != &init_mm) {
 | 
			
		||||
			unsigned long vsize = 0;
 | 
			
		||||
			int size = 0, resident = 0, share = 0;
 | 
			
		||||
			int trs = 0, lrs = 0, drs = 0, srs = 0, dt = 0;
 | 
			
		||||
			struct vm_area_struct * vma = tsk->mm->mmap;
 | 
			
		||||
 | 
			
		||||
			while (vma) {
 | 
			
		||||
				pgd_t *pgd = pgd_offset(tsk->mm, vma->vm_start);
 | 
			
		||||
				int pages = 0, shared = 0, dirty = 0, total = 0;
 | 
			
		||||
				
 | 
			
		||||
				vsize += vma->vm_end - vma->vm_start;
 | 
			
		||||
 | 
			
		||||
				statm_pgd_range (pgd, vma->vm_start, vma->vm_end,
 | 
			
		||||
 | 
			
		||||
						 &pages, &shared, &dirty, &total);
 | 
			
		||||
 | 
			
		||||
				resident += pages;
 | 
			
		||||
				share += shared;
 | 
			
		||||
				dt += dirty;
 | 
			
		||||
				size += total;
 | 
			
		||||
 | 
			
		||||
				/* Well, shared library seem to get mapped
 | 
			
		||||
				 * above 0x40000000 and are executable,
 | 
			
		||||
				 * so I use this hack to get their size.
 | 
			
		||||
				 */
 | 
			
		||||
 | 
			
		||||
				if (vma->vm_flags & VM_GROWSDOWN)
 | 
			
		||||
					srs += pages;	/* stack */
 | 
			
		||||
				else if ((vma->vm_flags & VM_EXEC) &&
 | 
			
		||||
					 (vma->vm_start > 0x40000000))
 | 
			
		||||
					lrs += pages;	/* library */
 | 
			
		||||
				else if (vma->vm_flags & VM_EXECUTABLE)
 | 
			
		||||
					trs += pages;	/* text */
 | 
			
		||||
				else
 | 
			
		||||
					drs += pages;
 | 
			
		||||
 | 
			
		||||
				vma = vma->vm_next;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			tbl.proc_segment.vsize = vsize;
 | 
			
		||||
			tbl.proc_segment.size = size << PAGE_SHIFT;
 | 
			
		||||
			tbl.proc_segment.resident = resident << PAGE_SHIFT;
 | 
			
		||||
			tbl.proc_segment.shared = share << PAGE_SHIFT;
 | 
			
		||||
			tbl.proc_segment.trs = trs << PAGE_SHIFT;
 | 
			
		||||
			tbl.proc_segment.lrs = lrs << PAGE_SHIFT;
 | 
			
		||||
			tbl.proc_segment.drs = drs << PAGE_SHIFT;
 | 
			
		||||
			tbl.proc_segment.srs = srs << PAGE_SHIFT;
 | 
			
		||||
			tbl.proc_segment.dt = dt << PAGE_SHIFT;
 | 
			
		||||
		}
 | 
			
		||||
		break;
 | 
			
		||||
	case TABLE_PROC_TIME:
 | 
			
		||||
		tbl.proc_time.utime = tsk->times.tms_utime;
 | 
			
		||||
		tbl.proc_time.stime = tsk->times.tms_stime;
 | 
			
		||||
		tbl.proc_time.cutime = tsk->times.tms_cutime;
 | 
			
		||||
		tbl.proc_time.cstime = tsk->times.tms_cstime;
 | 
			
		||||
 | 
			
		||||
		tbl.proc_time.start_time = tsk->start_time;
 | 
			
		||||
		tbl.proc_time.timeout = tsk->timeout;
 | 
			
		||||
		tbl.proc_time.policy = tsk->policy;
 | 
			
		||||
		tbl.proc_time.rt_priority = tsk->rt_priority;
 | 
			
		||||
 | 
			
		||||
		tbl.proc_time.it_real_value = tsk->it_real_value;
 | 
			
		||||
		tbl.proc_time.it_prof_value = tsk->it_prof_value;
 | 
			
		||||
		tbl.proc_time.it_virt_value = tsk->it_virt_value;
 | 
			
		||||
		tbl.proc_time.it_real_incr = tsk->it_real_incr;
 | 
			
		||||
		tbl.proc_time.it_prof_incr = tsk->it_prof_incr;
 | 
			
		||||
		tbl.proc_time.it_virt_incr = tsk->it_virt_incr;
 | 
			
		||||
		break;
 | 
			
		||||
	case TABLE_PROC_KERNEL:
 | 
			
		||||
		tbl.proc_kernel.min_flt = tsk->min_flt;
 | 
			
		||||
		tbl.proc_kernel.cmin_flt = tsk->cmin_flt;
 | 
			
		||||
		tbl.proc_kernel.maj_flt = tsk->maj_flt;
 | 
			
		||||
		tbl.proc_kernel.cmaj_flt = tsk->cmaj_flt;
 | 
			
		||||
		
 | 
			
		||||
		tbl.proc_kernel.kesp = KSTK_ESP(tsk);
 | 
			
		||||
		tbl.proc_kernel.keip = KSTK_EIP(tsk);
 | 
			
		||||
		
 | 
			
		||||
		tbl.proc_kernel.nswap = tsk->nswap;
 | 
			
		||||
		tbl.proc_kernel.cnswap = tsk->cnswap;
 | 
			
		||||
 | 
			
		||||
		tbl.proc_kernel.wchan = get_wchan (tsk);
 | 
			
		||||
		break;
 | 
			
		||||
	default:
 | 
			
		||||
		return -EINVAL;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	err = verify_area (VERIFY_WRITE, buf, sizeof (struct table));
 | 
			
		||||
	if (err)
 | 
			
		||||
		return err;
 | 
			
		||||
 | 
			
		||||
	copy_to_user (buf, &tbl, sizeof (union table));
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										344
									
								
								kernel/table21/unistd-i386.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										344
									
								
								kernel/table21/unistd-i386.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,344 @@
 | 
			
		||||
#ifndef _ASM_I386_UNISTD_H_
 | 
			
		||||
#define _ASM_I386_UNISTD_H_
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * This file contains the system call numbers.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#define __NR_setup		  0	/* used only by init, to get system going */
 | 
			
		||||
#define __NR_exit		  1
 | 
			
		||||
#define __NR_fork		  2
 | 
			
		||||
#define __NR_read		  3
 | 
			
		||||
#define __NR_write		  4
 | 
			
		||||
#define __NR_open		  5
 | 
			
		||||
#define __NR_close		  6
 | 
			
		||||
#define __NR_waitpid		  7
 | 
			
		||||
#define __NR_creat		  8
 | 
			
		||||
#define __NR_link		  9
 | 
			
		||||
#define __NR_unlink		 10
 | 
			
		||||
#define __NR_execve		 11
 | 
			
		||||
#define __NR_chdir		 12
 | 
			
		||||
#define __NR_time		 13
 | 
			
		||||
#define __NR_mknod		 14
 | 
			
		||||
#define __NR_chmod		 15
 | 
			
		||||
#define __NR_lchown		 16
 | 
			
		||||
#define __NR_break		 17
 | 
			
		||||
#define __NR_oldstat		 18
 | 
			
		||||
#define __NR_lseek		 19
 | 
			
		||||
#define __NR_getpid		 20
 | 
			
		||||
#define __NR_mount		 21
 | 
			
		||||
#define __NR_umount		 22
 | 
			
		||||
#define __NR_setuid		 23
 | 
			
		||||
#define __NR_getuid		 24
 | 
			
		||||
#define __NR_stime		 25
 | 
			
		||||
#define __NR_ptrace		 26
 | 
			
		||||
#define __NR_alarm		 27
 | 
			
		||||
#define __NR_oldfstat		 28
 | 
			
		||||
#define __NR_pause		 29
 | 
			
		||||
#define __NR_utime		 30
 | 
			
		||||
#define __NR_stty		 31
 | 
			
		||||
#define __NR_gtty		 32
 | 
			
		||||
#define __NR_access		 33
 | 
			
		||||
#define __NR_nice		 34
 | 
			
		||||
#define __NR_ftime		 35
 | 
			
		||||
#define __NR_sync		 36
 | 
			
		||||
#define __NR_kill		 37
 | 
			
		||||
#define __NR_rename		 38
 | 
			
		||||
#define __NR_mkdir		 39
 | 
			
		||||
#define __NR_rmdir		 40
 | 
			
		||||
#define __NR_dup		 41
 | 
			
		||||
#define __NR_pipe		 42
 | 
			
		||||
#define __NR_times		 43
 | 
			
		||||
#define __NR_prof		 44
 | 
			
		||||
#define __NR_brk		 45
 | 
			
		||||
#define __NR_setgid		 46
 | 
			
		||||
#define __NR_getgid		 47
 | 
			
		||||
#define __NR_signal		 48
 | 
			
		||||
#define __NR_geteuid		 49
 | 
			
		||||
#define __NR_getegid		 50
 | 
			
		||||
#define __NR_acct		 51
 | 
			
		||||
#define __NR_phys		 52
 | 
			
		||||
#define __NR_lock		 53
 | 
			
		||||
#define __NR_ioctl		 54
 | 
			
		||||
#define __NR_fcntl		 55
 | 
			
		||||
#define __NR_mpx		 56
 | 
			
		||||
#define __NR_setpgid		 57
 | 
			
		||||
#define __NR_ulimit		 58
 | 
			
		||||
#define __NR_oldolduname	 59
 | 
			
		||||
#define __NR_umask		 60
 | 
			
		||||
#define __NR_chroot		 61
 | 
			
		||||
#define __NR_ustat		 62
 | 
			
		||||
#define __NR_dup2		 63
 | 
			
		||||
#define __NR_getppid		 64
 | 
			
		||||
#define __NR_getpgrp		 65
 | 
			
		||||
#define __NR_setsid		 66
 | 
			
		||||
#define __NR_sigaction		 67
 | 
			
		||||
#define __NR_sgetmask		 68
 | 
			
		||||
#define __NR_ssetmask		 69
 | 
			
		||||
#define __NR_setreuid		 70
 | 
			
		||||
#define __NR_setregid		 71
 | 
			
		||||
#define __NR_sigsuspend		 72
 | 
			
		||||
#define __NR_sigpending		 73
 | 
			
		||||
#define __NR_sethostname	 74
 | 
			
		||||
#define __NR_setrlimit		 75
 | 
			
		||||
#define __NR_getrlimit		 76
 | 
			
		||||
#define __NR_getrusage		 77
 | 
			
		||||
#define __NR_gettimeofday	 78
 | 
			
		||||
#define __NR_settimeofday	 79
 | 
			
		||||
#define __NR_getgroups		 80
 | 
			
		||||
#define __NR_setgroups		 81
 | 
			
		||||
#define __NR_select		 82
 | 
			
		||||
#define __NR_symlink		 83
 | 
			
		||||
#define __NR_oldlstat		 84
 | 
			
		||||
#define __NR_readlink		 85
 | 
			
		||||
#define __NR_uselib		 86
 | 
			
		||||
#define __NR_swapon		 87
 | 
			
		||||
#define __NR_reboot		 88
 | 
			
		||||
#define __NR_readdir		 89
 | 
			
		||||
#define __NR_mmap		 90
 | 
			
		||||
#define __NR_munmap		 91
 | 
			
		||||
#define __NR_truncate		 92
 | 
			
		||||
#define __NR_ftruncate		 93
 | 
			
		||||
#define __NR_fchmod		 94
 | 
			
		||||
#define __NR_fchown		 95
 | 
			
		||||
#define __NR_getpriority	 96
 | 
			
		||||
#define __NR_setpriority	 97
 | 
			
		||||
#define __NR_profil		 98
 | 
			
		||||
#define __NR_statfs		 99
 | 
			
		||||
#define __NR_fstatfs		100
 | 
			
		||||
#define __NR_ioperm		101
 | 
			
		||||
#define __NR_socketcall		102
 | 
			
		||||
#define __NR_syslog		103
 | 
			
		||||
#define __NR_setitimer		104
 | 
			
		||||
#define __NR_getitimer		105
 | 
			
		||||
#define __NR_stat		106
 | 
			
		||||
#define __NR_lstat		107
 | 
			
		||||
#define __NR_fstat		108
 | 
			
		||||
#define __NR_olduname		109
 | 
			
		||||
#define __NR_iopl		110
 | 
			
		||||
#define __NR_vhangup		111
 | 
			
		||||
#define __NR_idle		112
 | 
			
		||||
#define __NR_vm86old		113
 | 
			
		||||
#define __NR_wait4		114
 | 
			
		||||
#define __NR_swapoff		115
 | 
			
		||||
#define __NR_sysinfo		116
 | 
			
		||||
#define __NR_ipc		117
 | 
			
		||||
#define __NR_fsync		118
 | 
			
		||||
#define __NR_sigreturn		119
 | 
			
		||||
#define __NR_clone		120
 | 
			
		||||
#define __NR_setdomainname	121
 | 
			
		||||
#define __NR_uname		122
 | 
			
		||||
#define __NR_modify_ldt		123
 | 
			
		||||
#define __NR_adjtimex		124
 | 
			
		||||
#define __NR_mprotect		125
 | 
			
		||||
#define __NR_sigprocmask	126
 | 
			
		||||
#define __NR_create_module	127
 | 
			
		||||
#define __NR_init_module	128
 | 
			
		||||
#define __NR_delete_module	129
 | 
			
		||||
#define __NR_get_kernel_syms	130
 | 
			
		||||
#define __NR_quotactl		131
 | 
			
		||||
#define __NR_getpgid		132
 | 
			
		||||
#define __NR_fchdir		133
 | 
			
		||||
#define __NR_bdflush		134
 | 
			
		||||
#define __NR_sysfs		135
 | 
			
		||||
#define __NR_personality	136
 | 
			
		||||
#define __NR_afs_syscall	137 /* Syscall for Andrew File System */
 | 
			
		||||
#define __NR_setfsuid		138
 | 
			
		||||
#define __NR_setfsgid		139
 | 
			
		||||
#define __NR__llseek		140
 | 
			
		||||
#define __NR_getdents		141
 | 
			
		||||
#define __NR__newselect		142
 | 
			
		||||
#define __NR_flock		143
 | 
			
		||||
#define __NR_msync		144
 | 
			
		||||
#define __NR_readv		145
 | 
			
		||||
#define __NR_writev		146
 | 
			
		||||
#define __NR_getsid		147
 | 
			
		||||
#define __NR_fdatasync		148
 | 
			
		||||
#define __NR__sysctl		149
 | 
			
		||||
#define __NR_mlock		150
 | 
			
		||||
#define __NR_munlock		151
 | 
			
		||||
#define __NR_mlockall		152
 | 
			
		||||
#define __NR_munlockall		153
 | 
			
		||||
#define __NR_sched_setparam		154
 | 
			
		||||
#define __NR_sched_getparam		155
 | 
			
		||||
#define __NR_sched_setscheduler		156
 | 
			
		||||
#define __NR_sched_getscheduler		157
 | 
			
		||||
#define __NR_sched_yield		158
 | 
			
		||||
#define __NR_sched_get_priority_max	159
 | 
			
		||||
#define __NR_sched_get_priority_min	160
 | 
			
		||||
#define __NR_sched_rr_get_interval	161
 | 
			
		||||
#define __NR_nanosleep		162
 | 
			
		||||
#define __NR_mremap		163
 | 
			
		||||
#define __NR_setresuid		164
 | 
			
		||||
#define __NR_getresuid		165
 | 
			
		||||
#define __NR_vm86		166
 | 
			
		||||
#define __NR_query_module	167
 | 
			
		||||
#define __NR_poll		168
 | 
			
		||||
#define __NR_nfsservctl		169
 | 
			
		||||
#define __NR_setresgid		170
 | 
			
		||||
#define __NR_getresgid		171
 | 
			
		||||
#define __NR_prctl              172
 | 
			
		||||
#define __NR_rt_sigreturn	173
 | 
			
		||||
#define __NR_rt_sigaction	174
 | 
			
		||||
#define __NR_rt_sigprocmask	175
 | 
			
		||||
#define __NR_rt_sigpending	176
 | 
			
		||||
#define __NR_rt_sigtimedwait	177
 | 
			
		||||
#define __NR_rt_sigqueueinfo	178
 | 
			
		||||
#define __NR_rt_sigsuspend	179
 | 
			
		||||
#define __NR_pread		180
 | 
			
		||||
#define __NR_pwrite		181
 | 
			
		||||
#define __NR_chown		182
 | 
			
		||||
#define __NR_getcwd		183
 | 
			
		||||
#define __NR_capget		184
 | 
			
		||||
#define __NR_capset		185
 | 
			
		||||
#define __NR_sigaltstack	186
 | 
			
		||||
#define __NR_sendfile		187
 | 
			
		||||
#define __NR_streams1		188	/* some people actually want it */
 | 
			
		||||
#define __NR_streams2		189	/* some people actually want it */
 | 
			
		||||
#define __NR_table		190
 | 
			
		||||
 | 
			
		||||
/* user-visible error numbers are in the range -1 - -122: see <asm-i386/errno.h> */
 | 
			
		||||
 | 
			
		||||
#define __syscall_return(type, res) \
 | 
			
		||||
do { \
 | 
			
		||||
	if ((unsigned long)(res) >= (unsigned long)(-125)) { \
 | 
			
		||||
		errno = -(res); \
 | 
			
		||||
		res = -1; \
 | 
			
		||||
	} \
 | 
			
		||||
	return (type) (res); \
 | 
			
		||||
} while (0)
 | 
			
		||||
 | 
			
		||||
/* XXX - _foo needs to be __foo, while __NR_bar could be _NR_bar. */
 | 
			
		||||
#define _syscall0(type,name) \
 | 
			
		||||
type name(void) \
 | 
			
		||||
{ \
 | 
			
		||||
long __res; \
 | 
			
		||||
__asm__ volatile ("int $0x80" \
 | 
			
		||||
	: "=a" (__res) \
 | 
			
		||||
	: "0" (__NR_##name)); \
 | 
			
		||||
__syscall_return(type,__res); \
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#define _syscall1(type,name,type1,arg1) \
 | 
			
		||||
type name(type1 arg1) \
 | 
			
		||||
{ \
 | 
			
		||||
long __res; \
 | 
			
		||||
__asm__ volatile ("int $0x80" \
 | 
			
		||||
	: "=a" (__res) \
 | 
			
		||||
	: "0" (__NR_##name),"b" ((long)(arg1))); \
 | 
			
		||||
__syscall_return(type,__res); \
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#define _syscall2(type,name,type1,arg1,type2,arg2) \
 | 
			
		||||
type name(type1 arg1,type2 arg2) \
 | 
			
		||||
{ \
 | 
			
		||||
long __res; \
 | 
			
		||||
__asm__ volatile ("int $0x80" \
 | 
			
		||||
	: "=a" (__res) \
 | 
			
		||||
	: "0" (__NR_##name),"b" ((long)(arg1)),"c" ((long)(arg2))); \
 | 
			
		||||
__syscall_return(type,__res); \
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \
 | 
			
		||||
type name(type1 arg1,type2 arg2,type3 arg3) \
 | 
			
		||||
{ \
 | 
			
		||||
long __res; \
 | 
			
		||||
__asm__ volatile ("int $0x80" \
 | 
			
		||||
	: "=a" (__res) \
 | 
			
		||||
	: "0" (__NR_##name),"b" ((long)(arg1)),"c" ((long)(arg2)), \
 | 
			
		||||
		  "d" ((long)(arg3))); \
 | 
			
		||||
__syscall_return(type,__res); \
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4) \
 | 
			
		||||
type name (type1 arg1, type2 arg2, type3 arg3, type4 arg4) \
 | 
			
		||||
{ \
 | 
			
		||||
long __res; \
 | 
			
		||||
__asm__ volatile ("int $0x80" \
 | 
			
		||||
	: "=a" (__res) \
 | 
			
		||||
	: "0" (__NR_##name),"b" ((long)(arg1)),"c" ((long)(arg2)), \
 | 
			
		||||
	  "d" ((long)(arg3)),"S" ((long)(arg4))); \
 | 
			
		||||
__syscall_return(type,__res); \
 | 
			
		||||
} 
 | 
			
		||||
 | 
			
		||||
#define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4, \
 | 
			
		||||
	  type5,arg5) \
 | 
			
		||||
type name (type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5) \
 | 
			
		||||
{ \
 | 
			
		||||
long __res; \
 | 
			
		||||
__asm__ volatile ("int $0x80" \
 | 
			
		||||
	: "=a" (__res) \
 | 
			
		||||
	: "0" (__NR_##name),"b" ((long)(arg1)),"c" ((long)(arg2)), \
 | 
			
		||||
	  "d" ((long)(arg3)),"S" ((long)(arg4)),"D" ((long)(arg5))); \
 | 
			
		||||
__syscall_return(type,__res); \
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#ifdef __KERNEL_SYSCALLS__
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * we need this inline - forking from kernel space will result
 | 
			
		||||
 * in NO COPY ON WRITE (!!!), until an execve is executed. This
 | 
			
		||||
 * is no problem, but for the stack. This is handled by not letting
 | 
			
		||||
 * main() use the stack at all after fork(). Thus, no function
 | 
			
		||||
 * calls - which means inline code for fork too, as otherwise we
 | 
			
		||||
 * would use the stack upon exit from 'fork()'.
 | 
			
		||||
 *
 | 
			
		||||
 * Actually only pause and fork are needed inline, so that there
 | 
			
		||||
 * won't be any messing with the stack from main(), but we define
 | 
			
		||||
 * some others too.
 | 
			
		||||
 */
 | 
			
		||||
#define __NR__exit __NR_exit
 | 
			
		||||
static inline _syscall0(int,idle)
 | 
			
		||||
static inline _syscall0(int,pause)
 | 
			
		||||
static inline _syscall1(int,setup,int,magic)
 | 
			
		||||
static inline _syscall0(int,sync)
 | 
			
		||||
static inline _syscall0(pid_t,setsid)
 | 
			
		||||
static inline _syscall3(int,write,int,fd,const char *,buf,off_t,count)
 | 
			
		||||
static inline _syscall3(int,read,int,fd,char *,buf,off_t,count)
 | 
			
		||||
static inline _syscall3(off_t,lseek,int,fd,off_t,offset,int,count)
 | 
			
		||||
static inline _syscall1(int,dup,int,fd)
 | 
			
		||||
static inline _syscall3(int,execve,const char *,file,char **,argv,char **,envp)
 | 
			
		||||
static inline _syscall3(int,open,const char *,file,int,flag,int,mode)
 | 
			
		||||
static inline _syscall1(int,close,int,fd)
 | 
			
		||||
static inline _syscall1(int,_exit,int,exitcode)
 | 
			
		||||
static inline _syscall3(pid_t,waitpid,pid_t,pid,int *,wait_stat,int,options)
 | 
			
		||||
static inline _syscall1(int,delete_module,const char *,name)
 | 
			
		||||
 | 
			
		||||
static inline pid_t wait(int * wait_stat)
 | 
			
		||||
{
 | 
			
		||||
	return waitpid(-1,wait_stat,0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * This is the mechanism for creating a new kernel thread.
 | 
			
		||||
 *
 | 
			
		||||
 * NOTE! Only a kernel-only process(ie the swapper or direct descendants
 | 
			
		||||
 * who haven't done an "execve()") should use this: it will work within
 | 
			
		||||
 * a system call from a "real" process, but the process memory space will
 | 
			
		||||
 * not be free'd until both the parent and the child have exited.
 | 
			
		||||
 */
 | 
			
		||||
static inline pid_t kernel_thread(int (*fn)(void *), void * arg, unsigned long flags)
 | 
			
		||||
{
 | 
			
		||||
	long retval;
 | 
			
		||||
 | 
			
		||||
	__asm__ __volatile__(
 | 
			
		||||
		"movl %%esp,%%esi\n\t"
 | 
			
		||||
		"int $0x80\n\t"		/* Linux/i386 system call */
 | 
			
		||||
		"cmpl %%esp,%%esi\n\t"	/* child or parent? */
 | 
			
		||||
		"je 1f\n\t"		/* parent - jump */
 | 
			
		||||
		"pushl %3\n\t"		/* push argument */
 | 
			
		||||
		"call *%4\n\t"		/* call fn */
 | 
			
		||||
		"movl %2,%0\n\t"	/* exit */
 | 
			
		||||
		"int $0x80\n"
 | 
			
		||||
		"1:\t"
 | 
			
		||||
		:"=a" (retval)
 | 
			
		||||
		:"0" (__NR_clone), "i" (__NR_exit),
 | 
			
		||||
		 "r" (arg), "r" (fn),
 | 
			
		||||
		 "b" (flags | CLONE_VM)
 | 
			
		||||
		:"si");
 | 
			
		||||
	return retval;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* _ASM_I386_UNISTD_H_ */
 | 
			
		||||
							
								
								
									
										1
									
								
								kernel/table21/version.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								kernel/table21/version.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
#define _TABLE_VERSION	1
 | 
			
		||||
							
								
								
									
										1
									
								
								kernel/version.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								kernel/version.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
#define _TABLE_VERSION	1
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user