Compare commits
	
		
			199 Commits
		
	
	
		
			gnome-2-6
			...
			LIBGTOP_2_
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 78c10bca9b | ||
|  | 270ec235c1 | ||
|  | 2362be986b | ||
|  | 8a1e1cff91 | ||
|  | 46380bf655 | ||
|  | 91dda5b70d | ||
|  | 9b263e0fbb | ||
|  | 793807b07e | ||
|  | 9898e7ee58 | ||
|  | 7ecdcd712d | ||
|  | 703a17f3f0 | ||
|  | 92a9e7d937 | ||
|  | 01c7e99aa6 | ||
|  | 6fe16f1d91 | ||
|  | fcb83e637d | ||
|  | 50e4e07013 | ||
|  | ab40c94db3 | ||
|  | fee415ecd8 | ||
|  | 647a313d5b | ||
|  | 70ac398a44 | ||
|  | 48056f7d8a | ||
|  | 7ca4171652 | ||
|  | 1537eea7e5 | ||
|  | 0a425e4e41 | ||
|  | 0fa9c9bc61 | ||
|  | 9561cf34b2 | ||
|  | be721ca476 | ||
|  | 265da513de | ||
|  | a180cb5b10 | ||
|  | c517f20195 | ||
|  | e4ad12fd93 | ||
|  | c22300d109 | ||
|  | bffc09b594 | ||
|  | b7fd73bc5c | ||
|  | 15904773f3 | ||
|  | b76ae7b1ca | ||
|  | 006eddb5fe | ||
|  | 7566ccf311 | ||
|  | cde49f488c | ||
|  | ce9ce223ca | ||
|  | 71900c0e30 | ||
|  | 817057bc3c | ||
|  | 9fe6dadcec | ||
|  | 3e06f95c84 | ||
|  | 2ca1905547 | ||
|  | 65d2d61d41 | ||
|  | 8a4fd3c971 | ||
|  | c09e2fdead | ||
|  | fe5bb1c39c | ||
|  | 4b310d26f7 | ||
|  | 83759b2a4a | ||
|  | 209219d5ce | ||
|  | 8ce468228a | ||
|  | e9e2b7c09b | ||
|  | 2fa0dc1cd8 | ||
|  | faa80b7b24 | ||
|  | 7ff2372249 | ||
|  | f378a263b0 | ||
|  | 77b892ebf7 | ||
|  | db2fed4da3 | ||
|  | 160bdeaecd | ||
|  | 1d6debfa56 | ||
|  | bbb6cbaa87 | ||
|  | ce229a4e19 | ||
|  | 544aff2f18 | ||
|  | 74f20ca469 | ||
|  | edd5156ca0 | ||
|  | 7e5ccec8bf | ||
|  | fdf313cdf6 | ||
|  | 9a6bb02fb1 | ||
|  | e6f0664c3b | ||
|  | 405f0602e0 | ||
|  | b3dfc1d1d2 | ||
|  | 13025c6c5f | ||
|  | bbcbe6b67d | ||
|  | 6c586e844f | ||
|  | a1677aefa8 | ||
|  | 9f91b2ddb8 | ||
|  | ca8d9657f0 | ||
|  | 5bd4c5feeb | ||
|  | 15a4ba35a9 | ||
|  | f028bd79bf | ||
|  | d809faba3e | ||
|  | d0833edb66 | ||
|  | 9aae957919 | ||
|  | 6d24f84fd6 | ||
|  | fe08779c6c | ||
|  | 804b82eff8 | ||
|  | 61889bc182 | ||
|  | c29887d4b0 | ||
|  | edb1e6a773 | ||
|  | 5d97c3fa5e | ||
|  | e830a8eeb6 | ||
|  | a6410588cd | ||
|  | 339b79b100 | ||
|  | 831f0e7d68 | ||
|  | 4882405885 | ||
|  | 5b15a2d1a5 | ||
|  | 6954b81396 | ||
|  | 35dd4cf1ca | ||
|  | 0b0b1ab43c | ||
|  | a6311d88c3 | ||
|  | f561120748 | ||
|  | b35532dd6f | ||
|  | c7d323749c | ||
|  | 3d1997ca94 | ||
|  | b3fd15c190 | ||
|  | 601cfef32f | ||
|  | 86fd7f23c4 | ||
|  | 3668b5bb19 | ||
|  | 89f531cdbc | ||
|  | 35488aef90 | ||
|  | dc31c8b8dd | ||
|  | a205458dbe | ||
|  | 9ccd5cc4cb | ||
|  | 0fb5f3df88 | ||
|  | c82734255b | ||
|  | 19ebd69b93 | ||
|  | c93a83e78a | ||
|  | c968c56913 | ||
|  | 8508785c67 | ||
|  | 9d142723a6 | ||
|  | a0afc5616a | ||
|  | 423d0e353d | ||
|  | a4307cb35d | ||
|  | 0bc628484c | ||
|  | 3bdad36198 | ||
|  | 7a4c9fb40f | ||
|  | 8c5093a395 | ||
|  | 5ccd5980c0 | ||
|  | 60c8aae6d9 | ||
|  | 28a5db91d2 | ||
|  | 770e39d2d2 | ||
|  | 8ca47ad9e0 | ||
|  | 49f1de8217 | ||
|  | 63cc547156 | ||
|  | fcfd0bd852 | ||
|  | 4b6c206598 | ||
|  | e81e7db939 | ||
|  | 91adde3f3d | ||
|  | ef95ef85ff | ||
|  | ff160fa9f3 | ||
|  | 11f37815a3 | ||
|  | 16d9eebd1b | ||
|  | 71c1792637 | ||
|  | 6fc4a48c6f | ||
|  | 550b9743c7 | ||
|  | 36fe063384 | ||
|  | 42c697c37e | ||
|  | 91c53d4f22 | ||
|  | 878826c871 | ||
|  | f9b9b8dbd9 | ||
|  | d20bbf57fe | ||
|  | 6bbc66417a | ||
|  | 336d234bce | ||
|  | a6df633a6f | ||
|  | 8cd69ad3df | ||
|  | ab2881a412 | ||
|  | bce095739f | ||
|  | d872544eb7 | ||
|  | 03e96ce487 | ||
|  | 95dfedd71d | ||
|  | 4cda07c19c | ||
|  | 182f069928 | ||
|  | 647f7c7be8 | ||
|  | 808a2d48ac | ||
|  | 5b39a4831d | ||
|  | 275d96b6c7 | ||
|  | a6f5be63ce | ||
|  | b818519801 | ||
|  | 7a3d548bb6 | ||
|  | dff4386212 | ||
|  | cb4a95bf02 | ||
|  | 3502306b83 | ||
|  | 69767956dc | ||
|  | e8158ec1b1 | ||
|  | 995ca5afb9 | ||
|  | 40c2e53355 | ||
|  | 4c0a0244e5 | ||
|  | e794406321 | ||
|  | e0882a5c68 | ||
|  | 4a7fb7c8cf | ||
|  | eca1b71b75 | ||
|  | 81f0ecdcbe | ||
|  | d549b72975 | ||
|  | 9737ebe1c9 | ||
|  | b91aceeccb | ||
|  | 2bad1b2cd1 | ||
|  | 16cda6232b | ||
|  | ff4fe5e846 | ||
|  | 92c18d4e8a | ||
|  | 644b0ebcf5 | ||
|  | e5a855db7c | ||
|  | bfc14a1925 | ||
|  | b1c611c7fc | ||
|  | 18abf86346 | ||
|  | 9e1b0a2814 | ||
|  | 35db2e7496 | ||
|  | a8593d5b84 | 
| @@ -39,3 +39,4 @@ INSTALL | ||||
| install-sh | ||||
| missing | ||||
| mkinstalldirs | ||||
| libgtopconfig.h | ||||
|   | ||||
							
								
								
									
										1
									
								
								AUTHORS
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								AUTHORS
									
									
									
									
									
								
							| @@ -1,2 +1,3 @@ | ||||
| Martin Baulig (martin@home-of-linux.org) | ||||
| Drazen Kacar (dave@srce.hr) | ||||
| Benoît Dejean (tazforever@dlfp.org) | ||||
|   | ||||
							
								
								
									
										649
									
								
								ChangeLog
									
									
									
									
									
								
							
							
						
						
									
										649
									
								
								ChangeLog
									
									
									
									
									
								
							| @@ -1,10 +1,483 @@ | ||||
| 2004-10-27  Gora Mohanty  <gmohanty@cvs.gnome.org> | ||||
| 2005-01-24  Benoît Dejean  <TazForEver@dlfp.org> | ||||
|  | ||||
| 	* NEWS: | ||||
| 	* configure.in: Released 2.9.90. | ||||
|  | ||||
| 2005-01-24  Benoît Dejean  <TazForEver@dlfp.org> | ||||
|  | ||||
| 	* include/glibtop/procopenfiles.h: | ||||
| 	* sysdeps/linux/procopenfiles.c: | ||||
| 	* sysdeps/stub/procopenfiles.c: UTF-8-ified. | ||||
|  | ||||
| 2005-01-22  Benoît Dejean  <TazForEver@dlfp.org> | ||||
|  | ||||
| 	* examples/openfiles.c: (show_open_files): | ||||
| 	* include/glibtop/procopenfiles.h: added localsock { name } to | ||||
| 	glibtop_open_files_entry. Should not break ABI. | ||||
|  | ||||
| 2005-01-12  Benoît Dejean  <TazForEver@dlfp.org> | ||||
|  | ||||
| 	* configure.in: 2.9.5. | ||||
|  | ||||
| 2005-01-10  Benoît Dejean  <TazForEver@dlfp.org> | ||||
|  | ||||
| 	* NEWS: Released 2.9.4. | ||||
|  | ||||
| 2005-01-10  Benoît Dejean  <TazForEver@dlfp.org> | ||||
|  | ||||
| 	* configure.in: | ||||
| 	* examples/.cvsignore: | ||||
| 	* examples/Makefile.am: | ||||
| 	* examples/openfiles.c: (show_open_files), (main): | ||||
| 	* features.def: | ||||
| 	* include/glibtop/Makefile.am: | ||||
| 	* include/glibtop/command.h: | ||||
| 	* include/glibtop/procopenfiles.h: | ||||
| 	* include/glibtop/sysdeps.h: | ||||
| 	* include/glibtop/union.h: | ||||
| 	* structures.def: | ||||
| 	* sysdeps/linux/Makefile.am: | ||||
| 	* sysdeps/linux/procopenfiles.c: (glibtop_init_proc_open_files_s), | ||||
| 	(get_socket_endpoint), (glibtop_get_proc_open_files_s): | ||||
| 	* sysdeps/stub/Makefile.am: | ||||
| 	* sysdeps/stub/procopenfiles.c: (glibtop_init_proc_open_files_s), | ||||
| 	(glibtop_get_proc_open_files_s): | ||||
| 	 | ||||
| 	New feature by nick@reloco.com.ar (Nicolás Lichtmaier). | ||||
| 	 | ||||
| 	glibtop_get_open_files(pid) -> list of files by process. | ||||
| 	TODO: Add documentation. | ||||
|  | ||||
| 2005-01-03  Benoît Dejean  <TazForEver@dlfp.org> | ||||
|  | ||||
| 	* examples/pprint.c: (pprint_get_cpu): | ||||
| 	* features.def: | ||||
| 	* include/glibtop/cpu.h: | ||||
| 	* sysdeps/linux/cpu.c: (glibtop_init_cpu_s), (glibtop_get_cpu_s): | ||||
| 	Added I/O and IRQ wait time to glibtop_cpu. Closes #160443. | ||||
| 	 | ||||
| 	* configure.in: Post-release bump 2.9.4 | ||||
|  | ||||
| 2004-12-29  Benoît Dejean  <tazforever@dlfp.org> | ||||
|  | ||||
| 	* lib/read_data.c: (glibtop_read_data_l): | ||||
| 	* lib/write.c: (glibtop_write_l): Fixed error messages. | ||||
| 	Closes #162406. | ||||
|  | ||||
| 2004-12-23  Benoît Dejean  <tazforever@dlfp.org> | ||||
|  | ||||
| 	* include/glibtop/error.h: | ||||
| 	* lib/parameter.c: (glibtop_set_parameter_l): | ||||
| 	* lib/read_data.c: (glibtop_read_data_l): | ||||
| 	* sysdeps/common/error.c: (print_server_name), (glibtop_error_vr), | ||||
| 	(glibtop_error_io_vr), (glibtop_warn_vr), (glibtop_warn_io_vr), | ||||
| 	(glibtop_error_r), (glibtop_warn_r), (glibtop_error_io_r), | ||||
| 	(glibtop_warn_io_r), (glibtop_error), (glibtop_warn), | ||||
| 	(glibtop_error_io), (glibtop_warn_io): Turned all macros to functions. | ||||
| 	Marked everything as G_GNUC_PRINTF and fixed format bugs. | ||||
|  | ||||
| 	* sysdeps/common/fsusage.c: Marked some functions as G_GNUC_INTERNAL | ||||
|  | ||||
| 2004-12-20  Benoît Dejean  <tazforever@dlfp.org> | ||||
|  | ||||
| 	* NEWS: | ||||
| 	* configure.in: Released 2.9.3. | ||||
|  | ||||
| 2004-12-10  Benoît Dejean  <tazforever@dlfp.org> | ||||
|  | ||||
| 	* lib/lib.pl: Fixed Argument passing between library and server. | ||||
| 	Thanks everyone. Closes #139809. | ||||
|  | ||||
| 2004-12-06  Benoît Dejean  <tazforever@dlfp.org> | ||||
|  | ||||
| 	* acconfig.h: | ||||
| 	* configure.in: | ||||
| 	* debian/libgtop-dev.files.in: | ||||
| 	* doc/Makefile.am: | ||||
| 	* examples/Makefile.am: | ||||
| 	* examples/third.c: | ||||
| 	* include/glibtop/cpu.h: | ||||
| 	* include/glibtop/fsusage.h: | ||||
| 	* include/glibtop/loadavg.h: | ||||
| 	* include/glibtop/mem.h: | ||||
| 	* include/glibtop/mountlist.h: | ||||
| 	* include/glibtop/msg_limits.h: | ||||
| 	* include/glibtop/netlist.h: | ||||
| 	* include/glibtop/netload.h: | ||||
| 	* include/glibtop/ppp.h: | ||||
| 	* include/glibtop/procargs.h: | ||||
| 	* include/glibtop/prockernel.h: | ||||
| 	* include/glibtop/proclist.h: | ||||
| 	* include/glibtop/procmap.h: | ||||
| 	* include/glibtop/procmem.h: | ||||
| 	* include/glibtop/procsegment.h: | ||||
| 	* include/glibtop/procsignal.h: | ||||
| 	* include/glibtop/procstate.h: | ||||
| 	* include/glibtop/proctime.h: | ||||
| 	* include/glibtop/procuid.h: | ||||
| 	* include/glibtop/sem_limits.h: | ||||
| 	* include/glibtop/shm_limits.h: | ||||
| 	* include/glibtop/swap.h: | ||||
| 	* include/glibtop/sysdeps.h: | ||||
| 	* include/glibtop/uptime.h: | ||||
| 	* po/POTFILES.in: | ||||
| 	* sysdeps/Makefile.am: | ||||
| 	* sysdeps/names/.cvsignore: | ||||
| 	* sysdeps/names/Makefile.am: | ||||
| 	* sysdeps/names/cpu.c: | ||||
| 	* sysdeps/names/fsusage.c: | ||||
| 	* sysdeps/names/loadavg.c: | ||||
| 	* sysdeps/names/mem.c: | ||||
| 	* sysdeps/names/mountlist.c: | ||||
| 	* sysdeps/names/msg_limits.c: | ||||
| 	* sysdeps/names/netlist.c: | ||||
| 	* sysdeps/names/netload.c: | ||||
| 	* sysdeps/names/ppp.c: | ||||
| 	* sysdeps/names/procargs.c: | ||||
| 	* sysdeps/names/prockernel.c: | ||||
| 	* sysdeps/names/proclist.c: | ||||
| 	* sysdeps/names/procmap.c: | ||||
| 	* sysdeps/names/procmem.c: | ||||
| 	* sysdeps/names/procsegment.c: | ||||
| 	* sysdeps/names/procsignal.c: | ||||
| 	* sysdeps/names/procstate.c: | ||||
| 	* sysdeps/names/proctime.c: | ||||
| 	* sysdeps/names/procuid.c: | ||||
| 	* sysdeps/names/sem_limits.c: | ||||
| 	* sysdeps/names/shm_limits.c: | ||||
| 	* sysdeps/names/swap.c: | ||||
| 	* sysdeps/names/sysdeps.c: | ||||
| 	* sysdeps/names/uptime.c: Removed libgtop_names :) | ||||
|  | ||||
| 2004-11-30  Benoît Dejean  <tazforever@dlfp.org> | ||||
|  | ||||
| 	* configure.in: post-release bump to 2.9.1. | ||||
|  | ||||
| 2004-11-30  Benoît Dejean  <tazforever@dlfp.org> | ||||
|  | ||||
| 	* NEWS: | ||||
| 	* configure.in: released 2.9.0 | ||||
|  | ||||
| 2004-11-22  Benoît Dejean  <tazforever@dlfp.org> | ||||
|  | ||||
| 	* AUTHORS: | ||||
| 	* MAINTAINERS: UTF-8-ified. | ||||
| 	 | ||||
| 	* acconfig.h: | ||||
| 	* acinclude.m4: | ||||
| 	* configure.in: | ||||
| 	* kernel/ChangeLog: | ||||
| 	* kernel/sysctl/.cvsignore: | ||||
| 	* kernel/sysctl/Makefile: | ||||
| 	* kernel/sysctl/libgtop.c: | ||||
| 	* kernel/sysctl/libgtop.h: | ||||
| 	* kernel/sysctl/libgtop_syms.c: | ||||
| 	* kernel/sysctl/main.c: | ||||
| 	* kernel/sysctl/patch-2.2.1: | ||||
| 	* kernel/sysctl/patch-2.2.x: | ||||
| 	* kernel/table.h: | ||||
| 	* kernel/table20/Makefile: | ||||
| 	* kernel/table20/README: | ||||
| 	* kernel/table20/entry-i386.S: | ||||
| 	* kernel/table20/kernel.patch: | ||||
| 	* kernel/table20/main.c: | ||||
| 	* kernel/table20/unistd-i386.h: | ||||
| 	* kernel/table20/version.h: | ||||
| 	* kernel/table21/.cvsignore: | ||||
| 	* kernel/table21/Makefile: | ||||
| 	* kernel/table21/README: | ||||
| 	* kernel/table21/entry-i386.S: | ||||
| 	* kernel/table21/main.c: | ||||
| 	* kernel/table21/module.c: | ||||
| 	* kernel/table21/unistd-i386.h: | ||||
| 	* kernel/table21/version.h: | ||||
| 	* kernel/version.h: | ||||
| 	* libgtop-sysdeps.m4: | ||||
| 	* sysdeps/Makefile.am: | ||||
| 	* sysdeps/kernel/.cvsignore: | ||||
| 	* sysdeps/kernel/ChangeLog: | ||||
| 	* sysdeps/kernel/Makefile.am: | ||||
| 	* sysdeps/kernel/close.c: | ||||
| 	* sysdeps/kernel/cpu.c: | ||||
| 	* sysdeps/kernel/glibtop_private.h: | ||||
| 	* sysdeps/kernel/glibtop_server.h: | ||||
| 	* sysdeps/kernel/kernel.h: | ||||
| 	* sysdeps/kernel/kernel.s: | ||||
| 	* sysdeps/kernel/loadavg.c: | ||||
| 	* sysdeps/kernel/mem.c: | ||||
| 	* sysdeps/kernel/msg_limits.c: | ||||
| 	* sysdeps/kernel/netload.c: | ||||
| 	* sysdeps/kernel/open.c: | ||||
| 	* sysdeps/kernel/ppp.c: | ||||
| 	* sysdeps/kernel/procargs.c: | ||||
| 	* sysdeps/kernel/procdata.c: | ||||
| 	* sysdeps/kernel/prockernel.c: | ||||
| 	* sysdeps/kernel/proclist.c: | ||||
| 	* sysdeps/kernel/procmap.c: | ||||
| 	* sysdeps/kernel/procmem.c: | ||||
| 	* sysdeps/kernel/procsegment.c: | ||||
| 	* sysdeps/kernel/procsignal.c: | ||||
| 	* sysdeps/kernel/procstate.c: | ||||
| 	* sysdeps/kernel/proctime.c: | ||||
| 	* sysdeps/kernel/procuid.c: | ||||
| 	* sysdeps/kernel/sem_limits.c: | ||||
| 	* sysdeps/kernel/shm_limits.c: | ||||
| 	* sysdeps/kernel/siglist.c: | ||||
| 	* sysdeps/kernel/swap.c: | ||||
| 	* sysdeps/kernel/sysinfo.c: | ||||
| 	* sysdeps/kernel/uptime.c: Removed kernel patch and implementation. | ||||
|  | ||||
| 2004-11-18  Benoît Dejean  <tazforever@dlfp.org> | ||||
|  | ||||
| 	* Makefile.am: Forgot to ship libgtopconfig.h. | ||||
|  | ||||
| 2004-11-18  Benoît Dejean  <tazforever@dlfp.org> | ||||
| 	 | ||||
| 	* LIBGTOP-VERSION: | ||||
| 	* libgtop-mirror.sh: Removed unused files. | ||||
|  | ||||
| 	* libgtopconfig.h.in: Added. | ||||
| 	* Makefile.am: | ||||
| 	* configure.in: | ||||
| 	* glibtop.h: Added libgtopconfig.h and LIBGTOP_VERSION_CHECK(X, Y, Z). | ||||
| 	This can be used in build tests. | ||||
|  | ||||
| 2004-11-15  Benoît Dejean  <tazforever@dlfp.org> | ||||
|  | ||||
| 	* copyright.txt: Added myself. | ||||
|  | ||||
| 2004-11-13  Benoît Dejean  <tazforever@dlfp.org> | ||||
|  | ||||
| 	* include/glibtop/procargs.h: | ||||
| 	* sysdeps/common/procargs.c: (glibtop_get_proc_argv_l): Removed SUID  | ||||
| 	wrappers because glibtop_proc_argv_l is a client-side function that wraps | ||||
| 	glibtop_get_proc_args. | ||||
|  | ||||
| 2004-11-13  Benoît Dejean  <tazforever@dlfp.org> | ||||
|  | ||||
| 	* structures.def: Removed old functions. OMG, everything is really broken | ||||
| 	here :/ | ||||
|  | ||||
| 2004-11-13  Benoît Dejean  <tazforever@dlfp.org> | ||||
|  | ||||
| 	* configure.in: Bumped to 2.9.0 | ||||
| 	 | ||||
| 	* configure.in: | ||||
| 	* examples/.cvsignore: | ||||
| 	* examples/Makefile.am: | ||||
| 	* examples/netlist.c: (main): | ||||
| 	* features.def: | ||||
| 	* include/glibtop/Makefile.am: | ||||
| 	* include/glibtop/command.h: | ||||
| 	* include/glibtop/netlist.h: | ||||
| 	* include/glibtop/sysdeps.h: | ||||
| 	* include/glibtop/union.h: | ||||
| 	* include/glibtop/version.h: | ||||
| 	* src/daemon/version.c: | ||||
| 	* sysdeps/linux/Makefile.am: | ||||
| 	* sysdeps/linux/netlist.c: (glibtop_init_netlist_s), | ||||
| 	(glibtop_get_netlist_s): | ||||
| 	* sysdeps/names/Makefile.am: | ||||
| 	* sysdeps/names/netlist.c: | ||||
| 	* sysdeps/solaris/Makefile.am: | ||||
| 	* sysdeps/solaris/netlist.c: (glibtop_init_netlist_s), | ||||
| 	(glibtop_get_netlist_s): Added new function glibtop_get_netlist(). | ||||
| 	Implemented for linux and solaris. Doc needed. | ||||
|  | ||||
| 2004-10-11  Benoît Dejean  <tazforever@dlfp.org> | ||||
|  | ||||
| 	* NEWS: Released 2.8.1. | ||||
|  | ||||
| 2004-10-10  Benoît Dejean  <tazforever@dlfp.org> | ||||
|  | ||||
| 	* lib/init.c: Replaced C99 initializer. | ||||
| 	 | ||||
| 	* lib/read.c: (do_read): 1-line cleanup. | ||||
|  | ||||
| 2004-10-09  Benoît Dejean  <tazforever@dlfp.org> | ||||
|  | ||||
| 	* configure.in: Depends on glib 2.4.0 | ||||
|  | ||||
| 2004-09-25  Benoît Dejean  <tazforever@dlfp.org> | ||||
|  | ||||
| 	* glibtop.h: Added missing include <glibtop/close.h>. | ||||
|  | ||||
| 2004-09-22  Benoît Dejean  <tazforever@dlfp.org> | ||||
|  | ||||
| 	* configure.in: CFLAGS: Removed -W, added -Winline. | ||||
|  | ||||
| 2004-09-14  Gora Mohanty  <gmohanty@cvs.gnome.org> | ||||
|                                                                                  | ||||
|         * configure.in: Added 'or' to ALL_LINGUAS. | ||||
|           | ||||
| 2004-06-13  Benoît Dejean  <tazforever@dlfp.org> | ||||
|   | ||||
| 2004-09-13  Benoît Dejean  <tazforever@dlfp.org> | ||||
|  | ||||
| 	* configure.in: version 2.6.1 | ||||
| 	* configure.in: bumped to 2.8.1. | ||||
| 	 | ||||
| 	* sysdeps/common/fsusage.c: | ||||
| 	* sysdeps/common/gnuslib.c: (glibtop_make_connection), | ||||
| 	(connect_to_unix_server), (glibtop_internet_addr): | ||||
| 	* sysdeps/linux/glibtop_server.c: (get_pageshift): | ||||
| 	* sysdeps/linux/glibtop_server.h: | ||||
| 	* sysdeps/linux/open.c: (glibtop_open_s): | ||||
| 	* sysdeps/linux/ppp.c: (is_ISDN_on): Cleanups. Thanks to Kjartan Maraas. | ||||
| 	Closes #151557. | ||||
|  | ||||
| 2004-09-13  Benoît Dejean  <tazforever@dlfp.org> | ||||
|  | ||||
| 	* NEWS: | ||||
| 	* configure.in: 2.8.0 | ||||
|  | ||||
| 2004-08-30  Benoît Dejean  <tazforever@dlfp.org> | ||||
|  | ||||
| 	* NEWS: Released 2.7.92. | ||||
|  | ||||
| 2004-08-28  Benoît Dejean  <tazforever@dlfp.org> | ||||
|  | ||||
| 	* backends/server/command.c: (glibtop_call_i): Zeroed all args.	 | ||||
| 	 | ||||
| 	* configure.in: Bumped soname (thanks to seb128 and Dodji even if i've | ||||
| 	fully understand everything.	 | ||||
| 	 | ||||
| 	* include/glibtop/array.h: | ||||
| 	* include/glibtop/compat_10.h: | ||||
| 	* include/glibtop/glib-arrays.h: | ||||
| 	* include/glibtop/interfaces.h: | ||||
| 	* include/glibtop/proccwd.h: | ||||
| 	* lib/glib-arrays.c: | ||||
| 	* sysdeps/names/interfaces.c: | ||||
| 	* sysdeps/names/proccwd.c: Got rid of never-used / never-implemented files. | ||||
|  | ||||
| 2004-08-28  Akagic Amila  <bono@linux.org.ba> | ||||
|  | ||||
|         * configure.in: Added 'bs' to ALL_LINGUAS. | ||||
|  | ||||
| 2004-08-22  Benoît Dejean  <tazforever@dlfp.org> | ||||
|  | ||||
| 	* lib/command.c: (glibtop_call_l): Zeroed all args. | ||||
|  | ||||
| 2004-08-21  Kjartan Maraas  <kmaraas@gnome.org> | ||||
|  | ||||
| 	* configure.in: Add «nb» to ALL_LINGUAS. | ||||
|  | ||||
| 2004-08-15  Benoît Dejean  <tazforever@dlfp.org> | ||||
|  | ||||
| 	* NEWS: | ||||
| 	* configure.in: LibGTop 2.7.91. | ||||
|  | ||||
| 2004-08-09  Benoît Dejean  <tazforever@dlfp.org> | ||||
|  | ||||
| 	* configure.in: Added HAVE_IFADDRS_H | ||||
| 	* sysdeps/linux/netload.c: (glibtop_get_netload_s): Disable IPv6 | ||||
| 	support is ifaddrs.h is not available. | ||||
|  | ||||
| 	Closes #149376. | ||||
|  | ||||
| 2004-08-09  Benoît Dejean  <tazforever@dlfp.org> | ||||
|  | ||||
| 	* configure.in: Added -gnu89 to CFLAGS. | ||||
|  | ||||
| 	* examples/Makefile.am: Fixed LDFLAGS. | ||||
|  | ||||
| 	* sysdeps/common/fsusage.c: (glibtop_get_fsusage_s): | ||||
| 	* sysdeps/linux/fsusage.c: (linux_2_6_0): | ||||
| 	* sysdeps/linux/proctime.c: (glibtop_get_proc_time_s): | ||||
| 	* sysdeps/linux/sysinfo.c: (init_sysinfo): Fixed C89 issues. | ||||
|  | ||||
| 	Closes #149375. | ||||
|  | ||||
| 2004-08-03  Benoît Dejean  <tazforever@dlfp.org> | ||||
|  | ||||
| 	* NEWS: | ||||
| 	* configure.in: LibGTop 2.7.90. | ||||
|  | ||||
| 2004-07-20  Benoît Dejean  <tazforever@dlfp.org> | ||||
|  | ||||
| 	* configure.in: LibGTop 2.7.5. | ||||
|  | ||||
| 2004-07-20  Benoît Dejean  <tazforever@dlfp.org> | ||||
|  | ||||
| 	* NEWS: | ||||
| 	* configure.in: Released LibGTop 2.7.4. | ||||
|  | ||||
| 2004-07-18  Benoît Dejean  <tazforever@dlfp.org> | ||||
|  | ||||
| 	* doc/reference.texi: | ||||
| 	* include/glibtop/command.h: | ||||
| 	* include/glibtop/glib-arrays.h: | ||||
| 	* include/glibtop/proclist.h: | ||||
| 	* lib/glib-arrays.c: (glibtop_get_proclist_as_array_l): | ||||
| 	* lib/lib.pl: | ||||
| 	* scripts/c_types.pl: | ||||
| 	* src/daemon/main.c: (handle_parent_connection): | ||||
| 	* src/daemon/slave.c: (handle_slave_connection): | ||||
| 	* support/mkstemp.c: | ||||
| 	* sysdeps/aix/proclist.c: (glibtop_get_proclist_s): | ||||
| 	* sysdeps/freebsd/cpu.c: (glibtop_get_cpu_p): | ||||
| 	* sysdeps/freebsd/prockernel.c: (glibtop_get_proc_kernel_p): | ||||
| 	* sysdeps/freebsd/proclist.c: (glibtop_get_proclist_p): | ||||
| 	* sysdeps/freebsd/procmem.c: (glibtop_get_proc_mem_p): | ||||
| 	* sysdeps/kernel/proclist.c: (glibtop_get_proclist_s): | ||||
| 	* sysdeps/linux/proclist.c: (glibtop_get_proclist_s): | ||||
| 	* sysdeps/osf1/proclist.c: (glibtop_get_proclist_p): | ||||
| 	* sysdeps/solaris/proclist.c: (glibtop_get_proclist_s): | ||||
| 	* sysdeps/stub/proclist.c: (glibtop_get_proclist_s): | ||||
| 	* sysdeps/stub_suid/proclist.c: (glibtop_get_proclist_p): | ||||
| 	* sysdeps/sun4/proclist.c: (glibtop_get_proclist_p): Glibify a bit more. | ||||
| 	Closes #147618. | ||||
|  | ||||
| 2004-07-17  Benoît Dejean  <tazforever@dlfp.org> | ||||
|  | ||||
| 	* include/glibtop/fsusage.h: Added read, write. This members provides | ||||
| 	total read and write in bytes since boot_time. | ||||
| 	 | ||||
| 	* include/glibtop/netload.h: Added hwaddress : provides harware address, | ||||
| 	eg MAC address. mtu, address and subnet are now guint32. | ||||
|  | ||||
| 2004-07-15  Benoît Dejean  <tazforever@dlfp.org> | ||||
|  | ||||
| 	* include/glibtop/procstate.h: Added GLIBTOP_PROCESS_DEAD constant. | ||||
|  | ||||
| 2004-07-07  Benoît Dejean  <tazforever@dlfp.org> | ||||
|  | ||||
| 	* include/glibtop/procargs.h: Added new glibtop_get_proc_argv*() functions. | ||||
| 	These are more easier to use than glibtop_get_proc_args*(). They return | ||||
| 	a NULL-terminated array of string (like main's char* argv[]). | ||||
|  | ||||
| 2004-07-07  Benoît Dejean  <tazforever@dlfp.org> | ||||
|  | ||||
| 	* include/glibtop/netinfo.h: | ||||
| 	* structures.def: | ||||
| 	* sysdeps/names/netinfo.c: Removed netinfo.[ch] that were never used. | ||||
|  | ||||
| 2004-07-03  Benoît Dejean  <tazforever@dlfp.org> | ||||
|  | ||||
| 	* sysdeps/names/fsusage.c: Added missing fsusage names. | ||||
|  | ||||
| 2004-07-03  Benoît Dejean  <tazforever@dlfp.org> | ||||
|  | ||||
| 	* glibtop.h: Moved foward declaration of glibtop to break circular | ||||
| 	#includes dependencies. | ||||
|  | ||||
| 2004-06-18  Benoît Dejean  <tazforever@dlfp.org> | ||||
|  | ||||
| 	* include/glibtop/error.h: Also tries C99 __VA_ARGS__ before using | ||||
| 	functions. | ||||
|  | ||||
| 	* include/glibtop/error.h: Moved 8 static error functions to | ||||
| 	sysdeps/common/error.c. This is the end of an big useless code | ||||
| 	bloat : expect ~8KB of object size reduction. | ||||
|  | ||||
| 	* include/glibtop/procuid.h: s/int/gint32/g | ||||
|  | ||||
| 	* lib/errors.c: (glibtop_error_quark): | ||||
| 	* lib/read.c: (do_read), (glibtop_read_l): | ||||
| 	* lib/read_data.c: (glibtop_read_data_l): Minor cleanups. | ||||
|  | ||||
| 	* sysdeps/names/netload.c: | ||||
| 	* include/glibtop/netload.h: Added IPv6 feature : provides address, | ||||
| 	prefix and scope. This breaks the ABI. Not documented yet : check | ||||
| 	this file. | ||||
|  | ||||
| 2004-06-13  Benoît Dejean  <tazforever@dlfp.org> | ||||
|  | ||||
| @@ -15,10 +488,8 @@ | ||||
|  | ||||
| 	* include/glibtop/fsusage.h: block_size is now defined as a guint32 | ||||
| 	instead of a fuzzy gint. | ||||
| 	 | ||||
| 	* lib/sysdeps.c: (glibtop_get_sysdeps_r): Small cleanup. | ||||
|  | ||||
| 2004-06-12  Benoît Dejean  <tazforever@dlfp.org> | ||||
| 	* lib/sysdeps.c: (glibtop_get_sysdeps_r): Small cleanup. | ||||
|  | ||||
| 	* lib/init.c: Added missing initializer. | ||||
|  | ||||
| @@ -30,7 +501,7 @@ | ||||
|  | ||||
| 	* lib/parameter.c: | ||||
| 	* support/popt.c: (poptGetContext): Cleaned. | ||||
| 	 | ||||
|  | ||||
| 	* support/vsnprintf.c: s/strncpy/g_strlcpy | ||||
|  | ||||
| 2004-05-28  Benoît Dejean <TazForEver@free.fr> | ||||
| @@ -143,7 +614,7 @@ | ||||
|  | ||||
| 2004-03-05  Bastien Nocera  <hadess@hadess.net> | ||||
|  | ||||
| 	* include/glibtop/procmap.h: patch by Benoit Dejean <bnet@ifrance.com> | ||||
| 	* include/glibtop/procmap.h: patch by Benoît Dejean <bnet@ifrance.com> | ||||
| 	to break the API, I mean, to make it easier to generate Python bindings | ||||
| 	(Closes: #129701) | ||||
|  | ||||
| @@ -186,8 +657,8 @@ | ||||
|  | ||||
| 2004-02-02  Sebastien Bacher  <seb128@debian.org> | ||||
|  | ||||
| 	* sysdeps/linux/mem.c: (glibtop_get_mem_s): patch from  | ||||
| 	Benoît Dejean <bnet@ifrance.com> to fix libtop_mem.used  | ||||
| 	* sysdeps/linux/mem.c: (glibtop_get_mem_s): patch from | ||||
| 	Benoît Dejean <bnet@ifrance.com> to fix libtop_mem.used | ||||
| 	and glibtop_mem.shared values (Closes: #129863). | ||||
|  | ||||
| Wed Jan  7 02:23:28 2004  Jonathan Blandford  <jrb@gnome.org> | ||||
| @@ -557,7 +1028,7 @@ Wed Jan  7 02:23:28 2004  Jonathan Blandford  <jrb@gnome.org> | ||||
| 2003-01-16  Daniel Yacob <locales@geez.org> | ||||
|  | ||||
| 	* configure.in: added am to ALL_LINGUAS | ||||
| 	 | ||||
|  | ||||
| 2003-01-12  Kevin Vandersloot <kfv101@psu.edu> | ||||
|  | ||||
| 	* configure.in: release 2.0.1 | ||||
| @@ -570,7 +1041,7 @@ Wed Jan  7 02:23:28 2004  Jonathan Blandford  <jrb@gnome.org> | ||||
|  | ||||
| 	* Framework for AIX support | ||||
|  | ||||
| 2002-08-07  Vincent Berger <Vincent.Berger@ext.bull.net>  | ||||
| 2002-08-07  Vincent Berger <Vincent.Berger@ext.bull.net> | ||||
|  | ||||
| 	* support/: Add alloca management for AIX | ||||
| 	* configure.in: correct checking for nm | ||||
| @@ -652,7 +1123,7 @@ Wed Jan  7 02:23:28 2004  Jonathan Blandford  <jrb@gnome.org> | ||||
| 	* acininclude.m4: add back the support stuf but make it really | ||||
| 	work | ||||
|  | ||||
| 	* configure.in: bump version number, add back GNOME_SUPPORT  | ||||
| 	* configure.in: bump version number, add back GNOME_SUPPORT | ||||
| 	check since that was causing a build failure | ||||
|  | ||||
| 	* release 1.90.1 | ||||
| @@ -699,7 +1170,7 @@ Wed Jan  7 02:23:28 2004  Jonathan Blandford  <jrb@gnome.org> | ||||
|  | ||||
| 	* port stable libgtop to GNOME 2.0. Too much to detail. | ||||
| 	pkgconfig is now used. Libs are named libgtop-2.0 etc for | ||||
| 	parallel install.  | ||||
| 	parallel install. | ||||
|  | ||||
| 2001-10-17  Abel Chueng  <maddog@linux.org.hk> | ||||
|  | ||||
| @@ -845,7 +1316,7 @@ Wed Jan  7 02:23:28 2004  Jonathan Blandford  <jrb@gnome.org> | ||||
| 1999-09-22  Kjartan Maraas  <kmaraas@online.no> | ||||
|  | ||||
| 	* configure.in: Added "da" to ALL_LINGUAS. | ||||
| 	 | ||||
|  | ||||
| 1999-09-19  Martin Baulig  <martin@home-of-linux.org> | ||||
|  | ||||
| 	* libgtopConf.sh.in: Added MODULE_VERSION on Miguel's | ||||
| @@ -1070,7 +1541,7 @@ Wed Jan  7 02:23:28 2004  Jonathan Blandford  <jrb@gnome.org> | ||||
| 	contain all possible features. | ||||
|  | ||||
| 	* configure.in: LibGTop will now require GLIB >= 1.1.12. | ||||
| 	 | ||||
|  | ||||
| 1999-01-05  Martin Baulig  <martin@home-of-linux.org> | ||||
|  | ||||
| 	* configure.in: Make it abort if the `dc' utility is not installed. | ||||
| @@ -1236,7 +1707,7 @@ Wed Jan  7 02:23:28 2004  Jonathan Blandford  <jrb@gnome.org> | ||||
| 	here. | ||||
|  | ||||
| 	[NOTE for people porting libgtop: | ||||
| 	 | ||||
|  | ||||
|  	 Please use all 64 bits of the `guint64' and not just 32 - the | ||||
| 	 signal number (as it is used in calls to kill () ...) should be | ||||
| 	 a bit-index into this field; if a process ignores for instance | ||||
| @@ -1417,7 +1888,7 @@ Wed Jan  7 02:23:28 2004  Jonathan Blandford  <jrb@gnome.org> | ||||
|  | ||||
| 	* LIBGTOP-VERSION: Set version number to 0.25.0. There is now really | ||||
| 	a feature freeze until it's released, bug fixes only ... | ||||
| 	 | ||||
|  | ||||
| 	* include/glibtop/procmap (glibtop_map_entry): Added `flags' and | ||||
| 	`filename' fields. | ||||
|  | ||||
| @@ -1425,7 +1896,7 @@ Wed Jan  7 02:23:28 2004  Jonathan Blandford  <jrb@gnome.org> | ||||
| 	* libgtopConf.sh.in: Likewise. | ||||
|  | ||||
| 	* libgtopConf.sh.in: Added `LIBGTOP_EXTRA_LIBS'. | ||||
| 	 | ||||
|  | ||||
| 	* sysdeps/linux/procmap.c: Added implementation. | ||||
|  | ||||
| 1998-08-17  Martin Baulig  <martin@home-of-linux.org> | ||||
| @@ -1515,7 +1986,7 @@ Wed Jan  7 02:23:28 2004  Jonathan Blandford  <jrb@gnome.org> | ||||
| 	* LIBGTOP-VERSION: Added `LIBGTOP_SERVER_VERSION'. | ||||
| 	* src/daemon/gnuserv.c, lib/open.c: Improved version check between | ||||
| 	client and server. | ||||
| 	 | ||||
|  | ||||
| 	* include/glibtop/output.h: Removed. | ||||
|  | ||||
| 	* sysdeps/stub_suid: New directory. This is mainly used as example | ||||
| @@ -1526,7 +1997,7 @@ Wed Jan  7 02:23:28 2004  Jonathan Blandford  <jrb@gnome.org> | ||||
|  | ||||
| 	* sysdeps/osf1/*.c (glibtop_init_<no-suid-feature>_s): New functions. | ||||
| 	(glibtop_init_<suid-feature>_p): New functions. | ||||
| 	 | ||||
|  | ||||
| 1998-08-07  Martin Baulig  <martin@home-of-linux.org> | ||||
|  | ||||
| 	* glibtop.h (_glibtop): New fields `error_method', `sysdeps' and | ||||
| @@ -1702,7 +2173,7 @@ Wed Jan  7 02:23:28 2004  Jonathan Blandford  <jrb@gnome.org> | ||||
|  | ||||
| 	* lib/open.c (glibtop_open_l): Unconditionally calling | ||||
| 	`glibtop_init_s' after server initialization. | ||||
| 	 | ||||
|  | ||||
| 	* lib/lib.awk: Removed references to functions from | ||||
| 	`libgtop_sysdeps_suid.la' to avoid undefined symbols. | ||||
|  | ||||
| @@ -1723,20 +2194,20 @@ Wed Jan  7 02:23:28 2004  Jonathan Blandford  <jrb@gnome.org> | ||||
|  | ||||
| 	* sysdeps/linux/close.c (glibtop_close_s): Renamed this | ||||
| 	function from `glibtop_close_l'. | ||||
| 	 | ||||
|  | ||||
| 	* sysdeps/osf1/Makefile.am (lib_LTLIBRARIES): Added | ||||
| 	`libgtop_sysdeps_suid.la' for the suid server. | ||||
| 	 | ||||
|  | ||||
| 	* sysdeps/osf1/open_suid.c (glibtop_open_p): New file. | ||||
| 	Contains all stuff that was formerly in `open.c'. | ||||
| 	 | ||||
|  | ||||
| 	* sysdeps/osf1/open.c: Moved everything from here into | ||||
| 	the new file `open_suid.c'. | ||||
| 	 | ||||
|  | ||||
| 	* sysdeps/osf1/open.c (glibtop_open_s): New function. | ||||
| 	 | ||||
|  | ||||
| 	* sysdeps/osf1/close_suid.c (glibtop_close_p): New file. | ||||
| 	 | ||||
|  | ||||
| 	* sysdeps/osf1/close.c (glibtop_close_s): New function. | ||||
|  | ||||
| 	* sysdeps/osf1/*.c: Using the new init, open and close | ||||
| @@ -1779,7 +2250,7 @@ Wed Jan  7 02:23:28 2004  Jonathan Blandford  <jrb@gnome.org> | ||||
| 1998-07-18  Martin Baulig  <martin@home-of-linux.org> | ||||
|  | ||||
| 	* lib/{init, open}.c: Added `GLIBTOP_METHOD_PIPE' again. | ||||
| 	 | ||||
|  | ||||
| 	* src/server/main.c: Removed gettext stuff. | ||||
|  | ||||
| 1998-07-17  Martin Baulig  <baulig@Stud.Informatik.uni-trier.de> | ||||
| @@ -1788,10 +2259,10 @@ Wed Jan  7 02:23:28 2004  Jonathan Blandford  <jrb@gnome.org> | ||||
| 	library functions with '_l' prefix instead of directly calling | ||||
| 	sysdeps code with '_r' prefix. This is necessary for client/server | ||||
| 	mode. | ||||
| 	 | ||||
|  | ||||
| 	* lib/lib.awk (glibtop_get_*): Now correctly using | ||||
| 	`(1 << GLIBTOP_SYSDEPS_*)' instead of `GLIBTOP_SYSDEPS_*'. | ||||
| 	 | ||||
|  | ||||
| 	* sysdeps/sun4/proclist.c (glibtop_get_proclist_p): Added | ||||
| 	implementation of that feature. | ||||
|  | ||||
| @@ -1799,7 +2270,7 @@ Wed Jan  7 02:23:28 2004  Jonathan Blandford  <jrb@gnome.org> | ||||
|  | ||||
| 	* sysdeps/sun4/proc_{mem, time, signal, kernel, segment}.c: Added | ||||
| 	some basic implementation; this isn't really working yet. | ||||
| 	 | ||||
|  | ||||
| 	* sysdeps/linux/sem_limits.c: Applied patch from Albert K T Hui | ||||
| 	<avatar@deva.net> for glibc 2.1. | ||||
|  | ||||
| @@ -1819,7 +2290,7 @@ Wed Jan  7 02:23:28 2004  Jonathan Blandford  <jrb@gnome.org> | ||||
| 1998-07-14  Martin Baulig  <baulig@Stud.Informatik.uni-trier.de> | ||||
|  | ||||
| 	* src/daemon/server_config.h.in: Added some comments. | ||||
| 	 | ||||
|  | ||||
| 	* src/daemon/server_config.pl: New file. This is a script you can use | ||||
| 	to create `server_config.h'. It will query you for some configuration | ||||
| 	options. | ||||
| @@ -1844,11 +2315,11 @@ Wed Jan  7 02:23:28 2004  Jonathan Blandford  <jrb@gnome.org> | ||||
| 	* src/daemon/slave.c: New file. | ||||
|  | ||||
| 	* src/daemon/*.c: Done some more work on the daemon. | ||||
| 	 | ||||
|  | ||||
| 	* sysdeps/common/gnuslib.c: Removed IPC stuff. | ||||
| 	 | ||||
|  | ||||
| 	* include/glibtop/gnuserv.h: Removed IPC stuff. | ||||
| 	 | ||||
|  | ||||
| 	* include/glibtop/command.h (glibtop_response_unit): Added | ||||
| 	typedef for `struct _glibtop_response_unit'. | ||||
|  | ||||
| @@ -1878,7 +2349,7 @@ Wed Jan  7 02:23:28 2004  Jonathan Blandford  <jrb@gnome.org> | ||||
| 	* sysdeps/linux/procstate.c: Added missing `fclose'. | ||||
|  | ||||
| 	* include/glibtop/gnuserv.h (UNIX_DOMAIN_SOCKETS): Defining. | ||||
| 	 | ||||
|  | ||||
| 	* include/glibtop/open.h (GLIBTOP_METHOD_UNIX): Added. | ||||
|  | ||||
| 	* lib/init.c: Added new method `GLIBTOP_METHOD_UNIX'. | ||||
| @@ -1966,12 +2437,12 @@ Wed Jan  7 02:23:28 2004  Jonathan Blandford  <jrb@gnome.org> | ||||
| 	* lib/xmalloc.c (g_strdup): New function. | ||||
|  | ||||
| 	* lib/gnuclient.c: Removed. | ||||
| 	 | ||||
|  | ||||
| 	* lib/{command, write, read}.c: Changed client <-> server | ||||
| 	interface to make less system calls. | ||||
|  | ||||
| 	* src/daemon/main.c: Changed server side of interface. | ||||
| 	 | ||||
|  | ||||
| 	* include/glibtop/command.h (struct _glibtop_response): New | ||||
| 	structure to return data from the server to the client. | ||||
|  | ||||
| @@ -2042,7 +2513,7 @@ Wed Jan  7 02:23:28 2004  Jonathan Blandford  <jrb@gnome.org> | ||||
|  | ||||
| 	* include/glibtop/sysdeps.h (glibtop_types_sysdeps): | ||||
| 	Forgot to change declaration on Jun 6. | ||||
| 	 | ||||
|  | ||||
| 	* sysdeps/names/sysdeps.c (glibtop_types_sysdeps): | ||||
| 	Using numeric constants from `types.h' instead of string | ||||
| 	constants; forgot to change this on Jun 6. Added information | ||||
| @@ -2069,30 +2540,30 @@ Wed Jan  7 02:23:28 2004  Jonathan Blandford  <jrb@gnome.org> | ||||
| 1998-06-07  Martin Baulig  <martin@home-of-linux.org> | ||||
|  | ||||
| 	* examples/ChangeLog: New file. | ||||
| 	 | ||||
|  | ||||
| 	* macros/gnome-libgtop-sysdeps.m4: Include | ||||
| 	`glibtop_machine.h' for Linux. | ||||
| 	 | ||||
|  | ||||
| 	* sysdeps/linux/glibtop_machine.h: New file. | ||||
| 	 | ||||
|  | ||||
| 	* sysdeps/linux/*.c: Performance optimizations. We now use | ||||
| 	`open' and `read' instead of `fopen' and `fscanf'. | ||||
| 	 | ||||
|  | ||||
| 	* *.[ch]: Using single underscore instead of two underscores | ||||
| 	for function prefixes (regexp: ``s,__([rspl])\b,_$1,g'') to | ||||
| 	avoid ambiguity with mangled C++ names. | ||||
| 	 | ||||
|  | ||||
| 1998-06-06  Martin Baulig  <martin@home-of-linux.org> | ||||
|  | ||||
| 	* sysdeps/osf1/glibtop_server.h: New file. | ||||
| 	 | ||||
|  | ||||
| 	* sysdeps/osf1/*.c: renamed all functions implementing | ||||
| 	features that don't need to be suid to '__s'. | ||||
|  | ||||
| 	* sysdeps/names/procdata.c: Removed that file. | ||||
| 	 | ||||
|  | ||||
| 	* include/glibtop/*.h (glibtop_types_*): Changed declaration. | ||||
| 	 | ||||
|  | ||||
| 	* glibtop.h: Added `#include <types.h>'. | ||||
|  | ||||
| 	* include/glibtop/types.h: New file - numeric constants | ||||
| @@ -2118,10 +2589,10 @@ Wed Jan  7 02:23:28 2004  Jonathan Blandford  <jrb@gnome.org> | ||||
| 1998-06-03  Martin Baulig  <baulig@merkur.uni-trier.de> | ||||
|  | ||||
| 	* libgtop.spec: New file. | ||||
| 	 | ||||
|  | ||||
| 	* Makefile.am (EXTRA_DIST): Added `autogen.sh' and | ||||
| 	`libgtop.spec'. | ||||
| 	 | ||||
|  | ||||
| 	* configure.in (LIBGTOP_INCS): is now identically to | ||||
| 	`LIBGTOP_GUILE_INCS'. | ||||
|  | ||||
| @@ -2158,7 +2629,7 @@ Wed Jan  7 02:23:28 2004  Jonathan Blandford  <jrb@gnome.org> | ||||
|  | ||||
| 	* NEWS: added more detailed description of today's and | ||||
| 	yesterday's changes. | ||||
| 	 | ||||
|  | ||||
| 	* include/glibtop/*.h: to use the ChangeLog entry from May 28: | ||||
| 	'__l' is a function defined in the client part; | ||||
| 	'__s' is a function defined in the sysdeps part and | ||||
| @@ -2191,26 +2662,26 @@ Wed Jan  7 02:23:28 2004  Jonathan Blandford  <jrb@gnome.org> | ||||
| 	* 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  | ||||
|  | ||||
| 	* 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 | ||||
| @@ -2276,9 +2747,9 @@ Wed Jan  7 02:23:28 2004  Jonathan Blandford  <jrb@gnome.org> | ||||
| 	'libgtop_use_machine_h', 'libgtop_guile_found', | ||||
| 	'libgtop_want_names', 'libgtop_want_guile_names', | ||||
| 	'libgtop_want_examples'. | ||||
| 	 | ||||
|  | ||||
| 	* gtopConf.sh.in: renamed to 'libgtopConf.sh.in'. | ||||
| 	 | ||||
|  | ||||
| 	* acinclude.m4 (AC_LC_SYSDEPS): rewrote that macro - | ||||
| 	moved some of the code to 'macros/gnome-libgtop-sysdeps.m4'; | ||||
| 	renamed variables: look at the ChangeLog entry for the | ||||
| @@ -2341,7 +2812,7 @@ Wed Jan  7 02:23:28 2004  Jonathan Blandford  <jrb@gnome.org> | ||||
|  | ||||
| 	* NEWS: added more detailed description of | ||||
| 	today's changes. | ||||
| 	 | ||||
|  | ||||
| 	* examples/third.c: added required check for | ||||
| 	'GLIBGTOP_GUILE_NAMES'. | ||||
|  | ||||
| @@ -2375,20 +2846,20 @@ Wed Jan  7 02:23:28 2004  Jonathan Blandford  <jrb@gnome.org> | ||||
|  | ||||
| 	* sysdeps/osf1/procuid.c (glibtop_get_proc_uid__r): | ||||
| 	added implementation for DEC OSF/1. | ||||
| 	 | ||||
|  | ||||
| 	* sysdeps/sun4/uptime.c: forgot to checkin | ||||
|  | ||||
| 	* sysdeps/sun4/loadavg.c: forgot to checkin | ||||
| 	 | ||||
|  | ||||
| 	* sysdeps/osf1/uptime.c: forgot to checkin | ||||
| 	 | ||||
|  | ||||
| 	* sysdeps/osf1/loadavg.c: forgot to checkin | ||||
|  | ||||
| 1998-05-19  Martin Baulig  <baulig@merkur.uni-trier.de> | ||||
|  | ||||
| 	* sysdeps/stub/uptime.c: forgot this file all the | ||||
| 	time - stub for glibtop_uptime | ||||
| 	 | ||||
|  | ||||
| 	* sysdeps/stub/loadavg.c: forgot this file all the | ||||
|  	time - stub for glibtop_loadavg | ||||
|  | ||||
| @@ -2407,7 +2878,7 @@ Wed Jan  7 02:23:28 2004  Jonathan Blandford  <jrb@gnome.org> | ||||
|  | ||||
| 	* include/glibtop: added references to | ||||
| 	'glibtop_types_* []' and 'glibtop_guile_types_*'. | ||||
| 		 | ||||
|  | ||||
| 	* sysdeps/guile/names: added implementations of | ||||
| 	'glibtop_types_*' and 'glibtop_description_*'. | ||||
|  | ||||
| @@ -2422,7 +2893,7 @@ Wed Jan  7 02:23:28 2004  Jonathan Blandford  <jrb@gnome.org> | ||||
| 	* sysdeps/guile: all guile functions now return | ||||
| 	the 'flags' member as first element of the list. | ||||
|  | ||||
| 	* include/glibtop/procstate.h (glibtop_proc_state):  | ||||
| 	* include/glibtop/procstate.h (glibtop_proc_state): | ||||
| 	added 'uid' and 'gid' members; the library tries hard | ||||
| 	to set those values; it will never set the corresponding | ||||
| 	'flags' value unless the values are correct. | ||||
| @@ -2464,7 +2935,7 @@ Wed Jan  7 02:23:28 2004  Jonathan Blandford  <jrb@gnome.org> | ||||
|  | ||||
| 	* sysdeps/guile/sysdeps.c: changes to reflect the | ||||
| 	new flags of procdata. | ||||
| 	 | ||||
|  | ||||
| 	* sysdeps/common/sysdeps.c: changes to reflect the | ||||
| 	new flags of procdata. | ||||
|  | ||||
| @@ -2524,9 +2995,9 @@ Wed Jan  7 02:23:28 2004  Jonathan Blandford  <jrb@gnome.org> | ||||
| 	* src/mico/proclist.idl: new file - simple mico interface | ||||
|  | ||||
| 	* src/version.c: moved to src/server | ||||
| 	 | ||||
|  | ||||
| 	* src/output.c: moved to src/server | ||||
| 	 | ||||
|  | ||||
| 	* src/main.c: moved to src/server | ||||
|  | ||||
| 1998-04-11  Martin Baulig  <martin@home-of-linux.org> | ||||
| @@ -2596,7 +3067,7 @@ Wed Jan  7 02:23:28 2004  Jonathan Blandford  <jrb@gnome.org> | ||||
| 	this directory | ||||
|  | ||||
| 	* sysdeps/common/sem_limits.c: moved to sysdeps/names | ||||
| 	 | ||||
|  | ||||
| 	* sysdeps/common/msg_limits.c: moved to sysdeps/names | ||||
|  | ||||
| 	* sysdeps/common/sem_limits.c: moved to sysdeps/names | ||||
| @@ -2630,25 +3101,25 @@ Wed Jan  7 02:23:28 2004  Jonathan Blandford  <jrb@gnome.org> | ||||
| 		some arbitrary data | ||||
|  | ||||
| 	* lib/proclist.c: new file - library function for glibtop_proclist | ||||
| 	 | ||||
|  | ||||
| 	* sysdeps/linux/proclist.c: new file - implementation for glibtop_proclist | ||||
| 	 | ||||
|  | ||||
| 	* sysdeps/stub/proclist.c: new file - stub for glibtop_proclist | ||||
| 	 | ||||
|  | ||||
| 	* include/glibtop/proclist.h: new file - glibtop_proclist | ||||
|  | ||||
| 	* include/glibtop/union.h: new file | ||||
|  | ||||
| 	* lib/read_data.c: new file | ||||
| 	 | ||||
|  | ||||
| 	* include/glibtop/read_data.h: new file | ||||
|  | ||||
| 	* sysdeps/common/xmalloc.c: new file - moved here from lib | ||||
| 	 | ||||
|  | ||||
| 	* sysdeps/common/error.c: new file - moved here from lib | ||||
| 	 | ||||
|  | ||||
| 	* lib/xmalloc.c: moved to sysdeps/common | ||||
| 	 | ||||
|  | ||||
| 	* lib/error.c: moved to sysdeps/common | ||||
|  | ||||
| 1998-04-05  Martin Baulig  <martin@home-of-linux.org> | ||||
| @@ -2685,9 +3156,9 @@ Wed Jan  7 02:23:28 2004  Jonathan Blandford  <jrb@gnome.org> | ||||
| 	* sysdeps/common/msg_limits.c: new file - limit names | ||||
|  | ||||
| 	* sysdeps/common/sem_limits.c: new file - limit names | ||||
| 	 | ||||
|  | ||||
| 	* include/glibtop/shm_limits.h: new file - glibtop_shm_limits | ||||
| 	 | ||||
|  | ||||
| 	* include/glibtop/msg_limits.h: new file - glibtop_msg_limits | ||||
|  | ||||
| 	* include/glibtop/sem_limits.h: new file - glibtop_sem_limits | ||||
| @@ -2712,13 +3183,13 @@ Wed Jan  7 02:23:28 2004  Jonathan Blandford  <jrb@gnome.org> | ||||
|  | ||||
| 	* lib/ipc_limits.c: new file - library function for | ||||
| 		glibtop_ipc_limits | ||||
| 	 | ||||
|  | ||||
| 	* sysdeps/linux/ipc_limits.c: new file - implementation for | ||||
| 		glibtop_ipc_limits | ||||
| 	 | ||||
|  | ||||
| 	* sysdeps/stub/ipc_limits.c: new file - stub for | ||||
| 		glibtop_ipc_limits | ||||
| 	 | ||||
|  | ||||
| 	* include/glibtop/ipc_limits.h: new file - glibtop_ipc_limits - | ||||
| 		sysv ipc limits | ||||
|  | ||||
| @@ -2726,7 +3197,7 @@ Wed Jan  7 02:23:28 2004  Jonathan Blandford  <jrb@gnome.org> | ||||
|  | ||||
| 	* lib/uptime.c: new file - library function for | ||||
| 		glibtop_uptime | ||||
| 	 | ||||
|  | ||||
| 	* lib/loadavg.c: new file - library function for | ||||
| 		glibtop_loadavg | ||||
|  | ||||
| @@ -2750,14 +3221,14 @@ Wed Jan  7 02:23:28 2004  Jonathan Blandford  <jrb@gnome.org> | ||||
|  | ||||
| 	* sysdeps/stub/sysinfo.c: removed - splitted into | ||||
| 		uptime.c and loadavg.c | ||||
| 	 | ||||
|  | ||||
| 	* src/main.c: added GLIBTOP_CMND_UPTIME and | ||||
| 		GLIBTOP_CMND_LOADAVG implementation | ||||
|  | ||||
| 	* include/glibtop/loadavg.h: new file - glibtop_loadavg | ||||
| 	 | ||||
|  | ||||
| 	* include/glibtop/uptime.h: new file - glibtop_uptime | ||||
| 	 | ||||
|  | ||||
| 	* include/glibtop/loadavg.h: removed - splitted into | ||||
| 		uptime.h and loadavg.h | ||||
|  | ||||
| @@ -2766,10 +3237,10 @@ Wed Jan  7 02:23:28 2004  Jonathan Blandford  <jrb@gnome.org> | ||||
| 	* lib/sysdeps.c: new file - library function for glibtop_sysdeps | ||||
|  | ||||
| 	* sysdeps/linux/sysdeps.c: new file - copied from sysdeps/stub | ||||
| 	 | ||||
|  | ||||
| 	* sysdeps/stub/sysdeps.c: new file - implementation for glibtop_sysinfo - | ||||
| 		this is really the implementation and not just a stub | ||||
| 	 | ||||
|  | ||||
| 	* src/sysdeps.c: moved to sysdeps/stub - this file is now part | ||||
| 		of the library | ||||
|  | ||||
|   | ||||
| @@ -1,28 +0,0 @@ | ||||
| # 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=90 | ||||
| LIBGTOP_MICRO_VERSION=0 | ||||
|  | ||||
| LIBGTOP_INTERFACE_AGE=0 | ||||
| LIBGTOP_BINARY_AGE=0 | ||||
| # you can set this to `-snap' for instance to create | ||||
| # a `libgtop-1.x.y-snap.tar.gz' tarball. | ||||
| LIBGTOP_VERSION_SUFFIX= | ||||
|  | ||||
| # 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$LIBGTOP_VERSION_SUFFIX | ||||
| PACKAGE=libgtop | ||||
| @@ -1,2 +1,3 @@ | ||||
| Email: martin@home-of-linux.org | ||||
| Email: dave@srce.hr | ||||
| Benoît Dejean (tazforever@dlfp.org) | ||||
|   | ||||
| @@ -1,13 +1,13 @@ | ||||
|  | ||||
| SUBDIRS = po misc include sysdeps lib src examples doc | ||||
|  | ||||
| libgtopinclude_HEADERS = glibtop.h | ||||
| libgtopinclude_HEADERS = glibtop.h libgtopconfig.h | ||||
| libgtopincludedir = $(includedir)/libgtop-2.0 | ||||
|  | ||||
| EXTRA_DIST = autogen.sh libgtop.spec.in copyright.txt \ | ||||
| 	LIBGTOP-VERSION features.def \ | ||||
| 	 features.def libgtopconfig.h.in \ | ||||
| 	libgtop-sysdeps.m4 README \ | ||||
| 	libgtop-mirror.sh libgtop-2.0.pc.in acinclude.m4 | ||||
| 	 libgtop-2.0.pc.in acinclude.m4 | ||||
|  | ||||
| dist-hook: | ||||
| 	cp libgtop.spec $(distdir) | ||||
|   | ||||
							
								
								
									
										74
									
								
								NEWS
									
									
									
									
									
								
							
							
						
						
									
										74
									
								
								NEWS
									
									
									
									
									
								
							| @@ -1,17 +1,69 @@ | ||||
| July 11, 2004: | ||||
| January 24, 2004: Overview of Changes from 2.9.4 to 2.9.90 | ||||
| ========================================================== | ||||
| * Updated Linux support. | ||||
|  | ||||
| January 10, 2004: Overview of Changes from 2.9.3 to 2.9.4 | ||||
| ========================================================= | ||||
| * New glibtop_proc_open_files nick@reloco.com.ar (Nicolás Lichtmaier). | ||||
| * Updated AIX support (Christophe Belle). | ||||
|  | ||||
| December 20, 2004: Overview of Changes from 2.9.0 to 2.9.3 | ||||
| ========================================================== | ||||
| * Removed libgtop_names. | ||||
| * Fixed Argument passing between library and server. #139809. | ||||
| * *BSD updated by marcus@freebsd.org (Joe Marcus Clarke). | ||||
| * glibtop_get_mountlist(False) now ignores 'unknown' fs. | ||||
|  | ||||
|  | ||||
| November 30, 2004: Overview of Changes from 2.8.1 to 2.9.0 | ||||
| ========================================================= | ||||
| * glibtop_get_netload : Fixed segfault on linux with ppp devices. | ||||
| * NEW glibtop_get_netlist : retrieves the list of all available interfaces. | ||||
| * NEW LIBGTOP_CHECK_VERSION(major, minor, micro) | ||||
| * Removed dead kernel patch and implementation. | ||||
| * Cleanups on Linux and Solaris. | ||||
|  | ||||
| October 11, 2004: Overview of Changes from 2.8.0 to 2.8.1 | ||||
| ========================================================= | ||||
| * Improved Solaris and AIX support. | ||||
|  | ||||
|  | ||||
| August 13, 2004: Overview of Changes from 2.7.92 to 2.8.0 | ||||
| ========================================================= | ||||
| * No changes | ||||
|  | ||||
|  | ||||
| August 30, 2004: | ||||
| =============== | ||||
| * Applied some *BSD patches. | ||||
| * Removed old files. | ||||
|  | ||||
|  | ||||
| August 15, 2004: | ||||
| =============== | ||||
| * Fixed compilation with C89-only compilers and old libc. | ||||
|  | ||||
|  | ||||
| August 3, 2004: | ||||
| ============== | ||||
| * Some cleanups. | ||||
| * Fixed the behaviour of some linux proc_*() functions. | ||||
| * Updated the documentation. | ||||
|  | ||||
| * Released LibGTop 2.6.1 | ||||
|  | ||||
|   - code cleanups. | ||||
|    | ||||
|   - glibtop_mountlist()'s all_fs parameter now works. | ||||
|    | ||||
|   - glibtop_uptime.boot_time is set on every arch. | ||||
|    | ||||
|   - linux SMP support is fixed. | ||||
|    | ||||
|   - Replaced unsafe strcpy by g_strlcpy. | ||||
| July 19, 2004: Overview of Changes from 2.6.1 to 2.7.4 | ||||
| ====================================================== | ||||
| * Plenty of code cleanups. Uninlined a lot of functions. ~5-10KB object size | ||||
|   reduction. | ||||
| * Glibify a bit more. | ||||
| * API changes: | ||||
|  - glibtop_fsusage provides total read and writes since boot_time. | ||||
|  - glibtop_netload provides hardware address. IPv6 enable. | ||||
|  - Added glibtop_get_proc_argv. | ||||
|  | ||||
| Work in progress : | ||||
| * Finish glibtop_fsusage implementation for Linux. | ||||
| * Some fuctions don't conform to the documentation, e.g. proctime. | ||||
|  | ||||
| March 11, 2004: | ||||
| =============== | ||||
|   | ||||
| @@ -131,7 +131,6 @@ | ||||
|  | ||||
| #undef HAVE_GLIBTOP_MACHINE_H | ||||
|  | ||||
| #undef GLIBTOP_NAMES | ||||
| #undef GLIBTOP_GUILE | ||||
| #undef GLIBTOP_GUILE_NAMES | ||||
| #undef GLIBTOP_EXAMPLES | ||||
| @@ -139,7 +138,6 @@ | ||||
|  | ||||
| #undef NEED_LIBGTOP | ||||
|  | ||||
| #undef HAVE_LINUX_TABLE | ||||
| #undef HAVE_LIBGTOP_SMP | ||||
|  | ||||
| #undef HAVE_XAUTH | ||||
|   | ||||
							
								
								
									
										60
									
								
								acinclude.m4
									
									
									
									
									
								
							
							
						
						
									
										60
									
								
								acinclude.m4
									
									
									
									
									
								
							| @@ -586,53 +586,6 @@ dnl                              define 'HAVE_GLIBTOP_MACHINE_H'. | ||||
| dnl * 'libgtop_need_server'    - is the server really needed? Defines 'NEED_LIBGTOP' | ||||
| dnl                              if true; defines conditional 'NEED_LIBGTOP'. | ||||
|  | ||||
| AC_DEFUN([LIBGTOP_HACKER_TESTS],[ | ||||
| 	AC_REQUIRE([AC_CANONICAL_HOST]) | ||||
|  | ||||
| 	AC_ARG_WITH(linux-table, | ||||
|       [  --with-linux-table      Use the table () function from Martin Baulig], | ||||
| 	[linux_table="$withval"],[linux_table=auto]) | ||||
| 	case "$host_os" in | ||||
| 	linux*) | ||||
| 	  if test $linux_table = yes ; then | ||||
| 	    AC_CHECK_HEADER(linux/table.h, linux_table=yes, linux_table=no) | ||||
| 	  elif test $linux_table = auto ; then | ||||
| 	    AC_MSG_CHECKING(for table function in Linux Kernel) | ||||
| 	    AC_TRY_RUN([ | ||||
| #include <stdio.h> | ||||
| #include <stdlib.h> | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <linux/unistd.h> | ||||
| #include <linux/table.h> | ||||
|  | ||||
| #include <syscall.h> | ||||
|  | ||||
| static inline _syscall3 (int, table, int, type, union table *, tbl, const void *, param); | ||||
|  | ||||
| int | ||||
| main (void) | ||||
| { | ||||
| 	union table tbl; | ||||
| 	int ret; | ||||
|  | ||||
| 	ret = table (TABLE_VERSION, NULL, NULL); | ||||
|  | ||||
| 	if (ret == -1) | ||||
| 		exit (-errno); | ||||
|  | ||||
| 	exit (ret < 1 ? ret : 0); | ||||
| } | ||||
| ], linux_table=yes, linux_table=no, linux_table=no) | ||||
| 	    AC_MSG_RESULT($linux_table) | ||||
| 	  fi | ||||
| 	  if test $linux_table = yes ; then | ||||
| 	    AC_DEFINE(HAVE_LINUX_TABLE) | ||||
| 	  fi | ||||
| 	  ;; | ||||
| 	esac | ||||
| ]) | ||||
|  | ||||
| AC_DEFUN([GNOME_LIBGTOP_SYSDEPS],[ | ||||
| 	AC_REQUIRE([AC_CANONICAL_HOST]) | ||||
|  | ||||
| @@ -652,11 +605,9 @@ AC_DEFUN([GNOME_LIBGTOP_SYSDEPS],[ | ||||
|  | ||||
| 	AM_CONDITIONAL(HACKER_MODE, test x"$hacker_mode" = xyes) | ||||
|  | ||||
| 	linux_table=auto | ||||
| 	if test x$hacker_mode = xyes ; then | ||||
| 	  LIBGTOP_HACKER_TESTS | ||||
| 	fi | ||||
| 	AM_CONDITIONAL(LINUX_TABLE, test $linux_table = yes) | ||||
|  | ||||
| 	AC_ARG_WITH(libgtop-smp, | ||||
| 	[  --with-libgtop-smp      Enable SMP support (default-auto)],[ | ||||
| @@ -688,14 +639,9 @@ AC_DEFUN([GNOME_LIBGTOP_SYSDEPS],[ | ||||
|  | ||||
| 	case "$host_os" in | ||||
| 	linux*) | ||||
| 	  if test x$linux_table = xyes ; then | ||||
| 	    libgtop_sysdeps_dir=kernel | ||||
| 	    libgtop_use_machine_h=no | ||||
| 	  else | ||||
| 	    libgtop_sysdeps_dir=linux | ||||
| 	    libgtop_use_machine_h=no | ||||
| 	    libgtop_have_sysinfo=yes | ||||
| 	  fi | ||||
| 	  libgtop_sysdeps_dir=linux | ||||
| 	  libgtop_use_machine_h=no | ||||
| 	  libgtop_have_sysinfo=yes | ||||
| 	  libgtop_need_server=no | ||||
| 	  ;; | ||||
| 	freebsd*|netbsd*|openbsd*|bsdi*) | ||||
|   | ||||
| @@ -1,3 +1,7 @@ | ||||
| 2004-08-22  Benoît Dejean  <tazforever@dlfp.org> | ||||
|  | ||||
| 	* server.c: (handle_slave_connection): Replaced //comment by /*C89*/.  | ||||
|  | ||||
| 2004-03-09  Bastien Nocera  <hadess@hadess.net> | ||||
|  | ||||
| 	* command.c: (glibtop_call_i): | ||||
| @@ -5,7 +9,7 @@ | ||||
| 	* marshal.pl: | ||||
| 	* read_data.c: (glibtop_read_data_i): | ||||
| 	* server.c: (handle_slave_connection): fix g_malloc usage on non-Linux | ||||
| 	platforms (patch by Benoit Dejean <bnet@ifrance.com>) | ||||
| 	platforms (patch by Benoît Dejean <bnet@ifrance.com>) | ||||
|  | ||||
| 2003-10-20  Bastien Nocera  <hadess@hadess.net> | ||||
|  | ||||
|   | ||||
| @@ -34,14 +34,8 @@ glibtop_call_i (glibtop_server *server, backend_server_private *priv, | ||||
| 		size_t recv_size, void *recv_ptr, | ||||
| 		int *retval_ptr) | ||||
| { | ||||
|     glibtop_command cmnd; | ||||
|     glibtop_response resp; | ||||
| #if 0 | ||||
|     int retval; | ||||
| #endif | ||||
|  | ||||
|     memset (&cmnd, 0, sizeof (glibtop_command)); | ||||
|     memset (&resp, 0, sizeof (glibtop_response)); | ||||
|     glibtop_command cmnd = {0}; | ||||
|     glibtop_response resp = {0}; | ||||
|  | ||||
|     cmnd.command = command; | ||||
|  | ||||
|   | ||||
| @@ -109,7 +109,7 @@ handle_slave_connection (int input, int output) | ||||
|     glibtop_command _cmnd, *cmnd = &_cmnd; | ||||
|     glibtop *server = glibtop_global_server; | ||||
|  | ||||
|     // glibtop_send_version_i (glibtop_global_server, output); | ||||
|     /* glibtop_send_version_i (glibtop_global_server, output); */ | ||||
|  | ||||
|     while (do_read (input, cmnd, sizeof (glibtop_command))) { | ||||
| 	size_t recv_size = 0, send_size = 0, recv_data_size = 0; | ||||
|   | ||||
							
								
								
									
										33
									
								
								configure.in
									
									
									
									
									
								
							
							
						
						
									
										33
									
								
								configure.in
									
									
									
									
									
								
							| @@ -7,13 +7,13 @@ AM_CONFIG_HEADER(config.h) | ||||
| AC_CANONICAL_SYSTEM | ||||
|  | ||||
| LIBGTOP_MAJOR_VERSION=2 | ||||
| LIBGTOP_MINOR_VERSION=6 | ||||
| LIBGTOP_MICRO_VERSION=1 | ||||
| LIBGTOP_MINOR_VERSION=9 | ||||
| LIBGTOP_MICRO_VERSION=90 | ||||
| LIBGTOP_VERSION=$LIBGTOP_MAJOR_VERSION.$LIBGTOP_MINOR_VERSION.$LIBGTOP_MICRO_VERSION | ||||
| AM_INIT_AUTOMAKE(libgtop, $LIBGTOP_VERSION) | ||||
|  | ||||
| dnl  increment if the interface has additions, changes, removals. | ||||
| LIBGTOP_CURRENT=3 | ||||
| LIBGTOP_CURRENT=5 | ||||
|  | ||||
| dnl  increment any time the source changes; set to | ||||
| dnl  0 if you increment CURRENT | ||||
| @@ -22,7 +22,7 @@ LIBGTOP_REVISION=0 | ||||
| dnl  increment if any interfaces have been added; set to 0 | ||||
| dnl  if any interfaces have been removed. removal has | ||||
| dnl  precedence over adding, so set to 0 if both happened. | ||||
| LIBGTOP_AGE=1 | ||||
| LIBGTOP_AGE=0 | ||||
|  | ||||
| # you can set this to `-snap' for instance to create | ||||
| # a `libgtop-1.x.y-snap.tar.gz' tarball. | ||||
| @@ -112,7 +112,6 @@ if test x$build_inodedb = xyes ; then | ||||
|   AC_DEFINE(GLIBTOP_INODEDB) | ||||
| fi | ||||
|  | ||||
| AC_DEFINE(GLIBTOP_NAMES) | ||||
|  | ||||
| if test x$libgtop_smp = xyes ; then | ||||
|   smp_examples='smp' | ||||
| @@ -123,7 +122,7 @@ else | ||||
| fi | ||||
|  | ||||
| if test "x$enable_static" != xno; then | ||||
|   static_targets="first_static second_static mountlist_static procmap_static netload_static sysdeps_static timings_static $smp_static_examples" | ||||
|   static_targets="first_static second_static mountlist_static procmap_static netload_static sysdeps_static timings_static $smp_static_examples pprint_static procargs_static df_static netlist netlist_static openfiles_static" | ||||
| else | ||||
|   static_targets="" | ||||
| fi | ||||
| @@ -134,7 +133,7 @@ AM_CONDITIONAL(ENABLE_SHARED, test x$enable_static = xyes) | ||||
| AC_SUBST(static_targets) | ||||
| AC_SUBST(smp_examples) | ||||
|  | ||||
| GLIB_REQUIRED=2.0.0 | ||||
| GLIB_REQUIRED=2.4.0 | ||||
|  | ||||
| PKG_CHECK_MODULES(GLIB, glib-2.0 >= $GLIB_REQUIRED) | ||||
| AC_SUBST(GLIB_CFLAGS) | ||||
| @@ -148,6 +147,11 @@ else | ||||
|    AC_MSG_ERROR([libgtop requires the popt development libraries]) | ||||
| fi | ||||
|  | ||||
| AC_CHECK_HEADER(ifaddrs.h, [HAVE_IFADDRS_H=yes], [HAVE_IFADDRS_H=no]) | ||||
| if test x$HAVE_IFADDRS_H = xyes ; then | ||||
| 	AC_DEFINE(HAVE_IFADDRS_H, 1, [defined if you have ifaddrs.h]) | ||||
| fi | ||||
|  | ||||
| dnl Checks for typedefs, structures, and compiler characteristics. | ||||
| AC_C_CONST | ||||
| AC_C_INLINE | ||||
| @@ -250,7 +254,7 @@ AC_TYPE_SIGNAL | ||||
| AC_FUNC_STRFTIME | ||||
| AC_CHECK_FUNCS(getcwd gettimeofday getwd putenv strdup strtoul uname) | ||||
|  | ||||
| ALL_LINGUAS="am ar az be bg bn ca cs cy da de el en_CA en_GB es et eu fa fi fr ga gl gu he hi hr hu id it ja ko lt lv mk ml mn ms nl nn no or pa pl pt pt_BR ro ru sk sl sq sr sr@Latn sv ta tr uk vi zh_CN zh_TW" | ||||
| ALL_LINGUAS="am ar az be bg bn bs ca cs cy da de el en_CA en_GB es et eu fa fi fr ga gl gu he hi hr hu id it ja ko lt lv mi mk ml mn ms nb ne nl nn no or pa pl pt pt_BR ro ru sk sl sq sr sr@Latn sv ta tr uk vi zh_CN zh_TW" | ||||
|  | ||||
| GETTEXT_PACKAGE=libgtop-2.0 | ||||
| AC_SUBST(GETTEXT_PACKAGE) | ||||
| @@ -333,12 +337,8 @@ fi | ||||
| LIBGTOP_EXTRA_LIBS="$LIBGTOP_EXTRA_LIBS $GLIB_LIBS" | ||||
|  | ||||
| LIBGTOP_LIBS="$LIBGTOP_LIBS" | ||||
| LIBGTOP_NAMES_LIBS="$LIBGTOP_LIBS" | ||||
|  | ||||
| LIBGTOP_LIBS="$LIBGTOP_LIBS"  | ||||
| LIBGTOP_NAMES_LIBS="$LIBGTOP_NAMES_LIBS" | ||||
|  | ||||
| LIBGTOP_NAMES_INCS="$LIBGTOP_INCS -DGLIBTOP_NAMES" | ||||
|  | ||||
| machine_incs="-I\$(top_srcdir)/sysdeps/$sysdeps_dir" | ||||
|  | ||||
| @@ -346,7 +346,9 @@ AC_SUBST(machine_incs) | ||||
|  | ||||
| if test "$GCC" = "yes" ; then | ||||
|         CFLAGS="\ | ||||
| 	-Winline \ | ||||
| 	-Wall \ | ||||
| 	-std=gnu89 \ | ||||
| 	-Wchar-subscripts -Wmissing-declarations -Wmissing-prototypes \ | ||||
| 	-Wnested-externs -Wpointer-arith \ | ||||
| 	-Wcast-align -Wsign-compare \ | ||||
| @@ -354,7 +356,7 @@ if test "$GCC" = "yes" ; then | ||||
| 	$CFLAGS" | ||||
| 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 $GLIB_CFLAGS $CFLAGS $X_CFLAGS "'-DGTOPLOCALEDIR=\"$(datadir)/locale\" -DLIBGTOP_VERSION=\"'"$LIBGTOP_VERSION"'\" -DLIBGTOP_SERVER_VERSION=\"'"$LIBGTOP_SERVER_VERSION"'\" -DLIBGTOP_VERSION_CODE='$LIBGTOP_VERSION_CODE' -DLIBGTOP_SERVER=\"'"$LIBGTOP_SERVER"'\"' | ||||
| INCLUDES="-D_IN_LIBGTOP -D_GNU_SOURCE -I\$(top_builddir) -I\$(top_srcdir) -I\$(top_srcdir)/sysdeps/$sysdeps_dir -I\$(top_srcdir)/include $GLIB_CFLAGS $CFLAGS $X_CFLAGS "'-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) | ||||
|  | ||||
| @@ -362,8 +364,6 @@ AC_SUBST(LIBGTOP_EXTRA_LIBS) | ||||
| AC_SUBST(GLIB_LIBS) | ||||
| AC_SUBST(LIBGTOP_LIBS) | ||||
| AC_SUBST(LIBGTOP_INCS) | ||||
| AC_SUBST(LIBGTOP_NAMES_LIBS) | ||||
| AC_SUBST(LIBGTOP_NAMES_INCS) | ||||
| AC_SUBST(LIBGTOP_BINDIR) | ||||
| AC_SUBST(LIBGTOP_SERVER) | ||||
|  | ||||
| @@ -386,13 +386,11 @@ include/Makefile | ||||
| include/glibtop/Makefile | ||||
| sysdeps/Makefile | ||||
| sysdeps/common/Makefile | ||||
| sysdeps/names/Makefile | ||||
| sysdeps/stub/Makefile | ||||
| sysdeps/stub_suid/Makefile | ||||
| sysdeps/sun4/Makefile | ||||
| sysdeps/osf1/Makefile | ||||
| sysdeps/linux/Makefile | ||||
| sysdeps/kernel/Makefile | ||||
| sysdeps/freebsd/Makefile | ||||
| sysdeps/solaris/Makefile | ||||
| sysdeps/aix/Makefile | ||||
| @@ -403,4 +401,5 @@ lib/Makefile | ||||
| examples/Makefile | ||||
| doc/Makefile | ||||
| libgtop-2.0.pc | ||||
| libgtopconfig.h | ||||
| ]) | ||||
|   | ||||
| @@ -1,10 +1,9 @@ | ||||
| /* $Id$ */ | ||||
|  | ||||
| /* Copyright (C) 1998-99 Martin Baulig | ||||
|    This file is part of LibGTop 1.0. | ||||
|    This file is part of LibGTop 2.0. | ||||
|  | ||||
|    Contributed by Martin Baulig <martin@home-of-linux.org>, April 1998. | ||||
|  | ||||
|    Contributed by Benoît Dejean <TazForEver@dlfp.org>, 2004. | ||||
|     | ||||
|    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, | ||||
|   | ||||
							
								
								
									
										3
									
								
								debian/libgtop-dev.files.in
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								debian/libgtop-dev.files.in
									
									
									
									
										vendored
									
									
								
							| @@ -1,17 +1,14 @@ | ||||
| @PREFIX@/lib/libgtop.a | ||||
| @PREFIX@/lib/libgtop_common.a | ||||
| @PREFIX@/lib/libgtop_names.a | ||||
| @PREFIX@/lib/libgtop_suid_common.a | ||||
| @PREFIX@/lib/libgtop_sysdeps.a | ||||
| @PREFIX@/lib/libgtop.la | ||||
| @PREFIX@/lib/libgtop_common.la | ||||
| @PREFIX@/lib/libgtop_names.la | ||||
| @PREFIX@/lib/libgtop_suid_common.la | ||||
| @PREFIX@/lib/libgtop_sysdeps.la | ||||
| @PREFIX@/lib/libgtopConf.sh | ||||
| @PREFIX@/lib/libgtop.so | ||||
| @PREFIX@/lib/libgtop_common.so | ||||
| @PREFIX@/lib/libgtop_names.so | ||||
| @PREFIX@/lib/libgtop_suid_common.so | ||||
| @PREFIX@/lib/libgtop_sysdeps.so | ||||
| @PREFIX@/lib/libgtop-features.def | ||||
|   | ||||
| @@ -1,3 +1,21 @@ | ||||
| 2005-01-03  Benoît Dejean  <TazForEver@dlfp.org> | ||||
|  | ||||
| 	* reference.texi: Updated. | ||||
|  | ||||
| 2004-12-04  Benoît Dejean  <tazforever@dlfp.org> | ||||
|  | ||||
| 	* reference.texi: Updated. | ||||
|  | ||||
| 2004-08-03  Benoît Dejean  <tazforever@dlfp.org> | ||||
|  | ||||
| 	* reference.texi: Updated. | ||||
|  | ||||
| 2004-07-07  Benoît Dejean  <tazforever@dlfp.org> | ||||
|  | ||||
| 	* reference.texi: updated. | ||||
| 	Added glibtop_get_proc_argv. | ||||
| 	Added glibtop_fsusage.block_size. | ||||
|  | ||||
| 2004-03-05  Bastien Nocera  <hadess@hadess.net> | ||||
|  | ||||
| 	* reference.texi: update for new API | ||||
|   | ||||
| @@ -16,8 +16,6 @@ auto-macros.texi: auto-macros.texi.in Makefile | ||||
| 	  -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_BINDIR\%#$(LIBGTOP_BINDIR)#g' \ | ||||
| 	  -e 's#\%LIBGTOP_SERVER\%#$(LIBGTOP_SERVER)#g' \ | ||||
| 	  -e 's#\%LIBGTOP_MAJOR_VERSION\%#$(LIBGTOP_MAJOR_VERSION)#g' \ | ||||
|   | ||||
| @@ -56,18 +56,19 @@ struct _glibtop_cpu | ||||
|         nice, | ||||
|         sys, | ||||
|         idle, | ||||
|         iowait, | ||||
|         irq, | ||||
|         softirq, | ||||
|         frequency, | ||||
|         xcpu_total [GLIBTOP_NCPU], | ||||
|         xcpu_user [GLIBTOP_NCPU], | ||||
|         xcpu_nice [GLIBTOP_NCPU], | ||||
|         xcpu_sys  [GLIBTOP_NCPU], | ||||
| @ifset LIBGTOP-1-1 | ||||
|         xcpu_idle [GLIBTOP_NCPU], | ||||
|         xcpu_iowait [GLIBTOP_NCPU], | ||||
|         xcpu_irq [GLIBTOP_NCPU], | ||||
|         xcpu_softirq [GLIBTOP_NCPU], | ||||
|         xcpu_flags; | ||||
| @end ifset | ||||
| @ifclear LIBGTOP-1-1 | ||||
|         xcpu_idle [GLIBTOP_NCPU]; | ||||
| @end ifclear | ||||
| @}; | ||||
| @end cartouche | ||||
| @end example | ||||
| @@ -92,25 +93,33 @@ Number of clock ticks the system spent in system mode. | ||||
| @item idle | ||||
| Number of clock ticks the system spent in the idle task. | ||||
|  | ||||
| @item iowait | ||||
| Number of clock ticks the system spent waiting for I/O to complete. | ||||
|  | ||||
| @item irq | ||||
| Number of clock ticks the system spent servicing interrupts. | ||||
|  | ||||
| @item softirq | ||||
| Number of clock ticks the system spent servicing softirqs. | ||||
|  | ||||
| @item frequency | ||||
| Tick frequency (default is 100). | ||||
|  | ||||
| @end table | ||||
|  | ||||
| The @samp{xcpu_} values are for SMP systems - they are the same than | ||||
| @code{total}, @code{user}, @code{nice}, @code{sys} and @code{idle} | ||||
| @code{total}, @code{user}, @code{nice}, @code{sys}, @code{idle}, | ||||
| @code{iowait}, @code{irq} and @code{softirq} | ||||
| except that they are arrays of @code{GLIBTOP_NCPU} (defined in | ||||
| @file{<glibtop/limits.h>}) elements and contain one value for each CPU | ||||
| in the system. | ||||
|  | ||||
| @ifset LIBGTOP-1-1 | ||||
| @table @code | ||||
| @item xcpu_flags | ||||
| This is interpreted as a bit-field: on systems like Solaris, not all CPUs | ||||
| need to be running all the time, so we set the corresponding bit for each | ||||
| CPU that is currently running. | ||||
| @end table | ||||
| @end ifset | ||||
|  | ||||
| Please note that all of the cpu values are absolute values measured in | ||||
| certain units (to get seconds, divide them by @code{frequency}) since system | ||||
| @@ -359,11 +368,11 @@ Library function @code{glibtop_get_proclist}: | ||||
| @cartouche | ||||
| unsigned * | ||||
| glibtop_get_proclist (glibtop_proclist *buf, | ||||
|                       int64_t which, int64_t arg); | ||||
|                       gint64 which, gint64 arg); | ||||
|  | ||||
| unsigned * | ||||
| glibtop_get_proclist_l (glibtop *server, glibtop_proclist *buf, | ||||
|                         int64_t which, int64_t arg); | ||||
|                         gint64 which, gint64 arg); | ||||
| @end cartouche | ||||
| @end example | ||||
|  | ||||
| @@ -572,6 +581,7 @@ There are some constants for the @code{state} field: | ||||
| #define GLIBTOP_PROCESS_ZOMBIE                  8 | ||||
| #define GLIBTOP_PROCESS_STOPPED                 16 | ||||
| #define GLIBTOP_PROCESS_SWAPPING                32 | ||||
| #define GLIBTOP_PROCESS_DEAD                    64 | ||||
| @end cartouche | ||||
| @end example | ||||
| @end ifset | ||||
| @@ -717,7 +727,7 @@ Number of pages of virtual memory. | ||||
| @item resident | ||||
| Number of residnet set (non-swapped) pages. | ||||
| @item share | ||||
| Number of pages of shared (mmap'd) memory. | ||||
| Number of pages of shared (mmap\'d) memory. | ||||
| @item rss | ||||
| Number of pages the process has in real memory, minus 3 for administrative | ||||
| purposes. | ||||
| @@ -830,6 +840,7 @@ struct _glibtop_proc_time | ||||
| @end cartouche | ||||
| @end example | ||||
|  | ||||
|  | ||||
| @table @code | ||||
| @item start_time | ||||
| Start time of process in seconds since the epoch | ||||
| @@ -856,6 +867,18 @@ SMP user-mode CPU time accumulated by process | ||||
| SMP kernel-mode CPU time accumulated by process | ||||
| @end table | ||||
|  | ||||
|  | ||||
| Please note that under Linux, @code{start_time} value may be strange. | ||||
| Linux kernel defines @code{INITIAL_JIFFIES} which implies a time | ||||
| shift. Because @code{INITIAL_JIFFIES} is not user-space defined, we | ||||
| cannot use it to compute accurate @code{start_time}. On Linux2.6, | ||||
| @code{INITIAL_JIFFIES} is 300 so @code{start_time} is always 3s | ||||
| different from real start time of the given process. You may also get | ||||
| shift results if your system clock is not synchronised with your | ||||
| hardware clock. See @samp{man hwclock}. | ||||
|  | ||||
|  | ||||
|  | ||||
| @page | ||||
| @node glibtop_proc_signal, glibtop_proc_kernel, glibtop_proc_time, System Dependent | ||||
| @subsection Process Signal information | ||||
| @@ -1037,16 +1060,7 @@ struct _glibtop_proc_segment | ||||
|         dirty_size, | ||||
|         start_code, | ||||
|         end_code, | ||||
|         start_data, | ||||
|         end_data, | ||||
|         start_brk, | ||||
|         end_brk, | ||||
|         start_stack, | ||||
|         start_mmap, | ||||
|         arg_start, | ||||
|         arg_end, | ||||
|         env_start, | ||||
|         env_end; | ||||
|         start_stack; | ||||
| @}; | ||||
| @end cartouche | ||||
| @end example | ||||
| @@ -1079,7 +1093,7 @@ Library function @code{glibtop_get_proc_args}: | ||||
| @example | ||||
| @cartouche | ||||
| char * | ||||
| glibtop_get_proc_args_l (glibtop_proc_args *buf, pid_t pid, | ||||
| glibtop_get_proc_args(glibtop_proc_args *buf, pid_t pid, | ||||
|                          unsigned max_len); | ||||
|  | ||||
| char * | ||||
| @@ -1110,6 +1124,30 @@ the lenght of this string is returned in the @code{size} field. | ||||
|  | ||||
| Remember to @code{g_free} the returned string to avoid a memory leak. | ||||
|  | ||||
| @strong{New functions} | ||||
|  | ||||
| @example | ||||
| @cartouche | ||||
| char ** | ||||
| glibtop_get_proc_argv(glibtop_proc_args *buf, pid_t pid, | ||||
|                          unsigned max_len); | ||||
|  | ||||
| char ** | ||||
| glibtop_get_proc_argv_l (glibtop *server, glibtop_proc_args *buf, | ||||
|                          pid_t pid, unsigned max_len); | ||||
| @end cartouche | ||||
| @end example | ||||
|  | ||||
| Returns a NULL-terminated array of strings with all arguments of | ||||
| process @code{pid} (up to @code{max_len} characters, use zero to get | ||||
| all arguments). @code{glibtop_get_proc_argv()} and | ||||
| @code{glibtop_get_proc_argv_l()} are wrappers to | ||||
| @code{glibtop_get_proc_args()} and @code{glibtop_get_proc_args_l()} | ||||
| that return process' arguments like the C @code{argv}. | ||||
|  | ||||
| Remember to @code{g_strfreev} the returned array to avoid a memory | ||||
| leak. | ||||
|  | ||||
| @page | ||||
| @node glibtop_proc_map, glibtop_netload, glibtop_proc_args, System Dependent | ||||
| @subsection Process Memory Maps | ||||
| @@ -1494,6 +1532,9 @@ struct _glibtop_fsusage | ||||
|         bavail, | ||||
|         files, | ||||
|         ffree; | ||||
|     guint32   block_size; | ||||
|     guint64 read, | ||||
|         write; | ||||
| @}; | ||||
| @end cartouche | ||||
| @end example | ||||
| @@ -1509,10 +1550,14 @@ Free blocks available to ordinary users. | ||||
| Total file nodes. | ||||
| @item ffree | ||||
| Free file nodes. | ||||
| @item block_size | ||||
| Block size in bytes. | ||||
| @item read | ||||
| Total blocks read. | ||||
| @item write | ||||
| Total blocks written. | ||||
| @end table | ||||
|  | ||||
| Blocks are usually 512 bytes. | ||||
|  | ||||
| @page | ||||
| @node Library Functions,  , Common Functions, Reference Manual | ||||
| @section Library Functions | ||||
|   | ||||
| @@ -14,3 +14,13 @@ second_linux | ||||
| smp_static sysdeps_static netload_static procmap_static mountlist_static | ||||
| smp sysdeps netload procmap mountlist | ||||
| timings timings_static | ||||
| pprint | ||||
| pprint_static | ||||
| procargs | ||||
| procargs_static | ||||
| df | ||||
| df_static | ||||
| netlist | ||||
| netlist_static | ||||
| openfiles | ||||
| openfiles_static | ||||
|   | ||||
| @@ -1,3 +1,80 @@ | ||||
| 2005-01-22  Benoît Dejean  <TazForEver@dlfp.org> | ||||
|  | ||||
| 	* openfiles.c: (show_open_files): Updated. | ||||
|  | ||||
| 2004-12-23  Benoît Dejean  <tazforever@dlfp.org> | ||||
|  | ||||
| 	* netload.c: (main): | ||||
| 	* procmap.c: (main): s/glibtop_error/g_error/g | ||||
|  | ||||
| 2004-11-15  Benoît Dejean  <tazforever@dlfp.org> | ||||
|  | ||||
| 	* netload.c: (hwaddress_format_for_display), (main): Updated. | ||||
|  | ||||
| 2004-11-13  Benoît Dejean  <tazforever@dlfp.org> | ||||
|  | ||||
| 	* pprint.c: (pprint_get_fsusage), (pprint_get_mountlist), | ||||
| 	(pprint_get_netload), (pprint_get_netlist), (main): Updated. | ||||
|  | ||||
| 2004-09-25  Benoît Dejean  <tazforever@dlfp.org> | ||||
|  | ||||
| 	* pprint.c: (main): Re-added pprint_get_msg_limits() | ||||
|  | ||||
| i2004-09-25  Benoît Dejean  <tazforever@dlfp.org> | ||||
|  | ||||
| 	* df.c: (main): | ||||
| 	* pprint.c: (main): | ||||
| 	* procargs.c: (main): Added missing call to glibgtop_init() / glibtop_close() | ||||
|  | ||||
| 2004-09-24  Benoît Dejean  <tazforever@dlfp.org> | ||||
|  | ||||
| 	* .cvsignore: | ||||
| 	* Makefile.am: | ||||
| 	* ../configure.in | ||||
| 	* df.c: (print_fsusage), (main): Added new example, just like 'df'. | ||||
|  | ||||
| 2004-09-22  Benoît Dejean  <tazforever@dlfp.org> | ||||
|  | ||||
| 	* pprint.c: (main): Disable pprint_get_msg_limits() because it can fail. | ||||
|  | ||||
| 2004-09-21  Benoît Dejean  <tazforever@dlfp.org> | ||||
|  | ||||
| 	* pprint.c: (pprint_get_swap), (main): Updated. | ||||
|  | ||||
| 2004-09-21  Benoît Dejean  <tazforever@dlfp.org> | ||||
|  | ||||
| 	* procargs.c: (show_args), (main): Updated. | ||||
|  | ||||
| 2004-09-21  Benoît Dejean  <tazforever@dlfp.org> | ||||
|  | ||||
| 	* pprint.c: (pprint_get_mountlist), (pprint_get_netload), | ||||
| 	(pprint_get_uptime), (main): Updated. | ||||
|  | ||||
| 2004-09-21  Benoît Dejean  <tazforever@dlfp.org> | ||||
|  | ||||
| 	* pprint.c: (pprint_get_mountlist): Updated. | ||||
|  | ||||
| 2004-09-21  Benoît Dejean  <tazforever@dlfp.org> | ||||
|  | ||||
| 	* procargs.c: (show_args), (main): Updated. | ||||
|  | ||||
| 2004-09-20  Benoît Dejean  <tazforever@dlfp.org> | ||||
|  | ||||
| 	* .cvsignore: | ||||
| 	* Makefile.am: | ||||
| 	* pprint.c: (pprint_get_cpu), (pprint_get_fsusage), | ||||
| 	(pprint_get_loadavg), (pprint_get_mem), (pprint_get_mountlist), | ||||
| 	(pprint_get_msg_limits), (main): Added new example : pretty prints | ||||
| 	the result of glibtop_*. Work in progress. | ||||
| 	 | ||||
| 	Now builds procargs. | ||||
| 	 | ||||
| 	* ../configure.in: Added to static list. | ||||
|  | ||||
| 2004-07-07  Benoît Dejean  <tazforever@dlfp.org> | ||||
|  | ||||
| 	* procargs.c: Added glibtop_get_proc_argv demo. | ||||
|  | ||||
| 2003-12-27  Ole Laursen  <olau@hardworking.dk> | ||||
|  | ||||
| 	* mountlist.c: Updated to display block size too. | ||||
| @@ -50,7 +127,7 @@ | ||||
|  | ||||
| Fri Apr  9 00:14:52 1999 Timur Bakeyev  <timur@gnu.org> | ||||
|  | ||||
| 	* timings.c: Added timersub defenition, to make code compilable on  | ||||
| 	* timings.c: Added timersub defenition, to make code compilable on | ||||
| 	BSDI. | ||||
|  | ||||
| 1999-03-24  Martin Baulig  <martin@home-of-linux.org> | ||||
| @@ -116,11 +193,11 @@ Fri Apr  9 00:14:52 1999 Timur Bakeyev  <timur@gnu.org> | ||||
| 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. | ||||
|   | ||||
| @@ -6,15 +6,17 @@ INCLUDES		= @INCLUDES@ | ||||
|  | ||||
| DEFS			= @DEFS@ | ||||
|  | ||||
| noinst_PROGRAMS	= 	first second\ | ||||
| noinst_PROGRAMS	= 	first second pprint procargs df netlist \ | ||||
| 			  mountlist procmap netload sysdeps timings \ | ||||
| 			  openfiles \ | ||||
| 			  @static_targets@ @smp_examples@ | ||||
|  | ||||
| EXTRA_PROGRAMS		= first_static second_static \ | ||||
| 			  mountlist_static procmap_static \ | ||||
| 			  third third_static smp smp_static \ | ||||
| 			  smp smp_static openfiles_static \ | ||||
| 			  netload_static sysdeps_static \ | ||||
| 			  timings_static | ||||
| 			  timings_static pprint_static procargs_static \ | ||||
| 			  df_static netlist_static | ||||
|  | ||||
| first_SOURCES		= first.c | ||||
| first_LDADD		= $(top_builddir)/lib/libgtop-2.0.la | ||||
| @@ -24,7 +26,7 @@ first_static_LDADD	= $(first_LDADD) | ||||
| first_static_LDFLAGS	= -static | ||||
|  | ||||
| second_SOURCES		= second.c | ||||
| second_LDADD		= $(top_builddir)/lib/libgtop-2.0.la | ||||
| second_LDADD		= $(top_builddir)/lib/libgtop-2.0.la -lm | ||||
|  | ||||
| second_static_SOURCES	= $(second_SOURCES) | ||||
| second_static_LDADD	= $(second_LDADD) | ||||
| @@ -51,16 +53,6 @@ sysdeps_static_SOURCES	= $(sysdeps_SOURCES) | ||||
| sysdeps_static_LDADD	= $(sysdeps_LDADD) | ||||
| sysdeps_static_LDFLAGS	= -static | ||||
|  | ||||
| third_names_LIBS	= $(top_builddir)/sysdeps/names/libgtop_names-2.0.la | ||||
|  | ||||
| third_SOURCES		= third.c | ||||
| third_LDADD		= $(third_names_LIBS) \ | ||||
| 			  $(top_builddir)/lib/libgtop-2.0.la \ | ||||
| 			  @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-2.0.la | ||||
| @@ -71,7 +63,7 @@ mountlist_static_LDFLAGS= -static | ||||
|  | ||||
|  | ||||
| smp_SOURCES		= smp.c | ||||
| smp_LDADD		= $(top_builddir)/lib/libgtop-2.0.la | ||||
| smp_LDADD		= $(top_builddir)/lib/libgtop-2.0.la -lm | ||||
|  | ||||
| smp_static_SOURCES	= $(smp_SOURCES) | ||||
| smp_static_LDADD	= $(smp_LDADD) | ||||
| @@ -84,3 +76,44 @@ timings_static_SOURCES	= $(timings_SOURCES) | ||||
| timings_static_LDADD	= $(timings_LDADD) | ||||
| timings_static_LDFLAGS	= -static | ||||
|  | ||||
|  | ||||
| pprint_SOURCES	        = pprint.c | ||||
| pprint_LDADD		= $(top_builddir)/lib/libgtop-2.0.la | ||||
|  | ||||
| pprint_static_SOURCES   = $(pprint_SOURCES) | ||||
| pprint_static_LDADD	= $(pprint_LDADD) | ||||
| pprint_static_LDFLAGS   = -static | ||||
|  | ||||
|  | ||||
| procargs_SOURCES	  = procargs.c | ||||
| procargs_LDADD		  = $(top_builddir)/lib/libgtop-2.0.la | ||||
|  | ||||
| procargs_static_SOURCES   = $(procargs_SOURCES) | ||||
| procargs_static_LDADD	  = $(procargs_LDADD) | ||||
| procargs_static_LDFLAGS   = -static | ||||
|  | ||||
|  | ||||
| df_SOURCES	  = df.c | ||||
| df_LDADD		  = $(top_builddir)/lib/libgtop-2.0.la | ||||
|  | ||||
| df_static_SOURCES   = $(df_SOURCES) | ||||
| df_static_LDADD	  = $(df_LDADD) | ||||
| df_static_LDFLAGS   = -static | ||||
|  | ||||
|  | ||||
| netlist_SOURCES		= netlist.c | ||||
| netlist_LDADD		= $(top_builddir)/lib/libgtop-2.0.la | ||||
|  | ||||
| netlist_static_SOURCES	= $(netlist_SOURCES) | ||||
| netlist_static_LDADD	= $(netlist_LDADD) | ||||
| netlist_static_LDFLAGS	= -static | ||||
|  | ||||
|  | ||||
| openfiles_SOURCES	= openfiles.c | ||||
| openfiles_LDADD		= $(top_builddir)/lib/libgtop-2.0.la | ||||
|  | ||||
| openfiles_static_SOURCES	= $(openfiles_SOURCES) | ||||
| openfiles_static_LDADD		= $(openfiles_LDADD) | ||||
| openfiles_static_LDFLAGS	= -static | ||||
|  | ||||
|  | ||||
|   | ||||
							
								
								
									
										48
									
								
								examples/df.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								examples/df.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,48 @@ | ||||
| #include <glibtop.h> | ||||
|  | ||||
| #include <glibtop/fsusage.h> | ||||
| #include <glibtop/mountlist.h> | ||||
|  | ||||
| #include <stdio.h> | ||||
|  | ||||
|  | ||||
| static void print_fsusage(const char *mountpoint) | ||||
| { | ||||
|   glibtop_fsusage buf; | ||||
|  | ||||
|   glibtop_get_fsusage(&buf, mountpoint); | ||||
|  | ||||
|   printf("%-20s %-10llu %-10llu %-10llu %.1f\n", | ||||
| 	 mountpoint, | ||||
| 	 buf.blocks * buf.block_size >> 20, | ||||
| 	 (buf.blocks - buf.bavail) * buf.block_size >> 20, | ||||
| 	 buf.bavail * buf.block_size >> 20, | ||||
| 	 (buf.blocks - buf.bavail) * 100.0 / buf.blocks | ||||
| 	 ); | ||||
| } | ||||
|  | ||||
|  | ||||
| int main() | ||||
| { | ||||
|   glibtop_mountlist buf; | ||||
|   glibtop_mountentry *entries; | ||||
|   size_t i; | ||||
|  | ||||
|   glibtop_init(); | ||||
|  | ||||
|   printf("%-20s %-10s %-10s %-10s %-10s\n", | ||||
| 	 "Filesystem", "Size", "Used", "Avail", "Use%"); | ||||
|  | ||||
|   entries = glibtop_get_mountlist(&buf, FALSE); | ||||
|  | ||||
|   for(i = 0; i < buf.number; ++i) | ||||
|     { | ||||
|       print_fsusage(entries[i].mountdir); | ||||
|     } | ||||
|  | ||||
|   g_free(entries); | ||||
|  | ||||
|   glibtop_close(); | ||||
|  | ||||
|   return 0; | ||||
| } | ||||
| @@ -1,11 +1,6 @@ | ||||
| /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */ | ||||
| /* Copyright (C) 2004 Benoît Dejean
 | ||||
|    This file is part of LibGTop 2.0. | ||||
| 
 | ||||
| /* $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 | ||||
| @@ -21,14 +16,31 @@ | ||||
|    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 <glibtop/interfaces.h> | ||||
| #include <stdio.h> | ||||
| 
 | ||||
| const char *glibtop_names_interface_names[] = { 0 }; | ||||
| #include <glibtop.h> | ||||
| #include <glibtop/netlist.h> | ||||
| 
 | ||||
| const unsigned glibtop_types_interface_names[] = { 0 }; | ||||
| 
 | ||||
| const char *glibtop_labels_interface_names[] = { 0 }; | ||||
| int main(int argc, char *argv []) | ||||
| { | ||||
| 	glibtop_netlist buf; | ||||
| 	char **devices; | ||||
| 	guint32 i; | ||||
| 
 | ||||
| const char *glibtop_descriptions_interface_names[] = { 0 }; | ||||
| 	glibtop_init(); | ||||
| 
 | ||||
| 	devices = glibtop_get_netlist(&buf); | ||||
| 
 | ||||
| 	for(i = 0; i < buf.number; ++i) | ||||
| 	{ | ||||
| 		printf("net device '%s'\n", devices[i]); | ||||
| 	} | ||||
| 
 | ||||
| 	g_strfreev(devices); | ||||
| 
 | ||||
| 	glibtop_close(); | ||||
| 	return 0; | ||||
| } | ||||
| @@ -40,6 +40,24 @@ | ||||
| #define PROFILE_COUNT	1 | ||||
| #endif | ||||
|  | ||||
|  | ||||
| static char* hwaddress_format_for_display(glibtop_netload *buf) | ||||
| { | ||||
| 	unsigned i; | ||||
| 	GString *repr = g_string_new(""); | ||||
| 	char *str; | ||||
|  | ||||
| 	for(i = 0; i < sizeof buf->hwaddress; ++i) | ||||
| 		g_string_append_printf(repr, "%02X:", | ||||
| 				       (unsigned) ((char*)buf->hwaddress)[i]); | ||||
|  | ||||
| 	repr->str [ repr->len - 1] = ' '; | ||||
| 	str = g_string_free(repr, FALSE); | ||||
| 	g_strstrip(str); | ||||
| 	return str; | ||||
| } | ||||
|  | ||||
|  | ||||
| int | ||||
| main (int argc, char *argv []) | ||||
| { | ||||
| @@ -47,6 +65,8 @@ main (int argc, char *argv []) | ||||
| 	unsigned method, count, port; | ||||
| 	struct in_addr addr, subnet; | ||||
| 	char *address_string, *subnet_string; | ||||
| 	char address6_string[INET6_ADDRSTRLEN], prefix6_string[INET6_ADDRSTRLEN]; | ||||
| 	char *hwaddress_string; | ||||
| 	char buffer [BUFSIZ]; | ||||
|  | ||||
| 	count = PROFILE_COUNT; | ||||
| @@ -76,7 +96,7 @@ main (int argc, char *argv []) | ||||
| 	glibtop_init_r (&glibtop_global_server, 0, 0); | ||||
|  | ||||
| 	if (argc != 2) | ||||
| 		glibtop_error ("Usage: %s interface", argv [0]); | ||||
| 		g_error ("Usage: %s interface", argv [0]); | ||||
|  | ||||
| 	glibtop_get_netload (&netload, argv [1]); | ||||
|  | ||||
| @@ -86,36 +106,50 @@ main (int argc, char *argv []) | ||||
| 	address_string = g_strdup (inet_ntoa (addr)); | ||||
| 	subnet_string  = g_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); | ||||
| 	inet_ntop (AF_INET6, netload.address6, address6_string, INET6_ADDRSTRLEN); | ||||
| 	inet_ntop (AF_INET6, netload.prefix6,  prefix6_string,  INET6_ADDRSTRLEN); | ||||
|  | ||||
| 	hwaddress_string = hwaddress_format_for_display(&netload); | ||||
|  | ||||
| 	printf ("Network Load (0x%016llx):\n\n" | ||||
| 		"\tInterface Flags:\t0x%016llx\n" | ||||
| 		"\tAddress:\t\t0x%08x - %s\n" | ||||
| 		"\tSubnet:\t\t\t0x%08x - %s\n\n" | ||||
| 		"\tMTU:\t\t\t%d\n" | ||||
| 		"\tCollisions:\t\t%llu\n\n" | ||||
| 		"\tPackets In:\t\t%llu\n" | ||||
| 		"\tPackets Out:\t\t%llu\n" | ||||
| 		"\tPackets Total:\t\t%llu\n\n" | ||||
| 		"\tBytes In:\t\t%llu\n" | ||||
| 		"\tBytes Out:\t\t%llu\n" | ||||
| 		"\tBytes Total:\t\t%llu\n\n" | ||||
| 		"\tErrors In:\t\t%llu\n" | ||||
| 		"\tErrors Out:\t\t%llu\n" | ||||
| 		"\tErrors Total:\t\t%llu\n\n" | ||||
| 		"\tAddress6:\t\t%s\n" | ||||
| 		"\tPrefix6:\t\t%s\n" | ||||
| 		"\tScope6:\t\t\t%#03x\n\n" | ||||
| 		"\tHarware Address:\t%s\n\n", | ||||
| 		netload.flags, | ||||
| 		netload.if_flags, | ||||
| 		(guint32) netload.address, address_string, | ||||
| 		(guint32) netload.subnet,  subnet_string, | ||||
| 		netload.mtu, | ||||
| 		netload.collisions, | ||||
| 		netload.packets_in, | ||||
| 		netload.packets_out, | ||||
| 		netload.packets_total, | ||||
| 		netload.bytes_in, | ||||
| 		netload.bytes_out, | ||||
| 		netload.bytes_total, | ||||
| 		netload.errors_in, | ||||
| 		netload.errors_out, | ||||
| 		netload.errors_total, | ||||
| 		address6_string, | ||||
| 		prefix6_string, | ||||
| 		(int) netload.scope6, | ||||
| 		hwaddress_string); | ||||
|  | ||||
|  | ||||
| 	g_free (address_string); | ||||
| 	g_free (subnet_string); | ||||
|   | ||||
							
								
								
									
										64
									
								
								examples/openfiles.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								examples/openfiles.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,64 @@ | ||||
| #include <glibtop.h> | ||||
| #include <glibtop/procopenfiles.h> | ||||
|  | ||||
| #include <stdlib.h> | ||||
|  | ||||
| #include <unistd.h> | ||||
|  | ||||
| static void show_open_files(pid_t pid) | ||||
| { | ||||
|   glibtop_proc_open_files buf; | ||||
|   glibtop_open_files_entry *files; | ||||
|   unsigned i; | ||||
|  | ||||
|   files = glibtop_get_proc_open_files(&buf, pid); | ||||
|  | ||||
|   printf("<%ld>\n", (long)pid); | ||||
|  | ||||
|   for(i = 0; i < buf.number; ++i) | ||||
|   { | ||||
| 	  printf("\tfd = %d\t", files[i].fd); | ||||
|  | ||||
| 	  switch(files[i].type) | ||||
| 	  { | ||||
| 	  case GLIBTOP_FILE_TYPE_FILE: | ||||
| 		  printf("file \"%s\"\n", files[i].info.file.name); | ||||
| 		  break; | ||||
|  | ||||
| 	  case GLIBTOP_FILE_TYPE_PIPE: | ||||
| 		  printf("pipe\n"); | ||||
| 		  break; | ||||
|  | ||||
| 	  case GLIBTOP_FILE_TYPE_INETSOCKET: | ||||
| 		  printf("socket %s:%d\n", files[i].info.sock.dest_host, files[i].info.sock.dest_port); | ||||
| 		  break; | ||||
|  | ||||
| 	  case GLIBTOP_FILE_TYPE_LOCALSOCKET: | ||||
| 		  printf("localsocket %s\n", files[i].info.localsock.name); | ||||
| 		  break; | ||||
| 	  } | ||||
|   } | ||||
|  | ||||
|   putchar('\n'); | ||||
|  | ||||
|   g_free(files); | ||||
| } | ||||
|  | ||||
|  | ||||
| int main(int argc, char **argv) | ||||
| { | ||||
|   glibtop_init(); | ||||
|  | ||||
|   show_open_files(getpid()); | ||||
|  | ||||
|   while(*++argv) | ||||
|     { | ||||
|       pid_t pid = strtol(*argv, NULL, 10); | ||||
|       show_open_files(pid); | ||||
|     } | ||||
|  | ||||
|   glibtop_close(); | ||||
|  | ||||
|   return 0; | ||||
| } | ||||
|  | ||||
							
								
								
									
										281
									
								
								examples/pprint.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										281
									
								
								examples/pprint.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,281 @@ | ||||
| #include <glibtop.h> | ||||
|  | ||||
| #include <glibtop/union.h> | ||||
|  | ||||
|  | ||||
| #include <stdio.h> | ||||
| #include <stddef.h> | ||||
|  | ||||
|  | ||||
| #define buf_offsetof(MEMBER) ((ptrdiff_t)&(buf.MEMBER) - (ptrdiff_t)&buf) | ||||
|  | ||||
| #define HEADER_PPRINT(FUNC) printf("### " #FUNC " ###\nsizeof *buf = %lu B\n", \ | ||||
| (unsigned long) sizeof buf) | ||||
|  | ||||
| #define PPRINT(DATA, FORMAT) printf("\t%4lu B %3lu " #DATA " = " FORMAT "\n", \ | ||||
| (unsigned long) sizeof buf.DATA, (unsigned long) buf_offsetof(DATA), buf.DATA) | ||||
|  | ||||
| #define PPRINT_ARRAY(ARRAY, SIZE, FORMAT) do { \ | ||||
| size_t i; \ | ||||
| printf("\t%4lu B %3lu " #ARRAY "[%lu] = { ", \ | ||||
| (unsigned long) sizeof buf.ARRAY, (unsigned long) buf_offsetof(ARRAY),\ | ||||
| (unsigned long) G_N_ELEMENTS(buf.ARRAY)); \ | ||||
| for(i = 0; i < (SIZE - 1); ++i) printf(".%u = " FORMAT ", ", i, buf.ARRAY[i]); \ | ||||
| printf(".%u = " FORMAT " }\n", SIZE - 1 , buf.ARRAY[SIZE - 1]); \ | ||||
| } while(0) | ||||
|  | ||||
| #define FOOTER_PPRINT() putchar('\n'); | ||||
|  | ||||
|  | ||||
|  | ||||
| static void pprint_get_cpu() | ||||
| { | ||||
|   glibtop_cpu buf; | ||||
|  | ||||
|   glibtop_get_cpu(&buf); | ||||
|  | ||||
|   HEADER_PPRINT(glibtop_get_cpu); | ||||
|   PPRINT(flags, "%#llx"); | ||||
|   PPRINT(total, "%llu"); | ||||
|   PPRINT(user, "%llu"); | ||||
|   PPRINT(nice, "%llu"); | ||||
|   PPRINT(sys, "%llu"); | ||||
|   PPRINT(idle, "%llu"); | ||||
|   PPRINT(iowait, "%llu"); | ||||
|   PPRINT(irq, "%llu"); | ||||
|   PPRINT(softirq, "%llu"); | ||||
|   PPRINT(frequency, "%llu"); | ||||
|   PPRINT_ARRAY(xcpu_total, GLIBTOP_NCPU, "%llu"); | ||||
|   PPRINT_ARRAY(xcpu_user, GLIBTOP_NCPU, "%llu"); | ||||
|   PPRINT_ARRAY(xcpu_nice, GLIBTOP_NCPU, "%llu"); | ||||
|   PPRINT_ARRAY(xcpu_sys, GLIBTOP_NCPU, "%llu"); | ||||
|   PPRINT_ARRAY(xcpu_idle, GLIBTOP_NCPU, "%llu"); | ||||
|   PPRINT_ARRAY(xcpu_iowait, GLIBTOP_NCPU, "%llu"); | ||||
|   PPRINT_ARRAY(xcpu_irq, GLIBTOP_NCPU, "%llu"); | ||||
|   PPRINT_ARRAY(xcpu_softirq, GLIBTOP_NCPU, "%llu"); | ||||
|   PPRINT(xcpu_flags, "%llx"); | ||||
|   FOOTER_PPRINT(); | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
| static void pprint_get_fsusage(const char *mountpoint) | ||||
| { | ||||
|   glibtop_fsusage buf; | ||||
|  | ||||
|   glibtop_get_fsusage(&buf, mountpoint); | ||||
|  | ||||
|   HEADER_PPRINT(glibtop_get_fsusage); | ||||
|   printf("pprint_get_fsusage (mountpoint = \"%s\"\n", mountpoint); | ||||
|   PPRINT(flags, "%#llx"); | ||||
|   PPRINT(blocks, "%llu"); | ||||
|   PPRINT(bfree, "%llu"); | ||||
|   PPRINT(bavail, "%llu"); | ||||
|   PPRINT(files, "%llu"); | ||||
|   PPRINT(ffree, "%llu"); | ||||
|   PPRINT(block_size, "%u"); | ||||
|   PPRINT(read, "%llu"); | ||||
|   PPRINT(write, "%llu"); | ||||
|   FOOTER_PPRINT(); | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
| static void pprint_get_loadavg() | ||||
| { | ||||
|   glibtop_loadavg buf; | ||||
|  | ||||
|   glibtop_get_loadavg(&buf); | ||||
|  | ||||
|   HEADER_PPRINT(glibtop_get_loadavg); | ||||
|   PPRINT(flags, "%#llx"); | ||||
|   PPRINT_ARRAY(loadavg, 3, "%f"); | ||||
|   PPRINT(nr_running, "%llu"); | ||||
|   PPRINT(nr_tasks, "%llu"); | ||||
|   PPRINT(last_pid, "%llu"); | ||||
|   FOOTER_PPRINT(); | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
| static void pprint_get_mem() | ||||
| { | ||||
|   glibtop_mem buf; | ||||
|  | ||||
|   glibtop_get_mem(&buf); | ||||
|  | ||||
|   HEADER_PPRINT(glibtop_get_mem); | ||||
|   PPRINT(flags, "%#llx"); | ||||
|   PPRINT(total, "%llu"); | ||||
|   PPRINT(used, "%llu"); | ||||
|   PPRINT(free, "%llu"); | ||||
|   PPRINT(shared, "%llu"); | ||||
|   PPRINT(buffer, "%llu"); | ||||
|   PPRINT(cached, "%llu"); | ||||
|   PPRINT(user, "%llu"); | ||||
|   PPRINT(locked, "%llu"); | ||||
|   FOOTER_PPRINT(); | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
| static void pprint_get_mountlist(gboolean allfs) | ||||
| { | ||||
|   glibtop_mountlist buf; | ||||
|   glibtop_mountentry *entries; | ||||
|   size_t i; | ||||
|  | ||||
|   entries = glibtop_get_mountlist(&buf, allfs); | ||||
|  | ||||
|   HEADER_PPRINT(glibtop_get_mountlist); | ||||
|   printf("glibtop_get_mountlist (allfs = %d)\n", allfs); | ||||
|   PPRINT(flags, "%#llx"); | ||||
|   PPRINT(number, "%llu"); | ||||
|   PPRINT(total, "%llu"); | ||||
|   PPRINT(size, "%llu"); | ||||
|  | ||||
|   printf("\t%4llu B entries[%llu] = \n\t\t{\n", buf.total, buf.number); | ||||
|  | ||||
|   for(i = 0; i < buf.number; ++i) | ||||
|     { | ||||
|       printf("\t\t .%lu = { .dev = %#llx," | ||||
| 	     " .devname = \"%s\"," | ||||
| 	     " .mountir = \"%s\"," | ||||
| 	     " .type = \"%s\" }\n", | ||||
| 	     (unsigned long) i, entries[i].dev, | ||||
| 	     entries[i].devname, | ||||
| 	     entries[i].mountdir, | ||||
| 	     entries[i].type); | ||||
|     } | ||||
|  | ||||
|   printf("\t\t}\n"); | ||||
|   FOOTER_PPRINT(); | ||||
|  | ||||
|   g_free(entries); | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
| static void pprint_get_msg_limits() | ||||
| { | ||||
|   glibtop_msg_limits buf; | ||||
|  | ||||
|   glibtop_get_msg_limits(&buf); | ||||
|  | ||||
|   HEADER_PPRINT(glibtop_get_msg_limits); | ||||
|   PPRINT(flags, "%#llx"); | ||||
|   PPRINT(msgpool, "%llu"); | ||||
|   PPRINT(msgmap, "%llu"); | ||||
|   PPRINT(msgmax, "%llu"); | ||||
|   PPRINT(msgmnb, "%llu"); | ||||
|   PPRINT(msgmni, "%llu"); | ||||
|   PPRINT(msgssz, "%llu"); | ||||
|   PPRINT(msgtql, "%llu"); | ||||
|   FOOTER_PPRINT(); | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
| static void pprint_get_netload(const char *iface) | ||||
| { | ||||
|   glibtop_netload buf; | ||||
|  | ||||
|   glibtop_get_netload(&buf, iface); | ||||
|  | ||||
|   HEADER_PPRINT(glibtop_get_netload); | ||||
|   printf("glibtop_get_netload (iface = \"%s\")\n", iface); | ||||
|   PPRINT(flags, "%#llx"); | ||||
|   FOOTER_PPRINT(); | ||||
| } | ||||
|  | ||||
|  | ||||
| static void pprint_get_netlist() | ||||
| { | ||||
|   glibtop_netlist buf; | ||||
|   char **devices; | ||||
|   guint32 i; | ||||
|  | ||||
|   devices = glibtop_get_netlist(&buf); | ||||
|  | ||||
|   HEADER_PPRINT(glibtop_get_netlist); | ||||
|  | ||||
|   for(i = 0; i < buf.number; ++i) | ||||
|   { | ||||
| 	  printf("\t%s\n", devices[i]); | ||||
|   } | ||||
|  | ||||
|   FOOTER_PPRINT(); | ||||
|  | ||||
|   g_strfreev(devices); | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
| static void pprint_get_swap() | ||||
| { | ||||
|   glibtop_swap buf; | ||||
|  | ||||
|   glibtop_get_swap(&buf); | ||||
|  | ||||
|   HEADER_PPRINT(glibtop_get_swap); | ||||
|   PPRINT(flags, "%#llx"); | ||||
|   PPRINT(total, "%llu"); | ||||
|   PPRINT(used, "%llu"); | ||||
|   PPRINT(free, "%llu"); | ||||
|   PPRINT(pagein, "%llu"); | ||||
|   PPRINT(pageout, "%llu"); | ||||
|   FOOTER_PPRINT(); | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
| static void pprint_get_uptime() | ||||
| { | ||||
|   glibtop_uptime buf; | ||||
|  | ||||
|   glibtop_get_uptime(&buf); | ||||
|  | ||||
|   HEADER_PPRINT(glibtop_get_uptime); | ||||
|   PPRINT(flags, "%#llx"); | ||||
|   PPRINT(uptime, "%f"); | ||||
|   PPRINT(idletime, "%f"); | ||||
|   PPRINT(boot_time, "%llu"); | ||||
|   FOOTER_PPRINT(); | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| int main() | ||||
| { | ||||
|   glibtop_init(); | ||||
|  | ||||
|   pprint_get_cpu(); | ||||
|  | ||||
|   pprint_get_fsusage("/"); | ||||
|  | ||||
|   pprint_get_loadavg(); | ||||
|  | ||||
|   pprint_get_mem(); | ||||
|  | ||||
|   pprint_get_mountlist(TRUE); | ||||
|   pprint_get_mountlist(FALSE); | ||||
|  | ||||
|   pprint_get_msg_limits(); | ||||
|  | ||||
|   pprint_get_swap(); | ||||
|  | ||||
|   pprint_get_netlist(); | ||||
|  | ||||
|   pprint_get_netload("eth0"); | ||||
|   pprint_get_netload("ppp0"); | ||||
|   pprint_get_netload("<unknown>"); | ||||
| /* pprint_get_sysinfo(); */ | ||||
|  | ||||
|   pprint_get_uptime(); | ||||
|  | ||||
|   glibtop_close(); | ||||
|  | ||||
|   return 0; | ||||
| } | ||||
| @@ -1,30 +1,47 @@ | ||||
| #include <glibtop.h> | ||||
| #include <glibtop/procargs.h> | ||||
|  | ||||
| #include <stdlib.h> | ||||
|  | ||||
| #include <unistd.h> | ||||
|  | ||||
| int main(int argc, char **argv) | ||||
| static void show_args(pid_t pid, unsigned max_len) | ||||
| { | ||||
|   while(*++argv) | ||||
|   glibtop_proc_args buf; | ||||
|   char ** const pargv = glibtop_get_proc_argv(&buf, pid, max_len); | ||||
|  | ||||
|   char **parg = pargv; | ||||
|  | ||||
|   printf("<%ld>\t", (long)pid); | ||||
|  | ||||
|   while(*parg) | ||||
|     { | ||||
|       glibtop_proc_args buf; | ||||
|       pid_t pid = strtol(*argv, NULL, 10); | ||||
|       char ** const pargv = glibtop_get_proc_argv(&buf, pid, 20); | ||||
|  | ||||
|       char **parg = pargv; | ||||
|  | ||||
|       printf("<%ld>\t", (long)pid); | ||||
|  | ||||
|       while(*parg) | ||||
| 	{ | ||||
| 	  printf("\"%s\"\t", *parg); | ||||
| 	  parg++; | ||||
| 	} | ||||
|  | ||||
|       putchar('\n'); | ||||
|  | ||||
|       g_strfreev(pargv); | ||||
|       printf("\"%s\" ", *parg); | ||||
|       parg++; | ||||
|     } | ||||
|  | ||||
|   putchar('\n'); | ||||
|  | ||||
|   g_strfreev(pargv); | ||||
| } | ||||
|  | ||||
|  | ||||
| int main(int argc, char **argv) | ||||
| { | ||||
|   glibtop_init(); | ||||
|  | ||||
|   show_args(getpid(), 0); | ||||
|   show_args(getpid(), 15); | ||||
|  | ||||
|   while(*++argv) | ||||
|     { | ||||
|       pid_t pid = strtol(*argv, NULL, 10); | ||||
|       show_args(pid, 0); | ||||
|       show_args(pid, 15); | ||||
|     } | ||||
|  | ||||
|   glibtop_close(); | ||||
|  | ||||
|   return 0; | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -83,7 +83,7 @@ main (int argc, char *argv []) | ||||
| 	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]); | ||||
| 		g_error ("Usage: %s pid", argv [0]); | ||||
|  | ||||
| #ifdef GLIBTOP_INODEDB | ||||
| 	inodedb = glibtop_inodedb_open (0, 0); | ||||
|   | ||||
| @@ -1,58 +0,0 @@ | ||||
| /* $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 <libintl.h> | ||||
| #include <stdio.h> | ||||
|  | ||||
| #include <glibtop.h> | ||||
|  | ||||
| #include <glibtop/open.h> | ||||
| #include <glibtop/close.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 (GETTEXT_PACKAGE, GTOPLOCALEDIR); | ||||
| 	textdomain (GETTEXT_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); | ||||
| } | ||||
| @@ -1,4 +1,4 @@ | ||||
| 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|cpu|ulong(total,user,nice,sys,idle,iowait,irq,softirq,frequency,xcpu_total[4],xcpu_user[4],xcpu_nice[4],xcpu_sys[4],xcpu_idle[4],xcpu_iowait[4],xcpu_irq[4],xcpu_softirq[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) | ||||
| @@ -16,7 +16,10 @@ void|proc_kernel|ulong(k_flags,min_flt,maj_flt,cmin_flt,cmaj_flt,kstk_esp,kstk_e | ||||
| 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_open_files_entry *|proc_open_files|ulong(number)|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) | ||||
| char **|netlist|unsigned(number) | ||||
|  | ||||
|   | ||||
							
								
								
									
										27
									
								
								glibtop.h
									
									
									
									
									
								
							
							
						
						
									
										27
									
								
								glibtop.h
									
									
									
									
									
								
							| @@ -24,6 +24,30 @@ | ||||
| #ifndef __GLIBTOP_H__ | ||||
| #define __GLIBTOP_H__ | ||||
|  | ||||
| typedef struct _glibtop		glibtop; | ||||
|  | ||||
| /** | ||||
|  *  LIBGTOP_CHECK_VERSION | ||||
|  *  @major: Major version number | ||||
|  *  @minor: Minor version number | ||||
|  *  @micro: Micro version number | ||||
|  * | ||||
|  *  Checks if the version given is compatable with this version of the | ||||
|  *  library.  For example, LIBGTOP_CHECK_VERSION(1.2.3) would return TRUE | ||||
|  *  if the version is 1.2.5, and FALSE if 1.1.0.  This can be used in | ||||
|  *  build tests. | ||||
|  * | ||||
|  **/ | ||||
|  | ||||
| #include <libgtopconfig.h> | ||||
|  | ||||
| #define LIBGTOP_CHECK_VERSION(major, minor, micro)    \ | ||||
| (LIBGTOP_MAJOR_VERSION > (major) || \ | ||||
| (LIBGTOP_MAJOR_VERSION == (major) && LIBGTOP_MINOR_VERSION > (minor)) || \ | ||||
| (LIBGTOP_MAJOR_VERSION == (major) && LIBGTOP_MINOR_VERSION == (minor) && \ | ||||
| LIBGTOP_MICRO_VERSION >= (micro))) | ||||
|  | ||||
|  | ||||
| #include <glibtop/global.h> | ||||
|  | ||||
| #include <glibtop_server.h> | ||||
| @@ -37,10 +61,11 @@ | ||||
| #define GLIBTOP_MOUNTENTRY_LEN	79 | ||||
| #endif | ||||
|  | ||||
| typedef struct _glibtop		glibtop; | ||||
|  | ||||
| #include <glibtop/sysdeps.h> | ||||
|  | ||||
| #include <glibtop/close.h> | ||||
|  | ||||
| struct _glibtop | ||||
| { | ||||
| 	unsigned flags; | ||||
|   | ||||
| @@ -7,4 +7,5 @@ glibtop_HEADERS		= close.h loadavg.h prockernel.h procstate.h \ | ||||
| 			  procsegment.h read.h sysdeps.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 | ||||
| 			  inodedb.h sysinfo.h ppp.h procargs.h netload.h \ | ||||
| 			  netlist.h procopenfiles.h | ||||
|   | ||||
| @@ -1,50 +0,0 @@ | ||||
| /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */ | ||||
|  | ||||
| /* $Id$ */ | ||||
|  | ||||
| /* Copyright (C) 1998-99 Martin Baulig | ||||
|    This file is part of LibGTop 1.0. | ||||
|  | ||||
|    Contributed by Martin Baulig <martin@home-of-linux.org>, April 1998. | ||||
|  | ||||
|    LibGTop is free software; you can redistribute it and/or modify it | ||||
|    under the terms of the GNU General Public License as published by | ||||
|    the Free Software Foundation; either version 2 of the License, | ||||
|    or (at your option) any later version. | ||||
|  | ||||
|    LibGTop is distributed in the hope that it will be useful, but WITHOUT | ||||
|    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||||
|    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License | ||||
|    for more details. | ||||
|  | ||||
|    You should have received a copy of the GNU General Public License | ||||
|    along with LibGTop; see the file COPYING. If not, write to the | ||||
|    Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||||
|    Boston, MA 02111-1307, USA. | ||||
| */ | ||||
|  | ||||
| #ifndef __GLIBTOP_ARRAY_H__ | ||||
| #define __GLIBTOP_ARRAY_H__ | ||||
|  | ||||
| #include <glibtop.h> | ||||
| #include <glibtop/global.h> | ||||
|  | ||||
| G_BEGIN_DECLS | ||||
|  | ||||
| #define GLIBTOP_ARRAY_NUMBER		0 | ||||
| #define GLIBTOP_ARRAY_SIZE		1 | ||||
| #define GLIBTOP_ARRAY_TOTAL		2 | ||||
|  | ||||
| #define GLIBTOP_MAX_ARRAY		3 | ||||
|  | ||||
| typedef struct _glibtop_array	glibtop_array; | ||||
|  | ||||
| struct _glibtop_array | ||||
| { | ||||
|     guint64 flags, | ||||
| 	number,		/* GLIBTOP_ARRAY_NUMBER	*/ | ||||
| 	size,		/* GLIBTOP_ARRAY_SIZE	*/ | ||||
| 	total;		/* GLIBTOP_ARRAY_TOTAL	*/ | ||||
| }; | ||||
|  | ||||
| #endif | ||||
| @@ -57,8 +57,10 @@ G_BEGIN_DECLS | ||||
| #define GLIBTOP_CMND_FSUSAGE		21 | ||||
| #define GLIBTOP_CMND_NETLOAD		22 | ||||
| #define GLIBTOP_CMND_PPP		23 | ||||
| #define GLIBTOP_CMND_NETLIST		24 | ||||
| #define GLIBTOP_CMND_PROC_OPEN_FILES	25 | ||||
|  | ||||
| #define GLIBTOP_MAX_CMND		24 | ||||
| #define GLIBTOP_MAX_CMND		26 | ||||
|  | ||||
| #define _GLIBTOP_PARAM_SIZE		16 | ||||
|  | ||||
| @@ -82,7 +84,7 @@ union _glibtop_response_union | ||||
|  | ||||
| struct _glibtop_response | ||||
| { | ||||
| 	int64_t offset; | ||||
| 	gint64 offset; | ||||
| 	guint64 size, data_size; | ||||
| 	glibtop_response_union u; | ||||
| }; | ||||
|   | ||||
| @@ -1,91 +0,0 @@ | ||||
| /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */ | ||||
|  | ||||
| /* $Id$ */ | ||||
|  | ||||
| /* Copyright (C) 1998-99 Martin Baulig | ||||
|    This file is part of LibGTop 1.0. | ||||
|  | ||||
|    Contributed by Martin Baulig <martin@home-of-linux.org>, April 1998. | ||||
|  | ||||
|    LibGTop is free software; you can redistribute it and/or modify it | ||||
|    under the terms of the GNU General Public License as published by | ||||
|    the Free Software Foundation; either version 2 of the License, | ||||
|    or (at your option) any later version. | ||||
|  | ||||
|    LibGTop is distributed in the hope that it will be useful, but WITHOUT | ||||
|    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||||
|    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License | ||||
|    for more details. | ||||
|  | ||||
|    You should have received a copy of the GNU General Public License | ||||
|    along with LibGTop; see the file COPYING. If not, write to the | ||||
|    Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||||
|    Boston, MA 02111-1307, USA. | ||||
| */ | ||||
|  | ||||
| #ifndef __GLIBTOP_COMPAT10_H__ | ||||
| #define __GLIBTOP_COMPAT10_H__ | ||||
|  | ||||
| #include <glibtop.h> | ||||
| #include <glibtop/global.h> | ||||
|  | ||||
| G_BEGIN_DECLS | ||||
|  | ||||
| /* glibtop_cpu */ | ||||
|  | ||||
| #define GLIBTOP_XCPU_TOTAL		GLIBTOP_CPU_XCPU_TOTAL | ||||
| #define GLIBTOP_XCPU_USER		GLIBTOP_CPU_XCPU_USER | ||||
| #define GLIBTOP_XCPU_NICE		GLIBTOP_CPU_XCPU_NICE | ||||
| #define GLIBTOP_XCPU_SYS		GLIBTOP_CPU_XCPU_SYS | ||||
| #define GLIBTOP_XCPU_IDLE		GLIBTOP_CPU_XCPU_IDLE | ||||
| #define GLIBTOP_XCPU_FLAGS		GLIBTOP_CPU_XCPU_FLAGS | ||||
|  | ||||
| /* glibtop_proclist */ | ||||
|  | ||||
| #define GLIBTOP_PROCLIST_NUMBER		GLIBTOP_ARRAY_NUMBER | ||||
| #define GLIBTOP_PROCLIST_SIZE		GLIBTOP_ARRAY_SIZE | ||||
| #define GLIBTOP_PROCLIST_TOTAL		GLIBTOP_ARRAY_TOTAL | ||||
|  | ||||
| #define GLIBTOP_MAX_PROCLIST		GLIBTOP_MAX_ARRAY | ||||
|  | ||||
| typedef struct _glibtop_array		glibtop_proclist; | ||||
|  | ||||
| /* glibtop_mountlist */ | ||||
|  | ||||
| #define GLIBTOP_MOUNTLIST_NUMBER	GLIBTOP_ARRAY_NUMBER | ||||
| #define GLIBTOP_MOUNTLIST_SIZE		GLIBTOP_ARRAY_SIZE | ||||
| #define GLIBTOP_MOUNTLIST_TOTAL		GLIBTOP_ARRAY_TOTAL | ||||
|  | ||||
| #define GLIBTOP_MAX_MOUNTLIST		GLIBTOP_MAX_ARRAY | ||||
|  | ||||
| typedef struct _glibtop_array		glibtop_mountlist; | ||||
|  | ||||
| /* glibtop_proc_args */ | ||||
|  | ||||
| #define GLIBTOP_PROC_ARGS_SIZE		0 | ||||
|  | ||||
| #define GLIBTOP_MAX_PROC_ARGS		1 | ||||
|  | ||||
| typedef struct _glibtop_array		glibtop_proc_args; | ||||
|  | ||||
| /* glibtop_proc_map */ | ||||
|  | ||||
| #define GLIBTOP_PROC_MAP_NUMBER		GLIBTOP_ARRAY_NUMBER | ||||
| #define GLIBTOP_PROC_MAP_SIZE		GLIBTOP_ARRAY_SIZE | ||||
| #define GLIBTOP_PROC_MAP_TOTAL		GLIBTOP_ARRAY_TOTAL | ||||
|  | ||||
| #define GLIBTOP_MAX_PROC_MAP		GLIBTOP_MAX_ARRAY | ||||
|  | ||||
| typedef struct _glibtop_array		glibtop_proc_map; | ||||
|  | ||||
| /* glibtop_interface_names */ | ||||
|  | ||||
| #define GLIBTOP_INTERFACE_NAMES_NUMBER	GLIBTOP_ARRAY_NUMBER | ||||
| #define GLIBTOP_INTERFACE_NAMES_SIZE	GLIBTOP_ARRAY_SIZE | ||||
| #define GLIBTOP_INTERFACE_NAMES_TOTAL	GLIBTOP_ARRAY_TOTAL | ||||
|  | ||||
| #define GLIBTOP_MAX_INTERFACE_NAMES	GLIBTOP_MAX_ARRAY | ||||
|  | ||||
| typedef struct _glibtop_array		glibtop_interface_names; | ||||
|  | ||||
| #endif | ||||
| @@ -41,9 +41,16 @@ G_BEGIN_DECLS | ||||
| #define GLIBTOP_XCPU_NICE	8 | ||||
| #define GLIBTOP_XCPU_SYS	9 | ||||
| #define GLIBTOP_XCPU_IDLE	10 | ||||
| #define GLIBTOP_XCPU_FLAGS  11 | ||||
| #define GLIBTOP_XCPU_FLAGS	11 | ||||
|  | ||||
| #define GLIBTOP_MAX_CPU		12 | ||||
| #define GLIBTOP_CPU_IOWAIT	12 | ||||
| #define GLIBTOP_CPU_IRQ		13 | ||||
| #define GLIBTOP_CPU_SOFTIRQ	14 | ||||
| #define GLIBTOP_XCPU_IOWAIT	15 | ||||
| #define GLIBTOP_XCPU_IRQ	16 | ||||
| #define GLIBTOP_XCPU_SOFTIRQ	17 | ||||
|  | ||||
| #define GLIBTOP_MAX_CPU		18 | ||||
|  | ||||
| /* Nobody should really be using more than 4 processors. */ | ||||
| #define GLIBTOP_NCPU		4 | ||||
| @@ -58,12 +65,18 @@ struct _glibtop_cpu | ||||
| 		nice,				/* GLIBTOP_CPU_NICE		*/ | ||||
| 		sys,				/* GLIBTOP_CPU_SYS		*/ | ||||
| 		idle,				/* GLIBTOP_CPU_IDLE		*/ | ||||
| 		iowait,				/* GLIBTOP_CPU_IOWAIT		*/ | ||||
| 		irq,				/* GLIBTOP_CPU_IRQ		*/ | ||||
| 		softirq,			/* GLIBTOP_CPU_SOFTIRQ		*/ | ||||
| 		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		*/ | ||||
| 		xcpu_iowait [GLIBTOP_NCPU],	/* GLIBTOP_XCPU_IOWAIT		*/ | ||||
| 		xcpu_irq [GLIBTOP_NCPU],	/* GLIBTOP_XCPU_IRQ		*/ | ||||
| 		xcpu_softirq  [GLIBTOP_NCPU],	/* GLIBTOP_XCPU_SOFTIRQ		*/ | ||||
| 		xcpu_flags;	                /* GLIBTOP_XCPU_IDLE		*/ | ||||
| }; | ||||
|  | ||||
| @@ -85,16 +98,6 @@ 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 | ||||
|  | ||||
| G_END_DECLS | ||||
|  | ||||
|   | ||||
| @@ -28,108 +28,20 @@ | ||||
|  | ||||
| G_BEGIN_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, const char *format, va_list args); | ||||
| void glibtop_warn_vr (glibtop *server, const char *format, va_list args); | ||||
| void glibtop_error_io_vr (glibtop *server, const char *format, int, va_list args); | ||||
| void glibtop_warn_io_vr (glibtop *server, const char *format, int, va_list args); | ||||
|  | ||||
| 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_r (glibtop *server, const char *format, ...) G_GNUC_PRINTF(2, 3); | ||||
| void glibtop_warn_r (glibtop *server, const char *format, ...) G_GNUC_PRINTF(2, 3); | ||||
| void glibtop_error_io_r (glibtop *server, const char *format, ...) G_GNUC_PRINTF(2, 3); | ||||
| void glibtop_warn_io_r (glibtop *server, const char *format, ...) G_GNUC_PRINTF(2, 3); | ||||
|  | ||||
| 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__ */ | ||||
| void glibtop_error (const char *format, ...) G_GNUC_PRINTF(1, 2); | ||||
| void glibtop_warn (const char *format, ...) G_GNUC_PRINTF(1, 2); | ||||
| void glibtop_error_io (const char *format, ...) G_GNUC_PRINTF(1, 2); | ||||
| void glibtop_warn_io (const char *format, ...) G_GNUC_PRINTF(1, 2); | ||||
|  | ||||
| G_END_DECLS | ||||
|  | ||||
|   | ||||
| @@ -34,8 +34,9 @@ G_BEGIN_DECLS | ||||
| #define GLIBTOP_FSUSAGE_FILES		3 | ||||
| #define GLIBTOP_FSUSAGE_FFREE		4 | ||||
| #define GLIBTOP_FSUSAGE_BLOCK_SIZE	5 | ||||
|  | ||||
| #define GLIBTOP_MAX_FSUSAGE		6 | ||||
| #define GLIBTOP_FSUSAGE_READ           6 | ||||
| #define GLIBTOP_FSUSAGE_WRITE          7 | ||||
| #define GLIBTOP_MAX_FSUSAGE		8 | ||||
|  | ||||
|  | ||||
| typedef struct _glibtop_fsusage		glibtop_fsusage; | ||||
| @@ -49,6 +50,7 @@ struct _glibtop_fsusage | ||||
| 		files,		/* Total file nodes. */ | ||||
| 		ffree;		/* Free file nodes. */ | ||||
| 	guint32	block_size;	/* Size of a block in bytes. */ | ||||
| 	guint64 read, write;    /* Total blocks read and written */ | ||||
| }; | ||||
|  | ||||
| #define glibtop_get_fsusage(fsusage,disk)	glibtop_get_fsusage_l(glibtop_global_server, fsusage, disk) | ||||
| @@ -58,16 +60,6 @@ struct _glibtop_fsusage | ||||
| 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 | ||||
|  | ||||
| G_END_DECLS | ||||
|  | ||||
|   | ||||
| @@ -1,50 +0,0 @@ | ||||
| /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */ | ||||
|  | ||||
| /* $Id$ */ | ||||
|  | ||||
| /* Copyright (C) 1998-99 Martin Baulig | ||||
|    This file is part of LibGTop 1.0. | ||||
|  | ||||
|    Contributed by Martin Baulig <martin@home-of-linux.org>, April 1998. | ||||
|  | ||||
|    LibGTop is free software; you can redistribute it and/or modify it | ||||
|    under the terms of the GNU General Public License as published by | ||||
|    the Free Software Foundation; either version 2 of the License, | ||||
|    or (at your option) any later version. | ||||
|  | ||||
|    LibGTop is distributed in the hope that it will be useful, but WITHOUT | ||||
|    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||||
|    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License | ||||
|    for more details. | ||||
|  | ||||
|    You should have received a copy of the GNU General Public License | ||||
|    along with LibGTop; see the file COPYING. If not, write to the | ||||
|    Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||||
|    Boston, MA 02111-1307, USA. | ||||
| */ | ||||
|  | ||||
| #ifndef __GLIBTOP_GLIB_ARRAYS_H__ | ||||
| #define __GLIBTOP_GLIB_ARRAYS_H__ | ||||
|  | ||||
| #include <glibtop.h> | ||||
| #include <glibtop/array.h> | ||||
| #include <glibtop/global.h> | ||||
|  | ||||
| #include <glib.h> | ||||
|  | ||||
| G_BEGIN_DECLS | ||||
|  | ||||
| GPtrArray * | ||||
| glibtop_get_proc_args_as_array_l (glibtop_client *client, pid_t pid); | ||||
|  | ||||
| GArray * | ||||
| glibtop_get_proclist_as_array_l (glibtop_client *client, int64_t which, int64_t arg); | ||||
|  | ||||
| GPtrArray * | ||||
| glibtop_get_proc_map_as_array_l (glibtop_client *client, pid_t pid); | ||||
|  | ||||
| GPtrArray * | ||||
| glibtop_get_mountlist_as_array_l (glibtop_client *client, int all_fs); | ||||
|  | ||||
| G_END_DECLS | ||||
| #endif | ||||
| @@ -1,203 +0,0 @@ | ||||
| /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */ | ||||
|  | ||||
| /* $Id$ */ | ||||
|  | ||||
| /* Copyright (C) 1998-99 Martin Baulig | ||||
|    This file is part of LibGTop 1.0. | ||||
|  | ||||
|    Contributed by Martin Baulig <martin@home-of-linux.org>, April 1998. | ||||
|  | ||||
|    LibGTop is free software; you can redistribute it and/or modify it | ||||
|    under the terms of the GNU General Public License as published by | ||||
|    the Free Software Foundation; either version 2 of the License, | ||||
|    or (at your option) any later version. | ||||
|  | ||||
|    LibGTop is distributed in the hope that it will be useful, but WITHOUT | ||||
|    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||||
|    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License | ||||
|    for more details. | ||||
|  | ||||
|    You should have received a copy of the GNU General Public License | ||||
|    along with LibGTop; see the file COPYING. If not, write to the | ||||
|    Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||||
|    Boston, MA 02111-1307, USA. | ||||
| */ | ||||
|  | ||||
| #ifndef __GLIBTOP_INTERFACES_H__ | ||||
| #define __GLIBTOP_INTERFACES_H__ | ||||
|  | ||||
| #include <glibtop.h> | ||||
| #include <glibtop/global.h> | ||||
|  | ||||
| #include <glibtop/compat_10.h> | ||||
| #include <glibtop/array.h> | ||||
|  | ||||
| G_BEGIN_DECLS | ||||
|  | ||||
| #define GLIBTOP_INTERFACE_IF_FLAGS	0 | ||||
| #define GLIBTOP_INTERFACE_TRANSPORT	1 | ||||
| #define GLIBTOP_INTERFACE_TYPE		2 | ||||
| #define GLIBTOP_INTERFACE_NUMBER	3 | ||||
| #define GLIBTOP_INTERFACE_INSTANCE	4 | ||||
| #define GLIBTOP_INTERFACE_NUM_LOGICAL	5 | ||||
| #define GLIBTOP_INTERFACE_NAME		6 | ||||
|  | ||||
| #define GLIBTOP_MAX_INTERFACE		7 | ||||
|  | ||||
| #define GLIBTOP_IFADDR_TRANSPORT	0 | ||||
| #define GLIBTOP_IFADDR_ADDR_LEN		1 | ||||
| #define GLIBTOP_IFADDR_ADDRESS		2 | ||||
| #define GLIBTOP_IFADDR_SUBNET		3 | ||||
| #define GLIBTOP_IFADDR_SCOPE		4 | ||||
|  | ||||
| #define GLIBTOP_MAX_IFADDR		5 | ||||
|  | ||||
| typedef struct _glibtop_interface	glibtop_interface; | ||||
| typedef struct _glibtop_ifaddr		glibtop_ifaddr; | ||||
|  | ||||
| typedef enum _glibtop_interface_type	glibtop_interface_type; | ||||
| typedef enum _glibtop_transport		glibtop_transport; | ||||
| typedef enum _glibtop_protocol		glibtop_protocol; | ||||
|  | ||||
| typedef enum _glibtop_ipv6_scope	glibtop_ipv6_scope; | ||||
|  | ||||
| typedef enum _glibtop_strategy		glibtop_strategy; | ||||
| typedef enum _glibtop_interface_flags	glibtop_interface_flags; | ||||
|  | ||||
| enum _glibtop_protocol { | ||||
|     GLIBTOP_PROTOCOL_OTHERS	= 0, | ||||
|     GLIBTOP_PROTOCOL_ICMP	= 1 << 0, | ||||
|     GLIBTOP_PROTOCOL_TCP	= 1 << 1, | ||||
|     GLIBTOP_PROTOCOL_UDP	= 1 << 2, | ||||
|     GLIBTOP_PROTOCOL_IGMP	= 1 << 3, | ||||
|     GLIBTOP_PROTOCOL_RAW	= 1 << 4, | ||||
|     GLIBTOP_PROTOCOL_ICMP6	= 1 << 5, | ||||
|     GLIBTOP_PROTOCOL_TCP6	= 1 << 6, | ||||
|     GLIBTOP_PROTOCOL_UDP6	= 1 << 7, | ||||
|     GLIBTOP_PROTOCOL_IGMP6	= 1 << 8, | ||||
|     GLIBTOP_PROTOCOL_RAW6	= 1 << 9 | ||||
| }; | ||||
|  | ||||
| enum _glibtop_transport { | ||||
|     GLIBTOP_TRANSPORT_DEFAULT	= 0, | ||||
|     GLIBTOP_TRANSPORT_IPV4	= 1 << 0, | ||||
|     GLIBTOP_TRANSPORT_IPV6	= 1 << 1, | ||||
|     GLIBTOP_TRANSPORT_IPX	= 1 << 2, | ||||
|     GLIBTOP_TRANSPORT_X25	= 1 << 3, | ||||
|     GLIBTOP_TRANSPORT_DECNET	= 1 << 4, | ||||
|     GLIBTOP_TRANSPORT_APPLETALK	= 1 << 5, | ||||
|     GLIBTOP_TRANSPORT_NETBEUI	= 1 << 6 | ||||
| }; | ||||
|  | ||||
| #define GLIBTOP_TRANSPORT_ALL	GLIBTOP_UNLIMITED | ||||
| #define GLIBTOP_PROTOCOL_ALL	GLIBTOP_UNLIMITED | ||||
|  | ||||
| enum _glibtop_interface_type { | ||||
|     GLIBTOP_INTERFACE_ALL		= 0, | ||||
|     GLIBTOP_INTERFACE_OTHER, | ||||
|     /* Network interfaces */ | ||||
|     GLIBTOP_INTERFACE_ETHERNET		= 101, | ||||
|     GLIBTOP_INTERFACE_FDDI, | ||||
|     GLIBTOP_INTERFACE_FRAME_RELAY, | ||||
|     GLIBTOP_INTERFACE_TOKEN_RING, | ||||
|     GLIBTOP_INTERFACE_ARCNET, | ||||
|     GLIBTOP_INTERFACE_ATM, | ||||
|     /* Dummy interfaces */ | ||||
|     GLIBTOP_INTERFACE_LOOPBACK		= 501, | ||||
|     GLIBTOP_INTERFACE_DUMMY, | ||||
|     /* Dialup interfaces */ | ||||
|     GLIBTOP_INTERFACE_PARA		= 801, | ||||
|     GLIBTOP_INTERFACE_SLIP, | ||||
|     GLIBTOP_INTERFACE_PPP, | ||||
|     GLIBTOP_INTERFACE_ISDN | ||||
| }; | ||||
|  | ||||
| enum _glibtop_ipv6_scope { | ||||
|     GLIBTOP_IPV6_SCOPE_GLOBAL		= 0, | ||||
|     GLIBTOP_IPV6_SCOPE_LOOPBACK		= 1 << 1, | ||||
|     GLIBTOP_IPV6_SCOPE_LINKLOCAL	= 1 << 2, | ||||
|     GLIBTOP_IPV6_SCOPE_SITELOCAL	= 1 << 3, | ||||
|     GLIBTOP_IPV6_SCOPE_COMPATv4		= 1 << 4, | ||||
|     GLIBTOP_IPV6_SCOPE_UNKNOWN		= 1 << 5 | ||||
| }; | ||||
|  | ||||
| enum _glibtop_strategy { | ||||
|     GLIBTOP_INTERFACES_ALL		= 0, | ||||
|     GLIBTOP_INTERFACES_BEST_MATCHING, | ||||
|     GLIBTOP_INTERFACES_ONLY_THIS_ONE, | ||||
|     GLIBTOP_INTERFACES_INCLUDE_LOGICAL	= 1 << 7 | ||||
| }; | ||||
|  | ||||
| #define GLIBTOP_STRATEGY_FLAGS_MASK	(1 << 7) | ||||
|  | ||||
| enum _glibtop_interface_flags { | ||||
|     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_ifaddr | ||||
| { | ||||
|     guint64	flags, | ||||
| 	transport;			/* GLIBTOP_IFADDR_TRANSPORT	*/ | ||||
|     u_int8_t	addr_len,		/* GLIBTOP_IFADDR_ADDR_LEN	*/ | ||||
| 	address [GLIBTOP_IFADDR_LEN];	/* GLIBTOP_IFADDR_ADDRESS	*/ | ||||
|     guint64	subnet,			/* GLIBTOP_IFADDR_SUBNET	*/ | ||||
| 	scope;				/* GLIBTOP_IFADDR_SCOPE	*/ | ||||
| }; | ||||
|  | ||||
| struct _glibtop_interface | ||||
| { | ||||
|     guint64	flags, | ||||
| 	if_flags,		/* GLIBTOP_INTERFACE_IF_FLAGS		*/ | ||||
| 	transport,		/* GLIBTOP_INTERFACE_TRANSPORT		*/ | ||||
| 	type,			/* GLIBTOP_INTERFACE_TYPE		*/ | ||||
| 	number,			/* GLIBTOP_INTERFACE_NUMBER		*/ | ||||
| 	instance,		/* GLIBTOP_INTERFACE_INSTANCE		*/ | ||||
| 	num_logical;		/* GLIBTOP_INTERFACE_NUM_LOGICAL	*/ | ||||
|     char name [GLIBTOP_INTERFACE_LEN]; | ||||
| }; | ||||
|  | ||||
| #if GLIBTOP_SUID_INTERFACE_NAMES | ||||
| #define glibtop_get_interface_names_r	glibtop_get_interface_names_p | ||||
| #else | ||||
| #define glibtop_get_interface_names_r	glibtop_get_interface_names_s | ||||
| #endif | ||||
|  | ||||
| glibtop_interface *glibtop_get_interface_names_l (glibtop_client *client, glibtop_array *array, guint64 interface, guint64 number, guint64 instance, guint64 strategy); | ||||
|  | ||||
| #if GLIBTOP_SUID_INTERFACE_NAMES | ||||
| int glibtop_init_interface_names_p (glibtop_server *server, glibtop_closure *closure); | ||||
| glibtop_interface *glibtop_get_interface_names_p (glibtop_server *server, glibtop_closure *closure, glibtop_array *array, guint64 interface, guint64 number, guint64 instance, guint64 strategy); | ||||
| #else | ||||
| int glibtop_init_interface_names_s (glibtop_server *server, glibtop_closure *closure); | ||||
| glibtop_interface *glibtop_get_interface_names_s (glibtop_server *server, glibtop_closure *closure, glibtop_array *array, guint64 interface, guint64 number, guint64 instance, guint64 strategy); | ||||
| #endif | ||||
|  | ||||
| #ifdef GLIBTOP_NAMES | ||||
|  | ||||
| /* You need to link with -lgtop_names to get this stuff here. */ | ||||
|  | ||||
| extern const char *glibtop_names_interface_names []; | ||||
| extern const unsigned glibtop_types_interface_names []; | ||||
| extern const char *glibtop_labels_interface_names []; | ||||
| extern const char *glibtop_descriptions_interface_names []; | ||||
|  | ||||
| #endif | ||||
|  | ||||
| G_END_DECLS | ||||
|  | ||||
| #endif | ||||
| @@ -65,16 +65,6 @@ 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 | ||||
|  | ||||
| G_END_DECLS | ||||
|  | ||||
|   | ||||
| @@ -73,16 +73,6 @@ 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 | ||||
|  | ||||
| G_END_DECLS | ||||
|  | ||||
|   | ||||
| @@ -65,16 +65,6 @@ 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 | ||||
|  | ||||
| G_END_DECLS | ||||
|  | ||||
|   | ||||
| @@ -71,16 +71,6 @@ 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 | ||||
|  | ||||
| G_END_DECLS | ||||
|  | ||||
|   | ||||
| @@ -1,83 +0,0 @@ | ||||
| /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */ | ||||
|  | ||||
| /* $Id$ */ | ||||
|  | ||||
| /* Copyright (C) 1998-99 Martin Baulig | ||||
|    This file is part of LibGTop 1.0. | ||||
|  | ||||
|    Contributed by Martin Baulig <martin@home-of-linux.org>, April 1998. | ||||
|  | ||||
|    LibGTop is free software; you can redistribute it and/or modify it | ||||
|    under the terms of the GNU General Public License as published by | ||||
|    the Free Software Foundation; either version 2 of the License, | ||||
|    or (at your option) any later version. | ||||
|  | ||||
|    LibGTop is distributed in the hope that it will be useful, but WITHOUT | ||||
|    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||||
|    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License | ||||
|    for more details. | ||||
|  | ||||
|    You should have received a copy of the GNU General Public License | ||||
|    along with LibGTop; see the file COPYING. If not, write to the | ||||
|    Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||||
|    Boston, MA 02111-1307, USA. | ||||
| */ | ||||
|  | ||||
| #ifndef __GLIBTOP_NETINFO_H__ | ||||
| #define __GLIBTOP_NETINFO_H__ | ||||
|  | ||||
| #include <glibtop.h> | ||||
| #include <glibtop/global.h> | ||||
|  | ||||
| G_BEGIN_DECLS | ||||
|  | ||||
| #define GLIBTOP_NETINFO_IF_FLAGS	0 | ||||
| #define GLIBTOP_NETINFO_TRANSPORT	1 | ||||
| #define GLIBTOP_NETINFO_MTU		2 | ||||
| #define GLIBTOP_NETINFO_SUBNET		3 | ||||
| #define GLIBTOP_NETINFO_ADDRESS		4 | ||||
|  | ||||
| #define GLIBTOP_MAX_NETINFO		5 | ||||
|  | ||||
| typedef struct _glibtop_netinfo	glibtop_netinfo; | ||||
|  | ||||
| #include <glibtop/interfaces.h> | ||||
|  | ||||
| struct _glibtop_netinfo | ||||
| { | ||||
|     guint64	flags, | ||||
| 	if_flags,			/* GLIBTOP_NETINFO_IF_FLAGS	*/ | ||||
| 	transport,			/* GLIBTOP_NETINFO_TRANSPORT	*/ | ||||
| 	mtu;				/* GLIBTOP_NETINFO_MTU		*/ | ||||
| }; | ||||
|  | ||||
| #if GLIBTOP_SUID_NETINFO | ||||
| #define glibtop_get_netinfo_r		glibtop_get_netinfo_p | ||||
| #else | ||||
| #define glibtop_get_netinfo_r		glibtop_get_netinfo_s | ||||
| #endif | ||||
|  | ||||
| glibtop_ifaddr *glibtop_get_netinfo_l (glibtop_client *client, glibtop_array *array, glibtop_netinfo *buf, const char *interface, guint64 transport); | ||||
|  | ||||
| #if GLIBTOP_SUID_NETINFO | ||||
| int glibtop_init_netinfo_p (glibtop_server *server, glibtop_closure *closure); | ||||
| glibtop_ifaddr *glibtop_get_netinfo_p (glibtop_server *server, glibtop_closure *closure, glibtop_array *array, glibtop_netinfo *buf, const char *interface, guint64 transport); | ||||
| #else | ||||
| int glibtop_init_netinfo_s (glibtop_server *server, glibtop_closure *closure); | ||||
| glibtop_ifaddr *glibtop_get_netinfo_s (glibtop_server *server, glibtop_closure *closure, glibtop_array *array, glibtop_netinfo *buf, const char *interface, guint64 transport); | ||||
| #endif | ||||
|  | ||||
| #ifdef GLIBTOP_NAMES | ||||
|  | ||||
| /* You need to link with -lgtop_names to get this stuff here. */ | ||||
|  | ||||
| extern const char *glibtop_names_netinfo []; | ||||
| extern const unsigned glibtop_types_netinfo []; | ||||
| extern const char *glibtop_labels_netinfo []; | ||||
| extern const char *glibtop_descriptions_netinfo []; | ||||
|  | ||||
| #endif | ||||
|  | ||||
| G_END_DECLS | ||||
|  | ||||
| #endif | ||||
							
								
								
									
										61
									
								
								include/glibtop/netlist.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								include/glibtop/netlist.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,61 @@ | ||||
| /* Copyright (C) 2004 Benoît Dejean | ||||
|    This file is part of LibGTop 2.0. | ||||
|  | ||||
|    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_NETLIST_H__ | ||||
| #define __GLIBTOP_NETLIST_H__ | ||||
|  | ||||
| #include <glibtop.h> | ||||
| #include <glibtop/global.h> | ||||
|  | ||||
| G_BEGIN_DECLS | ||||
|  | ||||
| #define GLIBTOP_NETLIST_NUMBER		0 | ||||
|  | ||||
| #define GLIBTOP_MAX_NETLIST		1 | ||||
|  | ||||
| typedef struct _glibtop_netlist	glibtop_netlist; | ||||
|  | ||||
| struct _glibtop_netlist | ||||
| { | ||||
| 	guint64 flags; | ||||
| 	guint32 number; | ||||
| }; | ||||
|  | ||||
| #define glibtop_get_netlist(netlist)	glibtop_get_netlist_l(glibtop_global_server, netlist) | ||||
|  | ||||
| #if GLIBTOP_SUID_NETLIST | ||||
| #define glibtop_get_netlist_r		glibtop_get_netlist_p | ||||
| #else | ||||
| #define glibtop_get_netlist_r		glibtop_get_netlist_s | ||||
| #endif | ||||
|  | ||||
| char** glibtop_get_netlist_l (glibtop *server, glibtop_netlist *buf); | ||||
|  | ||||
| #if GLIBTOP_SUID_NETLIST | ||||
| void glibtop_init_netlist_p (glibtop *server); | ||||
| char** glibtop_get_netlist_p (glibtop *server, glibtop_netlist *buf); | ||||
| #else | ||||
| void glibtop_init_netlist_s (glibtop *server); | ||||
| char** glibtop_get_netlist_s (glibtop *server, glibtop_netlist *buf); | ||||
| #endif | ||||
|  | ||||
|  | ||||
| G_END_DECLS | ||||
|  | ||||
| #endif | ||||
| @@ -43,8 +43,12 @@ G_BEGIN_DECLS | ||||
| #define GLIBTOP_NETLOAD_ERRORS_OUT	11 | ||||
| #define GLIBTOP_NETLOAD_ERRORS_TOTAL	12 | ||||
| #define GLIBTOP_NETLOAD_COLLISIONS	13 | ||||
| #define GLIBTOP_NETLOAD_ADDRESS6	14 | ||||
| #define GLIBTOP_NETLOAD_PREFIX6		15 | ||||
| #define GLIBTOP_NETLOAD_SCOPE6		16 | ||||
| #define GLIBTOP_NETLOAD_HWADDRESS	17 | ||||
|  | ||||
| #define GLIBTOP_MAX_NETLOAD		14 | ||||
| #define GLIBTOP_MAX_NETLOAD		18 | ||||
|  | ||||
| typedef struct _glibtop_netload	glibtop_netload; | ||||
|  | ||||
| @@ -67,14 +71,25 @@ enum { | ||||
| 	GLIBTOP_IF_FLAGS_MULTICAST | ||||
| }; | ||||
|  | ||||
| enum GLIBTOP_IF_IN6_SCOPE | ||||
| { | ||||
| 	GLIBTOP_IF_IN6_SCOPE_UNKNOWN = 0, | ||||
| 	GLIBTOP_IF_IN6_SCOPE_LINK    = 1, | ||||
| 	GLIBTOP_IF_IN6_SCOPE_SITE    = 2, | ||||
| 	GLIBTOP_IF_IN6_SCOPE_GLOBAL  = 4, | ||||
| 	GLIBTOP_IF_IN6_SCOPE_HOST    = 8 | ||||
| }; | ||||
|  | ||||
| struct _glibtop_netload | ||||
| { | ||||
| 	guint64	flags, | ||||
| 		if_flags,		/* GLIBTOP_NETLOAD_IF_FLAGS	*/ | ||||
| 		mtu,			/* GLIBTOP_NETLOAD_MTU		*/ | ||||
| 		if_flags;		/* GLIBTOP_NETLOAD_IF_FLAGS	*/ | ||||
|  | ||||
| 	guint32	mtu,			/* GLIBTOP_NETLOAD_MTU		*/ | ||||
| 		subnet,			/* GLIBTOP_NETLOAD_SUBNET	*/ | ||||
| 		address,		/* GLIBTOP_NETLOAD_ADDRESS	*/ | ||||
| 		packets_in,		/* GLIBTOP_NETLOAD_PACKETS_IN	*/ | ||||
| 		address;		/* GLIBTOP_NETLOAD_ADDRESS	*/ | ||||
|  | ||||
| 	guint64	packets_in,		/* GLIBTOP_NETLOAD_PACKETS_IN	*/ | ||||
| 		packets_out,		/* GLIBTOP_NETLOAD_PACKETS_OUT	*/ | ||||
| 		packets_total,		/* GLIBTOP_NETLOAD_PACKETS_TOTAL*/ | ||||
| 		bytes_in,		/* GLIBTOP_NETLOAD_BYTES_IN	*/ | ||||
| @@ -84,6 +99,12 @@ struct _glibtop_netload | ||||
| 		errors_out,		/* GLIBTOP_NETLOAD_ERRORS_OUT	*/ | ||||
| 		errors_total,		/* GLIBTOP_NETLOAD_ERRORS_TOTAL	*/ | ||||
| 		collisions;		/* GLIBTOP_NETLOAD_COLLISIONS	*/ | ||||
|  | ||||
| 	guint8 address6[16];		/* GLIBTOP_NETLOAD_ADDRESS6     */ | ||||
| 	guint8 prefix6[16];		/* GLIBTOP_NETLOAD_PREXIF6      */ | ||||
| 	guint8 scope6;			/* GLIBTOP_NETLOAD_SCOPE6       */ | ||||
|  | ||||
| 	guint8 hwaddress[8];		/* GLIBTOP_NETLOAD_HWADDRESS    */ | ||||
| }; | ||||
|  | ||||
| #define glibtop_get_netload(netload,interface)	glibtop_get_netload_l(glibtop_global_server, netload, interface) | ||||
| @@ -104,16 +125,6 @@ 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 | ||||
|  | ||||
| G_END_DECLS | ||||
|  | ||||
|   | ||||
| @@ -69,16 +69,6 @@ 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 | ||||
|  | ||||
| G_END_DECLS | ||||
|  | ||||
|   | ||||
| @@ -41,42 +41,50 @@ struct _glibtop_proc_args | ||||
| 		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); | ||||
|  | ||||
| #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 | ||||
| void glibtop_init_proc_args_p (glibtop *server); | ||||
|  | ||||
| char * | ||||
| glibtop_get_proc_args_p (glibtop *server, glibtop_proc_args *buf, | ||||
| # define glibtop_get_proc_args_r		glibtop_get_proc_args_p | ||||
|  | ||||
|   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 /* !GLIBTOP_SUID_PROC_ARGS */ | ||||
|  | ||||
| # define glibtop_get_proc_args_r		glibtop_get_proc_args_s | ||||
|  | ||||
|   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 /* GLIBTOP_SUID_PROC_ARGS */ | ||||
|  | ||||
|  | ||||
|  | ||||
| /* | ||||
|  * NEW functions | ||||
|  */ | ||||
|  | ||||
| char ** | ||||
| glibtop_get_proc_argv_l (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 | ||||
| #define glibtop_get_proc_argv(proc_args,pid,max_len) glibtop_get_proc_argv_l(glibtop_global_server, proc_args, pid, max_len) | ||||
|  | ||||
| #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 | ||||
|  | ||||
| G_END_DECLS | ||||
|  | ||||
|   | ||||
| @@ -1,81 +0,0 @@ | ||||
| /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */ | ||||
|  | ||||
| /* $Id$ */ | ||||
|  | ||||
| /* Copyright (C) 1998-99 Martin Baulig | ||||
|    This file is part of LibGTop 1.0. | ||||
|  | ||||
|    Contributed by Martin Baulig <martin@home-of-linux.org>, April 1998. | ||||
|  | ||||
|    LibGTop is free software; you can redistribute it and/or modify it | ||||
|    under the terms of the GNU General Public License as published by | ||||
|    the Free Software Foundation; either version 2 of the License, | ||||
|    or (at your option) any later version. | ||||
|  | ||||
|    LibGTop is distributed in the hope that it will be useful, but WITHOUT | ||||
|    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||||
|    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License | ||||
|    for more details. | ||||
|  | ||||
|    You should have received a copy of the GNU General Public License | ||||
|    along with LibGTop; see the file COPYING. If not, write to the | ||||
|    Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||||
|    Boston, MA 02111-1307, USA. | ||||
| */ | ||||
|  | ||||
| #ifndef __GLIBTOP_PROCCWD_H__ | ||||
| #define __GLIBTOP_PROCCWD_H__ | ||||
|  | ||||
| #include <glibtop.h> | ||||
| #include <glibtop/global.h> | ||||
|  | ||||
| #include <glibtop/array.h> | ||||
|  | ||||
| G_BEGIN_DECLS | ||||
|  | ||||
| #define GLIBTOP_PROC_CWD_SIZE			0 | ||||
| #define GLIBTOP_PROC_CWD_DEVICE			1 | ||||
| #define GLIBTOP_PROC_CWD_INODE			2 | ||||
|  | ||||
| #define GLIBTOP_MAX_PROC_CWD			3 | ||||
|  | ||||
| typedef struct _glibtop_proc_cwd	glibtop_proc_cwd; | ||||
|  | ||||
| /* Cwd stuff */ | ||||
|  | ||||
| struct _glibtop_proc_cwd | ||||
| { | ||||
|     guint64	flags, | ||||
| 	size, | ||||
| 	device, | ||||
| 	inode; | ||||
| }; | ||||
|  | ||||
| #if GLIBTOP_SUID_PROC_CWD | ||||
| #define glibtop_get_proc_cwd_r		glibtop_get_proc_cwd_p | ||||
| #else | ||||
| #define glibtop_get_proc_cwd_r		glibtop_get_proc_cwd_s | ||||
| #endif | ||||
|  | ||||
| char *glibtop_get_proc_cwd_l (glibtop_client *client, glibtop_proc_cwd *buf, pid_t pid); | ||||
|  | ||||
| #if GLIBTOP_SUID_PROC_CWD | ||||
| int glibtop_init_proc_cwd_p (glibtop_server *server, glibtop_closure *closure); | ||||
| char *glibtop_get_proc_cwd_p (glibtop_server *server, glibtop_closure *closure, glibtop_proc_cwd *buf, pid_t pid); | ||||
| #else | ||||
| int glibtop_init_proc_cwd_s (glibtop_server *server, glibtop_closure *closure); | ||||
| char *glibtop_get_proc_cwd_s (glibtop_server *server, glibtop_closure *closure, glibtop_proc_cwd *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_cwd []; | ||||
| extern const unsigned glibtop_types_proc_cwd []; | ||||
| extern const char *glibtop_labels_proc_cwd []; | ||||
| extern const char *glibtop_descriptions_proc_cwd []; | ||||
|  | ||||
| #endif | ||||
|  | ||||
| #endif | ||||
| @@ -82,16 +82,6 @@ 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 | ||||
|  | ||||
| G_END_DECLS | ||||
|  | ||||
|   | ||||
| @@ -72,32 +72,22 @@ struct _glibtop_proclist | ||||
|  | ||||
| unsigned * | ||||
| glibtop_get_proclist_l (glibtop *server, glibtop_proclist *buf, | ||||
| 			int64_t which, int64_t arg); | ||||
| 			gint64 which, gint64 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); | ||||
| 			gint64 which, gint64 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); | ||||
| 			gint64 which, gint64 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 | ||||
|  | ||||
| G_END_DECLS | ||||
|  | ||||
|   | ||||
| @@ -94,16 +94,6 @@ 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 | ||||
|  | ||||
| G_END_DECLS | ||||
|  | ||||
|   | ||||
| @@ -73,16 +73,6 @@ 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 | ||||
|  | ||||
| G_END_DECLS | ||||
|  | ||||
|   | ||||
							
								
								
									
										122
									
								
								include/glibtop/procopenfiles.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										122
									
								
								include/glibtop/procopenfiles.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,122 @@ | ||||
| /* $Id$ */ | ||||
|  | ||||
| /* Copyright (C) 1998-99 Martin Baulig | ||||
|    Copyright (C) 2004 Nicolás Lichtmaier | ||||
|    This file is part of LibGTop 1.0. | ||||
|  | ||||
|    Contributed by Martin Baulig <martin@home-of-linux.org>, April 1998. | ||||
|  | ||||
|    Modified by Nicolás Lichtmaier to give open process files. | ||||
|  | ||||
|    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_OPEN_FILES_H__ | ||||
| #define __GLIBTOP_PROC_OPEN_FILES_H__ | ||||
|  | ||||
| #include <glibtop.h> | ||||
| #include <glibtop/global.h> | ||||
|  | ||||
|  | ||||
| G_BEGIN_DECLS | ||||
|  | ||||
| #define GLIBTOP_PROC_OPEN_FILES_NUMBER		0 | ||||
| #define GLIBTOP_PROC_OPEN_FILES_TOTAL		1 | ||||
| #define GLIBTOP_PROC_OPEN_FILES_SIZE		2 | ||||
|  | ||||
| #define GLIBTOP_MAX_PROC_OPEN_FILES		3 | ||||
|  | ||||
| #define GLIBTOP_FILE_ENTRY_FD				0 | ||||
| #define GLIBTOP_FILE_ENTRY_NAME				1 | ||||
| #define GLIBTOP_FILE_ENTRY_TYPE				2 | ||||
| #define GLIBTOP_FILE_ENTRY_INETSOCKET_DST_HOST		3 | ||||
| #define GLIBTOP_FILE_ENTRY_INETSOCKET_DST_PORT		4 | ||||
|  | ||||
| #define GLIBTOP_MAX_OPEN_FILE_ENTRY		5 | ||||
|  | ||||
| #define GLIBTOP_OPEN_FILENAME_LEN	215 | ||||
|  /* ready for IPv6 */ | ||||
| #define GLIBTOP_OPEN_DEST_HOST_LEN	46 | ||||
|  | ||||
| enum glibtop_file_type { | ||||
| 	GLIBTOP_FILE_TYPE_FILE		= 1, | ||||
| 	GLIBTOP_FILE_TYPE_PIPE		= 2, | ||||
| 	GLIBTOP_FILE_TYPE_INETSOCKET	= 4, | ||||
| 	GLIBTOP_FILE_TYPE_LOCALSOCKET	= 8 | ||||
| }; | ||||
|  | ||||
| typedef struct _glibtop_open_files_entry glibtop_open_files_entry; | ||||
|  | ||||
| typedef struct _glibtop_proc_open_files	glibtop_proc_open_files; | ||||
|  | ||||
| struct _glibtop_open_files_entry | ||||
| { | ||||
| 	int fd; | ||||
| 	guint16 type; /* An "enum glibtop_file_type" value. */ | ||||
| 	union { | ||||
| 		/* When type == GLIBTOP_FILE_TYPE_INETSOCKET */ | ||||
| 		struct { | ||||
| 			char dest_host[GLIBTOP_OPEN_DEST_HOST_LEN+1]; | ||||
| 			int dest_port; | ||||
| 		} sock; | ||||
|  | ||||
| 		/* When type == GLIBTOP_FILE_TYPE_FILE */ | ||||
| 		struct { | ||||
| 			char name[GLIBTOP_OPEN_FILENAME_LEN+1]; | ||||
| 		} file; | ||||
|  | ||||
| 		/* When type == GLIBTOP_FILE_TYPE_LOCALSOCKET */ | ||||
| 		struct { | ||||
| 			char name[GLIBTOP_OPEN_FILENAME_LEN+1]; | ||||
| 		} localsock; | ||||
|  | ||||
| 	} info; | ||||
| }; | ||||
|  | ||||
| struct _glibtop_proc_open_files | ||||
| { | ||||
| 	guint64	flags, | ||||
| 		number,			/* GLIBTOP_PROC_OPEN_FILES_NUMBER */ | ||||
| 		total,			/* GLIBTOP_PROC_OPEN_FILES_TOTAL  */ | ||||
| 		size;			/* GLIBTOP_PROC_OPEN_FILES_SIZE   */ | ||||
| }; | ||||
|  | ||||
| #define glibtop_get_proc_open_files(proc_open_files,pid) glibtop_get_proc_open_files_l(glibtop_global_server, proc_open_files, pid) | ||||
|  | ||||
| #if GLIBTOP_SUID_PROC_FILE | ||||
| #define glibtop_get_proc_open_files_r		glibtop_get_proc_open_files_p | ||||
| #else | ||||
| #define glibtop_get_proc_open_files_r		glibtop_get_proc_open_files_s | ||||
| #endif | ||||
|  | ||||
| glibtop_open_files_entry * | ||||
| glibtop_get_proc_open_files_l (glibtop *server, glibtop_proc_open_files *buf, pid_t pid); | ||||
|  | ||||
| #if GLIBTOP_SUID_PROC_FILE | ||||
| void glibtop_init_proc_open_files_p (glibtop *server); | ||||
|  | ||||
| glibtop_open_files_entry * | ||||
| glibtop_get_proc_open_files_p (glibtop *server, glibtop_proc_open_files *buf, pid_t pid); | ||||
| #else | ||||
| void glibtop_init_proc_open_files_s (glibtop *server); | ||||
|  | ||||
| glibtop_open_files_entry * | ||||
| glibtop_get_proc_open_files_s (glibtop *server, glibtop_proc_open_files *buf, pid_t pid); | ||||
| #endif | ||||
|  | ||||
| G_END_DECLS | ||||
|  | ||||
| #endif | ||||
| @@ -76,16 +76,6 @@ 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 | ||||
|  | ||||
| G_END_DECLS | ||||
|  | ||||
|   | ||||
| @@ -67,16 +67,6 @@ 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 | ||||
|  | ||||
| G_END_DECLS | ||||
|  | ||||
|   | ||||
| @@ -47,6 +47,7 @@ G_BEGIN_DECLS | ||||
| #define GLIBTOP_PROCESS_ZOMBIE                  8 | ||||
| #define GLIBTOP_PROCESS_STOPPED                 16 | ||||
| #define GLIBTOP_PROCESS_SWAPPING                32 | ||||
| #define GLIBTOP_PROCESS_DEAD                    64 | ||||
|  | ||||
| typedef struct _glibtop_proc_state	glibtop_proc_state; | ||||
|  | ||||
| @@ -91,16 +92,6 @@ 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 | ||||
|  | ||||
| G_END_DECLS | ||||
|  | ||||
|   | ||||
| @@ -88,16 +88,6 @@ 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 | ||||
|  | ||||
| G_END_DECLS | ||||
|  | ||||
|   | ||||
| @@ -59,7 +59,7 @@ typedef struct _glibtop_proc_uid	glibtop_proc_uid; | ||||
| struct _glibtop_proc_uid | ||||
| { | ||||
| 	guint64 flags; | ||||
| 	int uid,		/* user id */ | ||||
| 	gint32 uid,		/* user id */ | ||||
| 		euid,		/* effective user id */ | ||||
| 		gid,		/* group id */ | ||||
| 		egid,		/* effective group id */ | ||||
| @@ -98,16 +98,6 @@ 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 | ||||
|  | ||||
| G_END_DECLS | ||||
|  | ||||
|   | ||||
| @@ -77,16 +77,6 @@ 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 | ||||
|  | ||||
| G_END_DECLS | ||||
|  | ||||
|   | ||||
| @@ -67,16 +67,6 @@ 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 | ||||
|  | ||||
| G_END_DECLS | ||||
|  | ||||
|   | ||||
| @@ -67,16 +67,6 @@ 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 | ||||
|  | ||||
| G_END_DECLS | ||||
|  | ||||
|   | ||||
| @@ -51,8 +51,10 @@ G_BEGIN_DECLS | ||||
| #define GLIBTOP_SYSDEPS_FSUSAGE		20 | ||||
| #define GLIBTOP_SYSDEPS_NETLOAD		21 | ||||
| #define GLIBTOP_SYSDEPS_PPP		22 | ||||
| #define GLIBTOP_SYSDEPS_NETLIST		23 | ||||
| #define GLIBTOP_SYSDEPS_PROC_OPEN_FILES	24 | ||||
|  | ||||
| #define GLIBTOP_MAX_SYSDEPS		23 | ||||
| #define GLIBTOP_MAX_SYSDEPS		25 | ||||
|  | ||||
| #define GLIBTOP_SYSDEPS_ALL		((1 << GLIBTOP_MAX_SYSDEPS) - 1) | ||||
|  | ||||
| @@ -84,8 +86,10 @@ struct _glibtop_sysdeps | ||||
| 		proc_segment,		/* glibtop_proc_segment	*/ | ||||
| 		proc_args,		/* glibtop_proc_args	*/ | ||||
| 		proc_map,		/* glibtop_proc_map	*/ | ||||
| 		proc_open_files,	/* glibtop_proc_open_files */ | ||||
| 		mountlist,		/* glibtop_mountlist	*/ | ||||
| 		fsusage,		/* glibtop_fsusage	*/ | ||||
| 		netlist,		/* glibtop_netlist	*/ | ||||
| 		netload,		/* glibtop_netload	*/ | ||||
| 		ppp;			/* glibtop_ppp		*/ | ||||
| }; | ||||
| @@ -94,16 +98,6 @@ struct _glibtop_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 | ||||
|  | ||||
| G_END_DECLS | ||||
|  | ||||
|   | ||||
| @@ -43,11 +43,13 @@ | ||||
| #include <glibtop/procsegment.h> | ||||
| #include <glibtop/procargs.h> | ||||
| #include <glibtop/procmap.h> | ||||
| #include <glibtop/procopenfiles.h> | ||||
|  | ||||
| #include <glibtop/mountlist.h> | ||||
| #include <glibtop/fsusage.h> | ||||
|  | ||||
| #include <glibtop/netload.h> | ||||
| #include <glibtop/netlist.h> | ||||
| #include <glibtop/ppp.h> | ||||
|  | ||||
| G_BEGIN_DECLS | ||||
| @@ -76,8 +78,10 @@ union _glibtop_union | ||||
| 	glibtop_proc_map	proc_map; | ||||
| 	glibtop_mountlist	mountlist; | ||||
| 	glibtop_fsusage		fsusage; | ||||
| 	glibtop_netlist		netlist; | ||||
| 	glibtop_netload		netload; | ||||
| 	glibtop_ppp		ppp; | ||||
| 	glibtop_proc_open_files proc_open_files; | ||||
| }; | ||||
|  | ||||
| G_END_DECLS | ||||
|   | ||||
| @@ -63,16 +63,6 @@ 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 | ||||
|  | ||||
| G_END_DECLS | ||||
|  | ||||
|   | ||||
| @@ -23,9 +23,6 @@ | ||||
| #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)." | ||||
|  | ||||
|   | ||||
| @@ -1,14 +0,0 @@ | ||||
| 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 +0,0 @@ | ||||
| *.flags | ||||
| @@ -1,22 +0,0 @@ | ||||
| # | ||||
| # 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 | ||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -1,242 +0,0 @@ | ||||
| #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 | ||||
| @@ -1,30 +0,0 @@ | ||||
| /* | ||||
|  * 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); | ||||
| @@ -1,4 +0,0 @@ | ||||
| /* | ||||
|  * linux/libgtop/main.c | ||||
|  * Copyright (C) 1999 Martin Baulig | ||||
|  */ | ||||
| @@ -1,81 +0,0 @@ | ||||
| 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} | ||||
|  }; | ||||
|   | ||||
| @@ -1,93 +0,0 @@ | ||||
| diff -ru kernel-source-2.2.12/Makefile hacker-2.2.12/Makefile | ||||
| --- kernel-source-2.2.12/Makefile	Thu Aug 26 02:29:45 1999 | ||||
| +++ hacker-2.2.12/Makefile	Sat Dec 18 17:33:04 1999 | ||||
| @@ -113,6 +113,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 | ||||
|   | ||||
| @@ -202,6 +203,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: | ||||
| @@ -222,6 +228,7 @@ | ||||
|  		$(FILESYSTEMS) \ | ||||
|  		$(NETWORKS) \ | ||||
|  		$(DRIVERS) \ | ||||
| +		$(EXTRAS) \ | ||||
|  		$(LIBS) \ | ||||
|  		--end-group \ | ||||
|  		-o vmlinux | ||||
| diff -ru kernel-source-2.2.12/arch/i386/config.in hacker-2.2.12/arch/i386/config.in | ||||
| --- kernel-source-2.2.12/arch/i386/config.in	Thu Oct 14 00:57:46 1999 | ||||
| +++ hacker-2.2.12/arch/i386/config.in	Sat Dec 18 17:33:04 1999 | ||||
| @@ -88,6 +88,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 kernel-source-2.2.12/include/linux/autoconf.h hacker-2.2.12/include/linux/autoconf.h | ||||
| --- kernel-source-2.2.12/include/linux/autoconf.h	Sat Dec  4 01:20:30 1999 | ||||
| +++ hacker-2.2.12/include/linux/autoconf.h	Sat Dec 18 17:41:44 1999 | ||||
| @@ -53,6 +53,8 @@ | ||||
|  #define CONFIG_SYSVIPC 1 | ||||
|  #define CONFIG_BSD_PROCESS_ACCT 1 | ||||
|  #define CONFIG_SYSCTL 1 | ||||
| +#undef  CONFIG_LIBGTOP | ||||
| +#define CONFIG_LIBGTOP_MODULE 1 | ||||
|  #undef  CONFIG_BINFMT_AOUT | ||||
|  #define CONFIG_BINFMT_AOUT_MODULE 1 | ||||
|  #define CONFIG_BINFMT_ELF 1 | ||||
| diff -ru kernel-source-2.2.12/include/linux/sysctl.h hacker-2.2.12/include/linux/sysctl.h | ||||
| --- kernel-source-2.2.12/include/linux/sysctl.h	Mon Aug  9 21:05:13 1999 | ||||
| +++ hacker-2.2.12/include/linux/sysctl.h	Sat Dec 18 17:34:38 1999 | ||||
| @@ -57,7 +57,8 @@ | ||||
|  	CTL_FS=5,		/* Filesystems */ | ||||
|  	CTL_DEBUG=6,		/* Debugging */ | ||||
|  	CTL_DEV=7,		/* Devices */ | ||||
| -	CTL_BUS=8		/* Buses */ | ||||
| +	CTL_BUS=8,		/* Buses */ | ||||
| +	CTL_LIBGTOP=408		/* LibGTop */ | ||||
|  }; | ||||
|   | ||||
|  /* CTL_BUS names: */ | ||||
| diff -ru kernel-source-2.2.12/kernel/sysctl.c hacker-2.2.12/kernel/sysctl.c | ||||
| --- kernel-source-2.2.12/kernel/sysctl.c	Mon Aug  9 21:05:13 1999 | ||||
| +++ hacker-2.2.12/kernel/sysctl.c	Sat Dec 18 17:33:04 1999 | ||||
| @@ -83,7 +83,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: */ | ||||
|   | ||||
| @@ -149,6 +151,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
									
									
									
									
									
								
							
							
						
						
									
										188
									
								
								kernel/table.h
									
									
									
									
									
								
							| @@ -1,188 +0,0 @@ | ||||
| #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 */ | ||||
|  | ||||
|  | ||||
| @@ -1,13 +0,0 @@ | ||||
| # | ||||
| # 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 | ||||
| @@ -1,21 +0,0 @@ | ||||
| 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 | ||||
| @@ -1,706 +0,0 @@ | ||||
| /* | ||||
|  *  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 | ||||
| @@ -1,51 +0,0 @@ | ||||
| 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) \ | ||||
| @@ -1,468 +0,0 @@ | ||||
| /* | ||||
|  * 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; | ||||
| } | ||||
| @@ -1,324 +0,0 @@ | ||||
| #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 +0,0 @@ | ||||
| #define _TABLE_VERSION	1 | ||||
| @@ -1,4 +0,0 @@ | ||||
| kernel.patch | ||||
| .main.o.flags | ||||
| .table.o.flags | ||||
| .module.o.flags | ||||
| @@ -1,16 +0,0 @@ | ||||
| # | ||||
| # 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 | ||||
| @@ -1,21 +0,0 @@ | ||||
| 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 | ||||
| @@ -1,571 +0,0 @@ | ||||
| /* | ||||
|  *  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 | ||||
| @@ -1,61 +0,0 @@ | ||||
| /* | ||||
|  * 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); | ||||
| } | ||||
| @@ -1,607 +0,0 @@ | ||||
| /* | ||||
|  * 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; | ||||
| } | ||||
| @@ -1,344 +0,0 @@ | ||||
| #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 +0,0 @@ | ||||
| #define _TABLE_VERSION	1 | ||||
| @@ -1 +0,0 @@ | ||||
| #define _TABLE_VERSION	1 | ||||
| @@ -5,3 +5,4 @@ Makefile.in | ||||
| libgtop.la | ||||
| *.lo | ||||
| lib.c | ||||
| error.loT | ||||
|   | ||||
| @@ -31,13 +31,11 @@ void * | ||||
| glibtop_call_l (glibtop *server, unsigned command, size_t send_size, | ||||
| 		const void *send_buf, size_t recv_size, void *recv_buf) | ||||
| { | ||||
| 	glibtop_command cmnd; | ||||
| 	glibtop_response response; | ||||
| 	glibtop_command cmnd = {0}; | ||||
| 	glibtop_response response = {0}; | ||||
|  | ||||
| 	glibtop_init_r (&server, 0, 0); | ||||
|  | ||||
| 	memset (&cmnd, 0, sizeof (glibtop_command)); | ||||
|  | ||||
| 	cmnd.command = command; | ||||
|  | ||||
| 	/* If send_size is less than _GLIBTOP_PARAM_SIZE (normally 16 Bytes), we | ||||
|   | ||||
| @@ -32,7 +32,7 @@ GQuark | ||||
| glibtop_error_quark (void) | ||||
| { | ||||
|     static GQuark q = 0; | ||||
|     if (q == 0) | ||||
|     if (G_UNLIKELY(q == 0)) | ||||
| 	q = g_quark_from_static_string ("glibtop-error-quark"); | ||||
|  | ||||
|     return q; | ||||
|   | ||||
| @@ -1,120 +0,0 @@ | ||||
| /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */ | ||||
|  | ||||
| /* $Id$ */ | ||||
|  | ||||
| /* Copyright (C) 1998-99 Martin Baulig | ||||
|    This file is part of LibGTop 1.0. | ||||
|  | ||||
|    Contributed by Martin Baulig <martin@home-of-linux.org>, April 1998. | ||||
|  | ||||
|    LibGTop is free software; you can redistribute it and/or modify it | ||||
|    under the terms of the GNU General Public License as published by | ||||
|    the Free Software Foundation; either version 2 of the License, | ||||
|    or (at your option) any later version. | ||||
|  | ||||
|    LibGTop is distributed in the hope that it will be useful, but WITHOUT | ||||
|    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||||
|    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License | ||||
|    for more details. | ||||
|  | ||||
|    You should have received a copy of the GNU General Public License | ||||
|    along with LibGTop; see the file COPYING. If not, write to the | ||||
|    Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||||
|    Boston, MA 02111-1307, USA. | ||||
| */ | ||||
|  | ||||
| #include <glibtop.h> | ||||
| #include <glibtop/union.h> | ||||
|  | ||||
| #include <glibtop/glib-arrays.h> | ||||
|  | ||||
| GArray * | ||||
| glibtop_get_proclist_as_array_l (glibtop_client *client, int64_t which, | ||||
| 				 int64_t arg) | ||||
| { | ||||
|     glibtop_array array; | ||||
|     GArray *retval; | ||||
|     unsigned *ptr; | ||||
|     int i; | ||||
|  | ||||
|     ptr = glibtop_get_proclist_l (client, &array, which, arg); | ||||
|     if (!ptr) return NULL; | ||||
|  | ||||
|     retval = g_array_new (FALSE, TRUE, sizeof (guint)); | ||||
|     retval = g_array_set_size (retval, array.number); | ||||
|  | ||||
|     for (i = 0; i < array.number; i++) | ||||
| 	g_array_index (retval, guint, i) = ptr [i]; | ||||
|  | ||||
|     g_free (ptr); | ||||
|  | ||||
|     return retval; | ||||
| } | ||||
|  | ||||
| GPtrArray * | ||||
| glibtop_get_proc_args_as_array_l (glibtop_client *client, pid_t pid) | ||||
| { | ||||
|     glibtop_array array; | ||||
|     GPtrArray *retval; | ||||
|     char **ptr; | ||||
|     int i; | ||||
|  | ||||
|     ptr = glibtop_get_proc_args_l (client, &array, pid); | ||||
|     if (!ptr) return NULL; | ||||
|  | ||||
|     retval = g_ptr_array_new (); | ||||
|     g_ptr_array_set_size (retval, array.number); | ||||
|  | ||||
|     for (i = 0; i < array.number; i++) { | ||||
| 	retval->pdata [i] = g_strdup (ptr [i]); | ||||
| 	g_free (ptr [i]); | ||||
|     } | ||||
|  | ||||
|     g_free (ptr); | ||||
|  | ||||
|     return retval; | ||||
| } | ||||
|  | ||||
| GPtrArray * | ||||
| glibtop_get_proc_map_as_array_l (glibtop_client *client, pid_t pid) | ||||
| { | ||||
|     glibtop_array array; | ||||
|     GPtrArray *retval; | ||||
|     glibtop_map_entry *ptr; | ||||
|     int i; | ||||
|  | ||||
|     ptr = glibtop_get_proc_map_l (client, &array, pid); | ||||
|     if (!ptr) return NULL; | ||||
|  | ||||
|     retval = g_ptr_array_new (); | ||||
|     g_ptr_array_set_size (retval, array.number); | ||||
|  | ||||
|     for (i = 0; i < array.number; i++) | ||||
| 	retval->pdata [i] = g_memdup (ptr+i, sizeof (glibtop_map_entry)); | ||||
|  | ||||
|     g_free (ptr); | ||||
|  | ||||
|     return retval; | ||||
| } | ||||
|  | ||||
| GPtrArray * | ||||
| glibtop_get_mountlist_as_array_l (glibtop_client *client, int all_fs) | ||||
| { | ||||
|     glibtop_array array; | ||||
|     GPtrArray *retval; | ||||
|     glibtop_mountentry *ptr; | ||||
|     int i; | ||||
|  | ||||
|     ptr = glibtop_get_mountlist_l (client, &array, all_fs); | ||||
|     if (!ptr) return NULL; | ||||
|  | ||||
|     retval = g_ptr_array_new (); | ||||
|     g_ptr_array_set_size (retval, array.number); | ||||
|  | ||||
|     for (i = 0; i < array.number; i++) | ||||
| 	retval->pdata [i] = g_memdup (ptr+i, sizeof (glibtop_mountentry)); | ||||
|  | ||||
|     g_free (ptr); | ||||
|  | ||||
|     return retval; | ||||
| } | ||||
| @@ -29,7 +29,7 @@ | ||||
| #define DEFAULT_PORT 42800 | ||||
| #endif | ||||
|  | ||||
| static glibtop _glibtop_global_server = { .flags = 0 }; | ||||
| static glibtop _glibtop_global_server = { 0 }; | ||||
| glibtop *glibtop_global_server = &_glibtop_global_server; | ||||
|  | ||||
| static void | ||||
|   | ||||
							
								
								
									
										39
									
								
								lib/lib.pl
									
									
									
									
									
								
							
							
						
						
									
										39
									
								
								lib/lib.pl
									
									
									
									
									
								
							| @@ -67,7 +67,7 @@ print ''; | ||||
| print '/* Library functions. */'; | ||||
| print ''; | ||||
|  | ||||
| $convert{'long'} = 'int64_t'; | ||||
| $convert{'long'} = 'gint64'; | ||||
| $convert{'ulong'} = 'guint64'; | ||||
| $convert{'pid_t'} = 'pid_t'; | ||||
| $convert{'int'} = 'int'; | ||||
| @@ -106,6 +106,8 @@ sub output { | ||||
|  | ||||
|     if ($param_def eq 'string') { | ||||
| 	$call_param = ', ' . $line_fields[5]; | ||||
| 	$param_buf = ''; | ||||
| 	$buf_set = ''; | ||||
| 	$param_decl = ",\n            " . $space . '    const char *' . | ||||
|  | ||||
| 	  $line_fields[5]; | ||||
| @@ -119,7 +121,12 @@ sub output { | ||||
| 	$param_decl = ''; | ||||
| 	$send_size = ''; | ||||
| 	$send_ptr = ''; | ||||
| 	$param_buf = ''; | ||||
| 	$buf_set = ''; | ||||
| 	$nr_params = (@params = split(/:/, $param_def, 9999)); | ||||
| 	if ($nr_params) { | ||||
| 	    $param_buf = "\n\tstruct {\n"; | ||||
| 	} | ||||
| 	for ($param = 1; $param <= $nr_params; $param++) { | ||||
| 	    $list = $params[$param]; | ||||
| 	    $type = $params[$param]; | ||||
| @@ -127,6 +134,14 @@ sub output { | ||||
| 	    $list =~ s/^.*\(//; | ||||
| 	    $list =~ s/\)$//; | ||||
| 	    $count = (@fields = split(/,/, $list, 9999)); | ||||
|  | ||||
| 	    if ($count > 0) { | ||||
| 		for ($field = 1; $field <= $count; $field++) { | ||||
| 		    $param_buf .= "\t\t$convert{$type} buf_$fields[$field];\n"; | ||||
| 		    $buf_set .= "\tparam_buf.buf_$fields[$field] = $fields[$field];\n"; | ||||
| 		} | ||||
| 	    } | ||||
|  | ||||
| 	    for ($field = 1; $field <= $count; $field++) { | ||||
| 		if ($param_decl eq '') { | ||||
| 		    $param_decl = ",\n            " . $space . '    '; | ||||
| @@ -139,21 +154,13 @@ sub output { | ||||
| 		  $fields[$field]; | ||||
| 		$call_param = $call_param . ', ' . $fields[$field]; | ||||
| 		if ($send_ptr eq '') { | ||||
| 		    $send_ptr = "\n\tconst void *send_ptr = &" . | ||||
|  | ||||
| 		      $fields[$field] . ';'; | ||||
| 		    $send_ptr = "\n\tconst void *send_ptr = ¶m_buf;"; | ||||
| 		} | ||||
| 		if ($send_size eq '') { | ||||
| 		    $send_size = "\n\tconst size_t send_size =\n\t\t"; | ||||
| 		} | ||||
| 		else { | ||||
| 		    $send_size = $send_size . ' + '; | ||||
| 		} | ||||
| 		$send_size = $send_size . 'sizeof (' . $fields[$field] . ')'; | ||||
| 	    } | ||||
| 	} | ||||
| 	if ($send_size ne '') { | ||||
| 	    $send_size = $send_size . ';'; | ||||
| 	if ($nr_params) { | ||||
| 	    $param_buf .= "\t} param_buf;"; | ||||
| 	    $send_size  = "\n\tconst size_t send_size = sizeof param_buf;"; | ||||
| 	} | ||||
| 	else { | ||||
| 	    $send_size = "\n\tconst size_t send_size = 0;"; | ||||
| @@ -167,11 +174,13 @@ sub output { | ||||
|  | ||||
|       $feature . ' *buf' . $param_decl . ')'; | ||||
|  | ||||
|     print '{' . $send_ptr . '' . $send_size; | ||||
|     print "{" . $param_buf; | ||||
|  | ||||
|     print $send_ptr . '' . $send_size; | ||||
|     if ($retval !~ /^void$/) { | ||||
| 	print "\t" . $retval . ' retval = (' . $retval . ') 0;'; | ||||
|     } | ||||
|     print ''; | ||||
|     print $buf_set; | ||||
|  | ||||
|     print "\tglibtop_init_r (&server, (1 << GLIBTOP_SYSDEPS_" . | ||||
|  | ||||
|   | ||||
| @@ -32,9 +32,9 @@ | ||||
|  | ||||
| #define _check_data(size)	\ | ||||
| 	if ((data_ptr == NULL) || (data_size != size)) { \ | ||||
| 		glibtop_warn_r (server, "glibtop_set_parameter (%d): " \ | ||||
| 		glibtop_warn_r (server, "glibtop_set_parameter (%u): " \ | ||||
| 				"Expected %lu bytes but got %lu.", \ | ||||
| 				parameter, size, data_size); \ | ||||
| 				(unsigned) parameter, (unsigned long) size, (unsigned long) data_size); \ | ||||
| 		return; \ | ||||
| 	} | ||||
|  | ||||
| @@ -82,7 +82,7 @@ glibtop_set_parameter_l (glibtop *server, const unsigned parameter, | ||||
| 		break; | ||||
| 	case GLIBTOP_PARAM_FEATURES: | ||||
| 		/* You should not be allowed to set this field. */ | ||||
| 		glibtop_warn_r (server, "glibtop_set_parameter (%d): " \ | ||||
| 		glibtop_warn_r (server, "glibtop_set_parameter (%u): " \ | ||||
| 				"Cannot modify read-only value.", | ||||
| 				parameter); | ||||
| 		break; | ||||
|   | ||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user