Compare commits
	
		
			9 Commits
		
	
	
		
			GNOME_2_10
			...
			LIBGTOP_2_
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | c1e5bdfb16 | ||
|  | be7dabf75d | ||
|  | d37b1b9a2e | ||
|  | 6f755a5ca7 | ||
|  | 4cd022b315 | ||
|  | 69873a143d | ||
|  | f5655f12d3 | ||
|  | a71839c0a7 | ||
|  | 74d9b24132 | 
							
								
								
									
										94
									
								
								ChangeLog
									
									
									
									
									
								
							
							
						
						
									
										94
									
								
								ChangeLog
									
									
									
									
									
								
							| @@ -1,3 +1,97 @@ | ||||
| 2005-06-08  Benoît Dejean  <TazForEver@dlfp.org> | ||||
|  | ||||
| 	* NEWS: Released 2.11.0. | ||||
|  | ||||
| 2005-06-07  Benoît Dejean  <TazForEver@dlfp.org> | ||||
|  | ||||
| 	* configure.in: | ||||
| 	* glibtop.h: | ||||
| 	* include/glibtop/close.h: | ||||
| 	* include/glibtop/cpu.h: | ||||
| 	* include/glibtop/fsusage.h: | ||||
| 	* include/glibtop/loadavg.h: | ||||
| 	* include/glibtop/mem.h: | ||||
| 	* include/glibtop/mountlist.h: | ||||
| 	* include/glibtop/msg_limits.h: | ||||
| 	* include/glibtop/netlist.h: | ||||
| 	* include/glibtop/netload.h: | ||||
| 	* include/glibtop/ppp.h: | ||||
| 	* include/glibtop/procargs.h: | ||||
| 	* include/glibtop/prockernel.h: | ||||
| 	* include/glibtop/proclist.h: | ||||
| 	* include/glibtop/procmap.h: | ||||
| 	* include/glibtop/procmem.h: | ||||
| 	* include/glibtop/procopenfiles.h: | ||||
| 	* include/glibtop/procsegment.h: | ||||
| 	* include/glibtop/procsignal.h: | ||||
| 	* include/glibtop/procstate.h: | ||||
| 	* include/glibtop/proctime.h: | ||||
| 	* include/glibtop/procuid.h: | ||||
| 	* include/glibtop/sem_limits.h: | ||||
| 	* include/glibtop/shm_limits.h: | ||||
| 	* include/glibtop/swap.h: | ||||
| 	* include/glibtop/sysdeps.h: | ||||
| 	* include/glibtop/sysinfo.h: | ||||
| 	* include/glibtop/uptime.h: | ||||
| 	* sysdeps/common/Makefile.am: | ||||
| 	* sysdeps/common/default.c: (glibtop_close), (glibtop_init), | ||||
| 	(glibtop_get_cpu), (glibtop_get_fsusage), (glibtop_get_uptime), | ||||
| 	(glibtop_get_sysinfo), (glibtop_get_swap), (glibtop_get_proc_uid), | ||||
| 	(glibtop_get_proc_time), (glibtop_get_proc_state), | ||||
| 	(glibtop_get_proc_signal), (glibtop_get_proc_segment), | ||||
| 	(glibtop_get_proc_open_files), (glibtop_get_proc_mem), | ||||
| 	(glibtop_get_proc_map), (glibtop_get_proc_args), | ||||
| 	(glibtop_get_proc_argv), (glibtop_get_proclist), | ||||
| 	(glibtop_get_proc_kernel), (glibtop_get_ppp), | ||||
| 	(glibtop_get_netlist), (glibtop_get_netload), | ||||
| 	(glibtop_get_mountlist), (glibtop_get_mem), (glibtop_get_loadavg), | ||||
| 	(glibtop_get_msg_limits), (glibtop_get_sem_limits), | ||||
| 	(glibtop_get_shm_limits), (glibtop_get_sysdeps): | ||||
| 	 | ||||
| 	Added a lot of new functions to replace dirty macros. | ||||
| 	Every macro glibtop_get_*(buf[, args]) has been turned to a function. | ||||
|  | ||||
| 2005-06-06  Benoît Dejean  <TazForEver@dlfp.org> | ||||
|  | ||||
| 	* dtd/: Bye bye. | ||||
|  | ||||
| 2005-06-06  Benoît Dejean  <TazForEver@dlfp.org> | ||||
|  | ||||
| 	* backends/: Removed useless files. | ||||
|  | ||||
| 2005-06-06  Benoît Dejean  <TazForEver@dlfp.org> | ||||
|  | ||||
| 	* examples/smp.c: (main): Removed translation. | ||||
|  | ||||
| 	* lib/lib.pl: | ||||
| 	* lib/read.c: | ||||
| 	* lib/read_data.c: | ||||
| 	* lib/write.c: | ||||
| 	* src/daemon/gnuserv.c: s/gi18n.h/gi18n-lib.h. | ||||
|  | ||||
| 2005-06-06  Benoît Dejean  <TazForEver@dlfp.org> | ||||
|  | ||||
| 	* acinclude.m4: bye bye support. | ||||
|  | ||||
| 2005-06-06  Benoît Dejean  <TazForEver@dlfp.org> | ||||
|  | ||||
| 	* support/ : Removed unused files. | ||||
| 	 | ||||
| 2005-06-06  Benoît Dejean  <TazForEver@dlfp.org> | ||||
|  | ||||
| 	* examples/smp.c: | ||||
| 	* include/Makefile.am: | ||||
| 	* include/libgtop-i18n.h: | ||||
| 	* lib/lib.pl: | ||||
| 	* lib/read.c: | ||||
| 	* lib/read_data.c: | ||||
| 	* lib/write.c: | ||||
| 	* src/daemon/gnuserv.c: Got rid of include/libgtop-i18n.h. | ||||
|  | ||||
| 2005-06-06  Benoît Dejean  <TazForEver@dlfp.org> | ||||
|  | ||||
| 	* configure.in: version bump. | ||||
|  | ||||
| 2005-06-05  Benoît Dejean  <TazForEver@dlfp.org> | ||||
|  | ||||
| 	* README: Updated so people can find the ChangeLogs. | ||||
|   | ||||
							
								
								
									
										6
									
								
								NEWS
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								NEWS
									
									
									
									
									
								
							| @@ -1,3 +1,9 @@ | ||||
| June 8, 2005: Overview of changes from 2.10.x to 2.11.0 | ||||
| ======================================================= | ||||
| * Replaced a lot of macros by functions | ||||
| * Got rid of dozens of useless files. | ||||
| * libgtop 2.11.x are and will stay API and ABI compatible with 2.10.x, i swear. | ||||
|  | ||||
| April 10, 2005: Overview of changes from 2.10.0 to 2.10.1 | ||||
| ========================================================= | ||||
| * Updated i18n. | ||||
|   | ||||
							
								
								
									
										70
									
								
								acinclude.m4
									
									
									
									
									
								
							
							
						
						
									
										70
									
								
								acinclude.m4
									
									
									
									
									
								
							| @@ -503,76 +503,6 @@ AC_CHECKING(for AFS) | ||||
| test -d /afs && AC_DEFINE(AFS) | ||||
| ]) | ||||
|  | ||||
| dnl GNOME_SUPPORT_CHECKS | ||||
| dnl    Check for various support functions needed by the standard | ||||
| dnl    Gnome libraries.  Sets LIBOBJS, might define some macros. | ||||
| dnl    This should only be used when building the Gnome libs;  | ||||
| dnl    Gnome clients should not need this macro. | ||||
| AC_DEFUN([GNOME_SUPPORT_CHECKS],[ | ||||
|   # we need an `awk' to build `gnomesupport.h' | ||||
|   AC_REQUIRE([AC_PROG_AWK]) | ||||
|  | ||||
|   # this should go away soon | ||||
|   need_gnome_support=yes | ||||
|  | ||||
|   AC_CHECK_FUNCS(getopt_long,, | ||||
|    [AC_LIBOBJ(getopt) | ||||
|     AC_LIBOBJ(getopt1)]) | ||||
|  | ||||
|   # for `scandir' | ||||
|   AC_HEADER_DIRENT | ||||
|  | ||||
|   # copied from `configure.in' of `libiberty' | ||||
|   vars="program_invocation_short_name program_invocation_name sys_errlist" | ||||
|   for v in $vars; do | ||||
|     AC_MSG_CHECKING([for $v]) | ||||
|     AC_CACHE_VAL(gnome_cv_var_$v, | ||||
|       [AC_TRY_LINK([int *p;], [extern int $v; p = &$v;], | ||||
| 		   [eval "gnome_cv_var_$v=yes"], | ||||
| 		   [eval "gnome_cv_var_$v=no"])]) | ||||
|     if eval "test \"`echo '$gnome_cv_var_'$v`\" = yes"; then | ||||
|       AC_MSG_RESULT(yes) | ||||
|       n=HAVE_`echo $v | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` | ||||
|       AC_DEFINE_UNQUOTED($n) | ||||
|     else | ||||
|       AC_MSG_RESULT(no) | ||||
|     fi | ||||
|   done | ||||
|  | ||||
|   AC_REPLACE_FUNCS(memmove mkstemp scandir strcasecmp strerror strndup strnlen) | ||||
|   AC_REPLACE_FUNCS(strtok_r strtod strtol strtoul vasprintf vsnprintf) | ||||
|  | ||||
|   AC_CHECK_FUNCS(realpath,,AC_LIBOBJ(canonicalize)) | ||||
|  | ||||
|   # to include `error.c' error.c has some HAVE_* checks | ||||
|   AC_CHECK_FUNCS(vprintf doprnt strerror_r) | ||||
|   # stolen from am_func_error_at_line | ||||
|   AC_CACHE_CHECK([for error_at_line], am_cv_lib_error_at_line, | ||||
|   [AC_TRY_LINK([],[error_at_line(0, 0, "", 0, "");], | ||||
|               am_cv_lib_error_at_line=yes, | ||||
|               am_cv_lib_error_at_line=no)]) | ||||
|   if test $am_cv_lib_error_at_line = no; then | ||||
|     AC_LIBOBJ(error) | ||||
|   fi | ||||
|    | ||||
|   # This is required if we declare setreuid () and setregid (). | ||||
|   AC_TYPE_UID_T | ||||
|  | ||||
|   # see if we need to declare some functions.  Solaris is notorious for | ||||
|   # putting functions into the `libc' but not listing them in the headers | ||||
|   AC_CHECK_HEADERS(string.h strings.h stdlib.h unistd.h dirent.h) | ||||
|   GCC_NEED_DECLARATIONS(gethostname setreuid setregid getpagesize) | ||||
|   GCC_NEED_DECLARATION(scandir,[ | ||||
| #ifdef HAVE_DIRENT_H | ||||
| #include <dirent.h> | ||||
| #endif | ||||
| ]) | ||||
|  | ||||
|   AC_SUBST(need_gnome_support) | ||||
|  | ||||
|   AM_CONDITIONAL(BUILD_GNOME_SUPPORT, test "$need_gnome_support" = yes) | ||||
| ]) | ||||
|  | ||||
|  | ||||
| dnl This file is intended for use both internally in libgtop and in every program | ||||
| dnl that wants to use it. | ||||
|   | ||||
| @@ -1,5 +0,0 @@ | ||||
| .deps | ||||
| .libs | ||||
| Makefile | ||||
| Makefile.in | ||||
| *.lo | ||||
| @@ -1,15 +0,0 @@ | ||||
| if NEED_LIBGTOP | ||||
| server_dir	= server | ||||
| else | ||||
| server_dir	= | ||||
| endif | ||||
|  | ||||
| if HAVE_SYSDEPS | ||||
| sysdeps_dir	= sysdeps | ||||
| else | ||||
| sysdeps_dir	= | ||||
| endif | ||||
|  | ||||
| SUBDIRS		= $(server_dir) $(sysdeps_dir) common | ||||
|  | ||||
| DIST_SUBDIRS	= server sysdeps common | ||||
| @@ -1,7 +0,0 @@ | ||||
| .deps | ||||
| .libs | ||||
| Makefile | ||||
| Makefile.in | ||||
| *.lo | ||||
| *.la | ||||
| marshal.c | ||||
| @@ -1,50 +0,0 @@ | ||||
| 2003-10-20  Bastien Nocera  <hadess@hadess.net> | ||||
|  | ||||
| 	* backend-common.c: (_open_common): s/u_int64_t/guint64/ | ||||
|  | ||||
| 2003-10-20  Bastien Nocera  <hadess@hadess.net> | ||||
|  | ||||
| 	* backend-common.h: fixed compilation | ||||
|  | ||||
| 2000-11-26  Martin Baulig  <martin@home-of-linux.org> | ||||
|  | ||||
| 	* glibtop-backend-private.h: Removed. | ||||
|  | ||||
| 	* backend-common.h: New files. | ||||
|  | ||||
| 	* backend-common.c (_open_common): Don't overwrite | ||||
| 	`backend->_priv'. | ||||
|  | ||||
| 2000-11-22  Martin Baulig  <martin@home-of-linux.org> | ||||
|  | ||||
| 	* Makefile.am: Link libgtop_backend_common.la against | ||||
| 	$(top_builddir)/sysdeps/common/libgtop_common.la and | ||||
| 	$(top_builddir)/lib/libgtop_server.la. | ||||
|  | ||||
| 2000-02-22  Martin Baulig  <martin@home-of-linux.org> | ||||
|  | ||||
| 	* backend-sysdeps.c (LibGTopBackendInfo): Call this | ||||
| 	`LibGTopBackendInfo_Common' when we don't use gmodule. | ||||
|  | ||||
| 2000-02-22  Martin Baulig  <martin@home-of-linux.org> | ||||
|  | ||||
| 	* Makefile.am: Only install the libs in $(LIBGTOP_BACKEND_DIR) | ||||
| 	when we LIBGTOP_USE_GMODULE and in $(libdir) otherwise. | ||||
|  | ||||
| 2000-01-12  Martin Baulig  <martin@home-of-linux.org> | ||||
|  | ||||
| 	* Makefile.am: Install everything in $(LIBGTOP_BACKEND_DIR). | ||||
|  | ||||
| 	* libgtop-common.backend: New file. | ||||
|  | ||||
| 	* backend-common.c (glibtop_backend_common): Renamed to | ||||
| 	`LibGTopBackendInfo'. | ||||
|  | ||||
| 2000-01-12  Martin Baulig  <martin@home-of-linux.org> | ||||
|  | ||||
| 	Initial version of the "glibtop-backend-common" backend. | ||||
|  | ||||
| 	* backend-common.c: New file. | ||||
| 	* glibtop-backend-private.h: New file. | ||||
| 	* marshal.pl: New file. Automatically creates `marshal.c'. | ||||
|  | ||||
| @@ -1,47 +0,0 @@ | ||||
| LINK		= $(LIBTOOL) --mode=link $(CC) $(CFLAGS) $(LDFLAGS) -o $@ | ||||
|  | ||||
| INCLUDES	= @INCLUDES@ | ||||
|  | ||||
| backenddir	= @LIBGTOP_BACKEND_DIR@ | ||||
|  | ||||
| if LIBGTOP_USE_GMODULE | ||||
| backendlibdir	= $(backenddir) | ||||
| else | ||||
| backendlibdir	= $(libdir) | ||||
| endif | ||||
|  | ||||
| dynamic_ldflags	= @libgtop_dynamic_ldflags@ | ||||
|  | ||||
| backend_DATA = \ | ||||
| 	libgtop-common.backend | ||||
|  | ||||
| noinst_HEADERS = \ | ||||
| 	backend-common.h | ||||
|  | ||||
| backendlib_LTLIBRARIES = \ | ||||
| 	libgtop_backend_common.la | ||||
|  | ||||
| libgtop_backend_common_la_SOURCES = \ | ||||
| 	backend-common.c		\ | ||||
| 	marshal.c | ||||
|  | ||||
| libgtop_backend_common_la_LDFLAGS = \ | ||||
| 	$(LT_VERSION_INFO) $(dynamic_ldflags) | ||||
|  | ||||
| libgtop_backend_common_la_LIBADD = \ | ||||
| 	$(top_builddir)/sysdeps/common/libgtop_common.la	\ | ||||
| 	$(top_builddir)/lib/libgtop_server.la | ||||
|  | ||||
| BUILT_SOURCES = \ | ||||
| 	marshal.c | ||||
|  | ||||
| EXTRA_DIST = \ | ||||
| 	marshal.pl	\ | ||||
| 	libgtop-common.backend | ||||
|  | ||||
| CLEANFILES = $(BUILT_SOURCES) | ||||
|  | ||||
| marshal.c: marshal.pl $(top_builddir)/config.h $(top_srcdir)/features.def $(top_srcdir)/scripts/c_types.pl | ||||
| 	$(PERL) -I $(top_srcdir)/scripts $(srcdir)/marshal.pl < $(top_srcdir)/features.def > tmp-t | ||||
| 	mv tmp-t marshal.c | ||||
|  | ||||
| @@ -1,61 +0,0 @@ | ||||
| /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */ | ||||
|  | ||||
| /* $Id$ */ | ||||
|  | ||||
| /* Copyright (C) 1998-99 Martin Baulig | ||||
|    This file is part of LibGTop 1.0. | ||||
|  | ||||
|    Contributed by Martin Baulig <martin@home-of-linux.org>, April 1998. | ||||
|  | ||||
|    LibGTop is free software; you can redistribute it and/or modify it | ||||
|    under the terms of the GNU General Public License as published by | ||||
|    the Free Software Foundation; either version 2 of the License, | ||||
|    or (at your option) any later version. | ||||
|  | ||||
|    LibGTop is distributed in the hope that it will be useful, but WITHOUT | ||||
|    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||||
|    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License | ||||
|    for more details. | ||||
|  | ||||
|    You should have received a copy of the GNU General Public License | ||||
|    along with LibGTop; see the file COPYING. If not, write to the | ||||
|    Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||||
|    Boston, MA 02111-1307, USA. | ||||
| */ | ||||
|  | ||||
| #include <backend-common.h> | ||||
|  | ||||
| static int | ||||
| _open_common (glibtop_server *, glibtop_backend *, guint64, const char **); | ||||
|  | ||||
| static int | ||||
| _close_common (glibtop_server *, glibtop_backend *, void *closure); | ||||
|  | ||||
| extern glibtop_call_vector glibtop_backend_common_call_vector; | ||||
|  | ||||
| #ifdef LIBGTOP_USE_GMODULE | ||||
| glibtop_backend_info LibGTopBackendInfo = { | ||||
|     "glibtop-backend-common", _open_common, _close_common, | ||||
|     &glibtop_backend_common_call_vector | ||||
| }; | ||||
| #else | ||||
| glibtop_backend_info LibGTopBackendInfo_Common = { | ||||
|     "glibtop-backend-common", _open_common, _close_common, | ||||
|     &glibtop_backend_common_call_vector | ||||
| }; | ||||
| #endif | ||||
|  | ||||
| static int | ||||
| _open_common (glibtop_server *server, glibtop_backend *backend, | ||||
| 	      guint64 features, const char **backend_args) | ||||
| { | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| static int | ||||
| _close_common (glibtop_server *server, glibtop_backend *backend, | ||||
| 	       void *closure) | ||||
| { | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| @@ -1,36 +0,0 @@ | ||||
| /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */ | ||||
|  | ||||
| /* $Id$ */ | ||||
|  | ||||
| /* Copyright (C) 1998-99 Martin Baulig | ||||
|    This file is part of LibGTop 1.0. | ||||
|  | ||||
|    Contributed by Martin Baulig <martin@home-of-linux.org>, April 1998. | ||||
|  | ||||
|    LibGTop is free software; you can redistribute it and/or modify it | ||||
|    under the terms of the GNU General Public License as published by | ||||
|    the Free Software Foundation; either version 2 of the License, | ||||
|    or (at your option) any later version. | ||||
|  | ||||
|    LibGTop is distributed in the hope that it will be useful, but WITHOUT | ||||
|    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||||
|    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License | ||||
|    for more details. | ||||
|  | ||||
|    You should have received a copy of the GNU General Public License | ||||
|    along with LibGTop; see the file COPYING. If not, write to the | ||||
|    Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||||
|    Boston, MA 02111-1307, USA. | ||||
| */ | ||||
|  | ||||
| #ifndef __GLIBTOP_BACKEND_COMMON_H__ | ||||
| #define __GLIBTOP_BACKEND_COMMON_H__ | ||||
|  | ||||
| #include <glibtop.h> | ||||
| #include <glibtop/global.h> | ||||
|  | ||||
| #include <glibtop/open.h> | ||||
| #include <glibtop/glibtop-backend.h> | ||||
| #include <glibtop/glibtop-backend-info.h> | ||||
|  | ||||
| #endif | ||||
| @@ -1,13 +0,0 @@ | ||||
| <?xml version="1.0"?> <!-- -*-xml-*- --> | ||||
| <!DOCTYPE libgtop:backends SYSTEM 'libgtop-backends.dtd'> | ||||
| <libgtop:Backends xmlns:libgtop="http://www.home-of-linux.org/libgtop/1.1"> | ||||
|  | ||||
|   <libgtop:Backend> | ||||
|     <libgtop:Name>glibtop-backend-common</libgtop:Name> | ||||
|     <libgtop:Location> | ||||
|       <libgtop:LibtoolName>libgtop_backend_common.la</libgtop:LibtoolName> | ||||
|       <libgtop:ShlibName>libgtop_backend_common.so</libgtop:ShlibName> | ||||
|     </libgtop:Location> | ||||
|   </libgtop:Backend> | ||||
|  | ||||
| </libgtop:Backends> | ||||
| @@ -1,175 +0,0 @@ | ||||
| #!/usr/bin/perl | ||||
|  | ||||
| require 'c_types.pl'; | ||||
|  | ||||
| $[ = 1;			# set array base to 1 | ||||
| $, = ' ';		# set output field separator | ||||
| $\ = "\n";		# set output record separator | ||||
|  | ||||
| $always_use_temp_storage = 1; | ||||
|  | ||||
| sub toupper { | ||||
|     local($_) = @_; | ||||
|     tr/a-z/A-Z/; | ||||
|     return $_; | ||||
| } | ||||
|  | ||||
| sub tolower { | ||||
|     local($_) = @_; | ||||
|     tr/A-Z/a-z/; | ||||
|     return $_; | ||||
| } | ||||
|  | ||||
| print '/* marshal.c */'; | ||||
| print "/* This is a generated file.  Please modify `marshal.pl' */"; | ||||
| print ''; | ||||
|  | ||||
| print '#include <backend-common.h>'; | ||||
| print ''; | ||||
| print '#include <glibtop/sysdeps.h>'; | ||||
| print '#include <glibtop/union.h>'; | ||||
| print ''; | ||||
| print '#include <glibtop/call-vector.h>'; | ||||
| print ''; | ||||
|  | ||||
| $feature_count = 0; | ||||
|  | ||||
| while (<>) { | ||||
|     chop;	# strip record separator | ||||
|  | ||||
|     if (/^[^#]/) { | ||||
| 	&output($_); | ||||
|     } | ||||
| } | ||||
|  | ||||
| sub output { | ||||
|     local($line) = @_; | ||||
|     @line_fields = split(/\|/, $line, 9999); | ||||
|     $retval = $line_fields[1]; | ||||
|     $feature = $line_fields[2]; | ||||
|     $param_def = $line_fields[4]; | ||||
|  | ||||
|     $orig = $feature; | ||||
|     $feature =~ s/^@//; | ||||
|     $space = $feature; | ||||
|     $space =~ s/./ /g; | ||||
|  | ||||
|     $features{++$feature_count} = $orig; | ||||
|  | ||||
|     return unless $orig =~ /^@/; | ||||
|  | ||||
|     if ($retval eq 'retval') { | ||||
|       $retval_param = '&retval'; | ||||
|       $call_prefix = ''; | ||||
|       $call_prefix_space = ''; | ||||
|       $prefix = 'retval = '; | ||||
|       $prefix_space = '         '; | ||||
|       $retval = 'int'; | ||||
|     } | ||||
|     elsif ($retval !~ /^void$/) { | ||||
|       $retval_param = 'NULL'; | ||||
|       $prefix = 'retval = '; | ||||
|       $prefix_space = '         '; | ||||
|       $call_prefix = 'retval = '; | ||||
|       $call_prefix_space = '         '; | ||||
|     } | ||||
|     else { | ||||
|       $retval_param = 'NULL'; | ||||
|       $call_prefix = ''; | ||||
|       $call_prefix_space = ''; | ||||
|       $prefix = ''; | ||||
|       $prefix_space = ''; | ||||
|     } | ||||
|  | ||||
|     if ($retval =~ /^(array|pointer)\((.*)\)$/) { | ||||
|       $retval = ($2 eq 'string') ? 'char **' : "$2 *"; | ||||
|     } | ||||
|  | ||||
|     $need_temp_storage = $always_use_temp_storage; | ||||
|     $first_param_name = ''; | ||||
|  | ||||
|     $call_param = ''; | ||||
|     $param_decl = ''; | ||||
|     $need_temp_len = 0; | ||||
|     $nr_params = (@params = split(/:/, $param_def, 9999)); | ||||
|     for ($param = 1; $param <= $nr_params; $param++) { | ||||
|       $list = $params[$param]; | ||||
|       $type = $params[$param]; | ||||
|       $type =~ s/\(.*//; | ||||
|       $list =~ s/^.*\(//; | ||||
|       $list =~ s/\)$//; | ||||
|       $count = (@fields = split(/,/, $list, 9999)); | ||||
|       for ($field = 1; $field <= $count; $field++) { | ||||
| 	my $c_type = $typeinfo->{$type}->[1]; | ||||
|  | ||||
| 	if ($first_param_name eq '') { | ||||
| 	  $first_param_name = $fields[$field]; | ||||
| 	} | ||||
|  | ||||
| 	if ($typeinfo->{$type}->[2]) { | ||||
| 	  $need_temp_storage = 1; | ||||
| 	} | ||||
|  | ||||
| 	if ($param_decl eq '') { | ||||
| 	  $param_decl = ",\n             " . $space . '    '; | ||||
| 	} | ||||
| 	else { | ||||
| 	  $param_decl = $param_decl . ', '; | ||||
| 	} | ||||
| 	$param_decl = $param_decl . $c_type . ' ' . $fields[$field]; | ||||
| 	$call_param = $call_param . ', ' . $fields[$field]; | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     if ($line_fields[3] eq '') { | ||||
|       $total_code = sprintf | ||||
| 	("\treturn glibtop_get_%s_s (server%s);\n", $feature, $call_param); | ||||
|     } elsif ($line_fields[3] eq 'array') { | ||||
|       $total_code = sprintf | ||||
| 	("\treturn glibtop_get_%s_s (server, array%s);\n", $feature, $call_param); | ||||
|     } elsif ($line_fields[3] =~ /^array/) { | ||||
|       $total_code = sprintf | ||||
| 	("\treturn glibtop_get_%s_s (server, array, buf%s);\n", $feature, $call_param); | ||||
|     } else { | ||||
|       $total_code = sprintf | ||||
| 	("\treturn glibtop_get_%s_s (server, buf%s);\n", $feature, $call_param); | ||||
|     } | ||||
|  | ||||
|     $func_decl = 'static '.$retval."\n"; | ||||
|     if ($line_fields[3] eq '') { | ||||
|       $func_decl .= sprintf ("_glibtop_get_%s_c (glibtop_server *server, void *closure%s)\n", | ||||
| 			     $feature, $param_decl); | ||||
|     } elsif ($line_fields[3] eq 'array') { | ||||
|       $func_decl .= sprintf ("_glibtop_get_%s_c (glibtop_server *server, void *closure, glibtop_array *array%s)\n", | ||||
| 			     $feature, $param_decl); | ||||
|     } elsif ($line_fields[3] =~ /^array/) { | ||||
|       $func_decl .= sprintf ("_glibtop_get_%s_c (glibtop_server *server, void *closure, glibtop_array *array, %s *buf%s)\n", | ||||
| 			     $feature, 'glibtop_'.$feature, $param_decl); | ||||
|     } else { | ||||
|       $func_decl .= sprintf ("_glibtop_get_%s_c (glibtop_server *server, void *closure, %s *buf%s)\n", | ||||
| 			     $feature, 'glibtop_'.$feature, $param_decl); | ||||
|     } | ||||
|  | ||||
|     $total_code = sprintf ("%s{\n%s\n%s}\n", $func_decl, $total_code); | ||||
|  | ||||
|     print $total_code; | ||||
| } | ||||
|  | ||||
| $call_vector_code = ''; | ||||
| for ($nr = 1; $nr <= $feature_count; $nr++) { | ||||
|   $feature = $features{$nr}; | ||||
|  | ||||
|   if ($feature =~ /^@/) { | ||||
|     $feature =~ s/^@//; | ||||
|  | ||||
|     $call_vector_code .= sprintf (qq[\t_glibtop_get_%s_c,\n], $feature); | ||||
|   } else { | ||||
|     $call_vector_code .= sprintf (qq[\tNULL,\n]); | ||||
|   } | ||||
| } | ||||
|  | ||||
| print 'glibtop_call_vector glibtop_backend_common_call_vector = {'; | ||||
| print $call_vector_code; | ||||
| print '};'; | ||||
| print ''; | ||||
|  | ||||
| @@ -1,10 +0,0 @@ | ||||
| .deps | ||||
| .libs | ||||
| Makefile | ||||
| Makefile.in | ||||
| *.lo | ||||
| *.la | ||||
| marshal.c | ||||
| demarshal.c | ||||
| libgtop_server | ||||
| command.h | ||||
| @@ -1,125 +0,0 @@ | ||||
| 2004-08-22  Benoît Dejean  <tazforever@dlfp.org> | ||||
|  | ||||
| 	* server.c: (handle_slave_connection): Replaced //comment by /*C89*/.  | ||||
|  | ||||
| 2004-03-09  Bastien Nocera  <hadess@hadess.net> | ||||
|  | ||||
| 	* command.c: (glibtop_call_i): | ||||
| 	* demarshal.pl: | ||||
| 	* marshal.pl: | ||||
| 	* read_data.c: (glibtop_read_data_i): | ||||
| 	* server.c: (handle_slave_connection): fix g_malloc usage on non-Linux | ||||
| 	platforms (patch by Benoît Dejean <bnet@ifrance.com>) | ||||
|  | ||||
| 2003-10-20  Bastien Nocera  <hadess@hadess.net> | ||||
|  | ||||
| 	* backend-server.c: (_open_server): | ||||
| 	* backend-server.h: | ||||
| 	* command.h.in: s/u_int64_t/guint64/ | ||||
|  | ||||
| 2003-10-20  Bastien Nocera  <hadess@hadess.net> | ||||
|  | ||||
| 	* backend-server.h: | ||||
| 	* command.h.in: | ||||
| 	* demarshal.pl: | ||||
| 	* server.h: fixed compilation | ||||
|  | ||||
| 2003-10-20  Bastien Nocera  <hadess@hadess.net> | ||||
|  | ||||
| 	* backend-server.c: (_open_server): | ||||
| 	* command.c: (glibtop_call_i): | ||||
| 	* demarshal.pl: | ||||
| 	* marshal.pl: | ||||
| 	* read_data.c: (glibtop_read_data_i): | ||||
| 	* server.c: (main), (handle_slave_connection): | ||||
| 	replace all the xmalloc crap by glib memory management functions | ||||
|  | ||||
| 2003-10-20  Bastien Nocera  <hadess@hadess.net> | ||||
|  | ||||
| 	* Makefile.am: removed traces of guile, intllibs and libgnomesupport | ||||
|  | ||||
| 2000-11-27  Martin Baulig  <martin@home-of-linux.org> | ||||
|  | ||||
| 	* backend-server.c (backend_server_quark): New global variable. | ||||
| 	(_open_server, _close_server): Use the quark. | ||||
| 	* commands.c: Likewise. | ||||
|  | ||||
| 2000-11-26  Martin Baulig  <martin@home-of-linux.org> | ||||
|  | ||||
| 	* backend-server.h: New file. | ||||
| 	(backend_server_private): New struct, formerly known | ||||
| 	as glibtop_backend_private. | ||||
|  | ||||
| 	* glibtop-backend-private.h: Removed. | ||||
|  | ||||
| 	* backend-server.c: (_open_server): Use g_object_set_data() | ||||
| 	to set add the backend_server_private data to the glibtop_backend, | ||||
| 	don't override `backend->_priv'. | ||||
| 	(_close_server): Use g_object_get_data() to get the data. | ||||
| 	[FIXME: Use quarks directly.] | ||||
|  | ||||
| 	* read.c: (glibtop_read_i): Replaced the glibtop_server and | ||||
| 	glibtop_backend arguments with backend_server_private. | ||||
| 	* read_data.c: (glibtop_read_data_i): Likewise. | ||||
| 	* write.c: (glibtop_write_i): Likewise. | ||||
|  | ||||
| 2000-02-22  Martin Baulig  <martin@home-of-linux.org> | ||||
|  | ||||
| 	* backend-sysdeps.c (LibGTopBackendInfo): Call this | ||||
| 	`LibGTopBackendInfo_Server' when we don't use gmodule. | ||||
|  | ||||
| 2000-02-22  Martin Baulig  <martin@home-of-linux.org> | ||||
|  | ||||
| 	* Makefile.am: Only install the libs in $(LIBGTOP_BACKEND_DIR) | ||||
| 	when we LIBGTOP_USE_GMODULE and in $(libdir) otherwise. | ||||
|  | ||||
| 2000-01-18  Martin Baulig  <martin@home-of-linux.org> | ||||
|  | ||||
| 	* demarshal.pl: Only emit code for functions which are | ||||
| 	really suid/sgid. | ||||
|  | ||||
| 2000-01-13  Martin Baulig  <martin@home-of-linux.org> | ||||
|  | ||||
| 	* write.c (glibtop_write_i): The buffer which we write is | ||||
| 	now a `const'. | ||||
|  | ||||
| 2000-01-12  Martin Baulig  <martin@home-of-linux.org> | ||||
|  | ||||
| 	* Makefile.am: Install everything except the server binary | ||||
| 	in $(LIBGTOP_BACKEND_DIR). | ||||
|  | ||||
| 	* libgtop-server.backend: New file. | ||||
|  | ||||
| 	* backend-server.c (glibtop_backend_server): Renamed to | ||||
| 	`LibGTopBackendInfo'. | ||||
|  | ||||
| 2000-01-08  Martin Baulig  <martin@home-of-linux.org> | ||||
|  | ||||
| 	* command.h.in (glibtop_response): New structure. | ||||
|  | ||||
| 2000-01-02  Martin Baulig  <martin@home-of-linux.org> | ||||
|  | ||||
| 	* command.pl: New file. Creates `command.h' from `command.h.in'. | ||||
| 	* command.h.in: New file. Template file for `command.h'. | ||||
|  | ||||
| 	* io.c, version.c: New files. Copied here from `src/daemon'. | ||||
|  | ||||
| 	* demarshal.pl: New file. Automatically creates `demarshal.c'. | ||||
| 	* demarshal.c: This automatically created file handles the | ||||
| 	demarshalling in the libgtop_server. | ||||
|  | ||||
| 	* Makefile.am: Build the `libgtop_server' here. | ||||
| 	* server.c, server.h: New files. Copied here from `src/daemon'. | ||||
|  | ||||
| 2000-01-01  Martin Baulig  <martin@home-of-linux.org> | ||||
|  | ||||
| 	Initial version of the "glibtop-backend-server" backend. | ||||
|  | ||||
| 	* command.c, read.c, read_data.c, write.c: New files. Moved here | ||||
| 	from the `lib' directory. | ||||
|  | ||||
| 	* backend-server.c: New file. | ||||
| 	* glibtop-backend-private.h: New file. | ||||
|  | ||||
| 	* marshal.pl: New file. Automatically creates `marshal.c'. | ||||
|  | ||||
| @@ -1,84 +0,0 @@ | ||||
| LINK		= $(LIBTOOL) --mode=link $(CC) $(CFLAGS) $(LDFLAGS) -o $@ | ||||
|  | ||||
| INCLUDES	= @INCLUDES@ -D_BSD \ | ||||
| 		  -DLIBGTOP_COMPILE_SYSTEM=\"`uname -s`\" \ | ||||
| 		  -DLIBGTOP_COMPILE_RELEASE=\"`uname -r`\" \ | ||||
| 		  -DLIBGTOP_COMPILE_MACHINE=\"`uname -m`\" | ||||
|  | ||||
| backenddir	= @LIBGTOP_BACKEND_DIR@ | ||||
|  | ||||
| if LIBGTOP_USE_GMODULE | ||||
| backendlibdir	= $(backenddir) | ||||
| else | ||||
| backendlibdir	= $(libdir) | ||||
| endif | ||||
|  | ||||
| dynamic_ldflags	= @libgtop_dynamic_ldflags@ | ||||
|  | ||||
| backend_DATA = \ | ||||
| 	libgtop-server.backend | ||||
|  | ||||
| noinst_HEADERS = \ | ||||
| 	backend-server.h | ||||
|  | ||||
| backendlib_LTLIBRARIES = \ | ||||
| 	libgtop_backend_server.la | ||||
|  | ||||
| bin_PROGRAMS = \ | ||||
| 	@server_programs@ | ||||
|  | ||||
| EXTRA_PROGRAMS = \ | ||||
| 	libgtop_server | ||||
|  | ||||
| libgtop_backend_server_la_SOURCES = \ | ||||
| 	backend-server.c		\ | ||||
| 	marshal.c			\ | ||||
| 	command.c			\ | ||||
| 	read.c				\ | ||||
| 	read_data.c			\ | ||||
| 	write.c | ||||
|  | ||||
| libgtop_backend_server_la_LDFLAGS = \ | ||||
| 	$(LT_VERSION_INFO) $(dynamic_ldflags) | ||||
|  | ||||
| libgtop_server_SOURCES = \ | ||||
| 	server.c		\ | ||||
| 	server.h		\ | ||||
| 	demarshal.c		\ | ||||
| 	version.c		\ | ||||
| 	io.c | ||||
|  | ||||
| libgtop_server_LDADD = \ | ||||
| 	$(top_builddir)/sysdeps/@sysdeps_dir@/libgtop_sysdeps_suid.la \ | ||||
| 	$(top_builddir)/sysdeps/common/libgtop_suid_common.la | ||||
|  | ||||
| if ENABLE_STATIC | ||||
| libgtop_server_LDFLAGS = -static | ||||
| endif | ||||
|  | ||||
| BUILT_SOURCES = \ | ||||
| 	marshal.c		\ | ||||
| 	demarshal.c		\ | ||||
| 	command.h | ||||
|  | ||||
| EXTRA_DIST = \ | ||||
| 	marshal.pl		\ | ||||
| 	demarshal.pl		\ | ||||
| 	command.pl		\ | ||||
| 	command.h.in		\ | ||||
| 	libgtop-server.backend | ||||
|  | ||||
| CLEANFILES = $(BUILT_SOURCES) | ||||
|  | ||||
| marshal.c: marshal.pl $(top_builddir)/config.h $(top_srcdir)/features.def $(top_srcdir)/scripts/c_types.pl | ||||
| 	$(PERL) -I $(top_srcdir)/scripts $(srcdir)/marshal.pl < $(top_srcdir)/features.def > tmp-t | ||||
| 	mv tmp-t marshal.c | ||||
|  | ||||
| demarshal.c: demarshal.pl $(top_builddir)/config.h $(top_srcdir)/features.def $(top_srcdir)/scripts/c_types.pl | ||||
| 	$(PERL) -I $(top_srcdir)/scripts $(srcdir)/demarshal.pl < $(top_srcdir)/features.def > tmp-t | ||||
| 	mv tmp-t demarshal.c | ||||
|  | ||||
| command.h: command.pl command.h.in $(top_builddir)/config.h $(top_srcdir)/features.def $(top_srcdir)/scripts/c_types.pl | ||||
| 	$(PERL) -I $(top_srcdir)/scripts $(srcdir)/command.pl $(top_srcdir)/features.def $(srcdir)/command.h.in > tmp-t | ||||
| 	mv tmp-t command.h | ||||
|  | ||||
| @@ -1,113 +0,0 @@ | ||||
| /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */ | ||||
|  | ||||
| /* $Id$ */ | ||||
|  | ||||
| /* Copyright (C) 1998-99 Martin Baulig | ||||
|    This file is part of LibGTop 1.0. | ||||
|  | ||||
|    Contributed by Martin Baulig <martin@home-of-linux.org>, April 1998. | ||||
|  | ||||
|    LibGTop is free software; you can redistribute it and/or modify it | ||||
|    under the terms of the GNU General Public License as published by | ||||
|    the Free Software Foundation; either version 2 of the License, | ||||
|    or (at your option) any later version. | ||||
|  | ||||
|    LibGTop is distributed in the hope that it will be useful, but WITHOUT | ||||
|    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||||
|    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License | ||||
|    for more details. | ||||
|  | ||||
|    You should have received a copy of the GNU General Public License | ||||
|    along with LibGTop; see the file COPYING. If not, write to the | ||||
|    Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||||
|    Boston, MA 02111-1307, USA. | ||||
| */ | ||||
|  | ||||
| #include <backend-server.h> | ||||
|  | ||||
| static int | ||||
| _open_server (glibtop_server *, glibtop_backend *, guint64, const char **); | ||||
|  | ||||
| static int | ||||
| _close_server (glibtop_server *, glibtop_backend *, void *); | ||||
|  | ||||
| extern glibtop_call_vector glibtop_backend_server_call_vector; | ||||
|  | ||||
| #ifdef LIBGTOP_USE_GMODULE | ||||
| glibtop_backend_info LibGTopBackendInfo = { | ||||
|     "glibtop-backend-server", _open_server, _close_server, | ||||
|     &glibtop_backend_server_call_vector | ||||
| }; | ||||
| #else | ||||
| glibtop_backend_info LibGTopBackendInfo_Server = { | ||||
|     "glibtop-backend-server", _open_server, _close_server, | ||||
|     &glibtop_backend_server_call_vector | ||||
| }; | ||||
| #endif | ||||
|  | ||||
| static int | ||||
| _open_server (glibtop_server *server, glibtop_backend *backend, | ||||
| 	      guint64 features, const char **backend_args) | ||||
| { | ||||
|     backend_server_private *priv; | ||||
|  | ||||
|     priv = g_malloc (sizeof (backend_server_private)); | ||||
|  | ||||
|     glibtop_backend_set_closure_data (backend, priv); | ||||
|  | ||||
| #ifdef DEBUG | ||||
|     fprintf (stderr, "open_server - %p, %p, %p\n", server, backend, priv); | ||||
|  | ||||
|     fprintf (stderr, "Opening pipe to server (%s).\n", LIBGTOP_SERVER); | ||||
| #endif | ||||
|  | ||||
|     if (pipe (priv->input) || pipe (priv->output)) { | ||||
| 	glibtop_warn_io_r (server, "cannot make a pipe"); | ||||
| 	return -1; | ||||
|     } | ||||
|  | ||||
|     priv->pid  = fork (); | ||||
|  | ||||
|     if (priv->pid < 0) { | ||||
| 	glibtop_warn_io_r (server, "fork failed"); | ||||
| 	return -1; | ||||
|     } else if (priv->pid == 0) { | ||||
| 	close (0); close (1); | ||||
| 	close (priv->input [0]); | ||||
| 	close (priv->output [1]); | ||||
| 	dup2 (priv->input [1], 1); | ||||
| 	dup2 (priv->output [0], 0); | ||||
| 	execl (LIBGTOP_SERVER, "libgtop-server", NULL); | ||||
| 	glibtop_error_io_r (server, "execl (%s)", | ||||
| 			    LIBGTOP_SERVER); | ||||
| 	_exit (2); | ||||
|     } | ||||
|  | ||||
|     close (priv->input [1]); | ||||
|     close (priv->output [0]); | ||||
|  | ||||
|     glibtop_server_ref (server); | ||||
|     priv->server = server; | ||||
|  | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| static int | ||||
| _close_server (glibtop_server *server, glibtop_backend *backend, | ||||
| 	       void *closure) | ||||
| { | ||||
|     backend_server_private *priv = closure; | ||||
|  | ||||
|     kill (priv->pid, SIGKILL); | ||||
|     close (priv->input [0]); | ||||
|     close (priv->output [1]); | ||||
|  | ||||
|     glibtop_server_unref (priv->server); | ||||
|  | ||||
|     priv->pid = 0; | ||||
|  | ||||
|     g_free (priv); | ||||
|  | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| @@ -1,65 +0,0 @@ | ||||
| /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */ | ||||
|  | ||||
| /* $Id$ */ | ||||
|  | ||||
| /* Copyright (C) 1998-99 Martin Baulig | ||||
|    This file is part of LibGTop 1.0. | ||||
|  | ||||
|    Contributed by Martin Baulig <martin@home-of-linux.org>, April 1998. | ||||
|  | ||||
|    LibGTop is free software; you can redistribute it and/or modify it | ||||
|    under the terms of the GNU General Public License as published by | ||||
|    the Free Software Foundation; either version 2 of the License, | ||||
|    or (at your option) any later version. | ||||
|  | ||||
|    LibGTop is distributed in the hope that it will be useful, but WITHOUT | ||||
|    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||||
|    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License | ||||
|    for more details. | ||||
|  | ||||
|    You should have received a copy of the GNU General Public License | ||||
|    along with LibGTop; see the file COPYING. If not, write to the | ||||
|    Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||||
|    Boston, MA 02111-1307, USA. | ||||
| */ | ||||
|  | ||||
| #ifndef __GLIBTOP_BACKEND_COMMON_H__ | ||||
| #define __GLIBTOP_BACKEND_COMMON_H__ | ||||
|  | ||||
| #include <glibtop.h> | ||||
| #include <glibtop/global.h> | ||||
|  | ||||
| #include <glibtop/open.h> | ||||
| #include <glibtop/glibtop-backend.h> | ||||
| #include <glibtop/glibtop-backend-info.h> | ||||
|  | ||||
| typedef struct _backend_server_private backend_server_private; | ||||
|  | ||||
| struct _backend_server_private | ||||
| { | ||||
|     guint64 flags; | ||||
|     int input [2];		/* Pipe client <- server */ | ||||
|     int output [2];		/* Pipe client -> server */ | ||||
|     pid_t pid;			/* PID of the server */ | ||||
|  | ||||
|     glibtop_server *server; | ||||
| }; | ||||
|  | ||||
| void * | ||||
| glibtop_call_i (glibtop_server *server, backend_server_private *priv, | ||||
| 		unsigned command, size_t send_size, const void *send_ptr, | ||||
| 		size_t data_size, const void *data_ptr, | ||||
| 		size_t recv_size, void *recv_ptr, | ||||
| 		int *retval_ptr); | ||||
|  | ||||
| void | ||||
| glibtop_read_i (backend_server_private *priv, size_t size, void *buf); | ||||
|  | ||||
| void * | ||||
| glibtop_read_data_i (backend_server_private *priv); | ||||
|  | ||||
| void | ||||
| glibtop_write_i (backend_server_private *priv, size_t size, const void *buf); | ||||
|  | ||||
| #endif | ||||
|  | ||||
| @@ -1,94 +0,0 @@ | ||||
| /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */ | ||||
|  | ||||
| /* $Id$ */ | ||||
|  | ||||
| /* Copyright (C) 1998-99 Martin Baulig | ||||
|    This file is part of LibGTop 1.0. | ||||
|  | ||||
|    Contributed by Martin Baulig <martin@home-of-linux.org>, April 1998. | ||||
|  | ||||
|    LibGTop is free software; you can redistribute it and/or modify it | ||||
|    under the terms of the GNU General Public License as published by | ||||
|    the Free Software Foundation; either version 2 of the License, | ||||
|    or (at your option) any later version. | ||||
|  | ||||
|    LibGTop is distributed in the hope that it will be useful, but WITHOUT | ||||
|    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||||
|    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License | ||||
|    for more details. | ||||
|  | ||||
|    You should have received a copy of the GNU General Public License | ||||
|    along with LibGTop; see the file COPYING. If not, write to the | ||||
|    Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||||
|    Boston, MA 02111-1307, USA. | ||||
| */ | ||||
|  | ||||
| #include <backend-server.h> | ||||
|  | ||||
| #include "command.h" | ||||
|  | ||||
| void * | ||||
| glibtop_call_i (glibtop_server *server, backend_server_private *priv, | ||||
| 		unsigned command, size_t send_size, const void *send_buf, | ||||
| 		size_t data_size, const void *data_buf, | ||||
| 		size_t recv_size, void *recv_ptr, | ||||
| 		int *retval_ptr) | ||||
| { | ||||
|     glibtop_command cmnd = {0}; | ||||
|     glibtop_response resp = {0}; | ||||
|  | ||||
|     cmnd.command = command; | ||||
|  | ||||
|     /* If send_size is less than _GLIBTOP_PARAM_SIZE (normally 16 Bytes), we | ||||
|      * send it together with command, so we only need one system call instead | ||||
|      * of two. */ | ||||
|  | ||||
|     if (send_size <= _GLIBTOP_PARAM_SIZE) { | ||||
| 	memcpy (cmnd.parameter, send_buf, send_size); | ||||
| 	cmnd.param_size = send_size; | ||||
|     } else { | ||||
| 	cmnd.send_size = send_size; | ||||
|     } | ||||
|  | ||||
|     cmnd.data_size = data_size; | ||||
|  | ||||
|     glibtop_write_i (priv, sizeof (glibtop_command), &cmnd); | ||||
|  | ||||
|     if (data_size) { | ||||
| #ifdef SLAVE_DEBUG | ||||
| 	fprintf (stderr, "SENDING %d bytes of DATA.\n", data_size); | ||||
| #endif | ||||
| 	glibtop_write_i (priv, data_size, data_buf); | ||||
|     } | ||||
|  | ||||
|     glibtop_read_i (priv, sizeof (glibtop_response), &resp); | ||||
|  | ||||
| #ifdef SLAVE_DEBUG | ||||
|     fprintf (stderr, "RESPONSE: %d - %d - %ld - %ld - %p - %ld\n", | ||||
| 	     resp.retval, resp.glibtop_errno, | ||||
| 	     (long) resp.recv_size, (long) resp.data_size, | ||||
| 	     recv_ptr, (long) recv_size); | ||||
| #endif | ||||
|  | ||||
|     if (retval_ptr) | ||||
| 	*retval_ptr = resp.glibtop_errno; | ||||
|  | ||||
|     if (resp.recv_size != recv_size) { | ||||
| 	glibtop_warn_r (server, "Expected %ld bytes, but got %ld.", | ||||
| 			(long) recv_size, (long) resp.recv_size); | ||||
| 	return NULL; | ||||
|     } | ||||
|  | ||||
|     if (recv_ptr) | ||||
| 	glibtop_read_i (priv, recv_size, recv_ptr); | ||||
|  | ||||
|     if (resp.data_size) { | ||||
| 	void *ptr = g_malloc (resp.data_size); | ||||
|  | ||||
| 	glibtop_read_i (priv, resp.data_size, ptr); | ||||
|  | ||||
| 	return ptr; | ||||
|     } | ||||
|  | ||||
|     return NULL; | ||||
| } | ||||
| @@ -1,59 +0,0 @@ | ||||
| /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */ | ||||
|  | ||||
| /* $Id$ */ | ||||
|  | ||||
| @@AUTOGEN_COMMENT@@ | ||||
|  | ||||
| /* Copyright (C) 1998-99 Martin Baulig | ||||
|    This file is part of LibGTop 1.0. | ||||
|  | ||||
|    Contributed by Martin Baulig <martin@home-of-linux.org>, April 1998. | ||||
|  | ||||
|    LibGTop is free software; you can redistribute it and/or modify it | ||||
|    under the terms of the GNU General Public License as published by | ||||
|    the Free Software Foundation; either version 2 of the License, | ||||
|    or (at your option) any later version. | ||||
|  | ||||
|    LibGTop is distributed in the hope that it will be useful, but WITHOUT | ||||
|    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||||
|    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License | ||||
|    for more details. | ||||
|  | ||||
|    You should have received a copy of the GNU General Public License | ||||
|    along with LibGTop; see the file COPYING. If not, write to the | ||||
|    Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||||
|    Boston, MA 02111-1307, USA. | ||||
| */ | ||||
|  | ||||
| #ifndef __GLIBTOP_COMMAND_H__ | ||||
| #define __GLIBTOP_COMMAND_H__ | ||||
|  | ||||
| #include <glibtop.h> | ||||
| #include <glibtop/union.h> | ||||
|  | ||||
| G_BEGIN_DECLS | ||||
|  | ||||
| @@GLIBTOP_COMMAND_CONSTANTS@@ | ||||
|  | ||||
| #define _GLIBTOP_PARAM_SIZE		16 | ||||
|  | ||||
| typedef struct _glibtop_command		glibtop_command; | ||||
| typedef struct _glibtop_response	glibtop_response; | ||||
|  | ||||
| struct _glibtop_command | ||||
| { | ||||
|     guint64	command; | ||||
|     guint64	param_size, send_size, data_size; | ||||
|     char	parameter [_GLIBTOP_PARAM_SIZE]; | ||||
| }; | ||||
|  | ||||
| struct _glibtop_response | ||||
| { | ||||
|     int retval; | ||||
|     int glibtop_errno; | ||||
|     guint64 recv_size, data_size; | ||||
| }; | ||||
|  | ||||
| G_END_DECLS | ||||
|  | ||||
| #endif | ||||
| @@ -1,76 +0,0 @@ | ||||
| #!/usr/bin/perl | ||||
|  | ||||
| require 'c_types.pl'; | ||||
|  | ||||
| die "Usage: $0 features.def command.h.in" unless $#ARGV == 1; | ||||
|  | ||||
| $[ = 1;			# set array base to 1 | ||||
| $, = ' ';		# set output field separator | ||||
| $\ = "\n";		# set output record separator | ||||
|  | ||||
| sub toupper { | ||||
|     local($_) = @_; | ||||
|     tr/a-z/A-Z/; | ||||
|     return $_; | ||||
| } | ||||
|  | ||||
| sub tolower { | ||||
|     local($_) = @_; | ||||
|     tr/A-Z/a-z/; | ||||
|     return $_; | ||||
| } | ||||
|  | ||||
| $constants_decl_code = ''; | ||||
|  | ||||
| open FEATURESDEF, $ARGV[1] or | ||||
|   die "open ($ARGV[1]): $!"; | ||||
|  | ||||
| while (<FEATURESDEF>) { | ||||
|   chop;				# strip record separator | ||||
|    | ||||
|   if (/^[^\#]/) { | ||||
|     &parse_features_def ($_); | ||||
|   } | ||||
| } | ||||
|  | ||||
| close FEATURESDEF; | ||||
|  | ||||
| sub parse_features_def { | ||||
|   local($line) = @_; | ||||
|   @line_fields = split(/\|/, $line, 9999); | ||||
|   $retval = $line_fields[1]; | ||||
|   $element_def = $line_fields[3]; | ||||
|   $feature = $line_fields[2]; | ||||
|   $param_def = $line_fields[4]; | ||||
|  | ||||
|   $orig = $feature; | ||||
|   $feature =~ s/^@//; | ||||
|   $space = $feature; | ||||
|   $space =~ s/./ /g; | ||||
|  | ||||
|   $constants_decl_code .= sprintf | ||||
|     (qq[\#define %-40s %d\n], 'GLIBTOP_CMND_'.&toupper($feature), | ||||
|      ++$feature_count); | ||||
|  | ||||
|   $features{$feature_count} = $feature; | ||||
| } | ||||
|  | ||||
| chop $constants_decl_code; | ||||
|  | ||||
| $auto_gen_comment = sprintf | ||||
|   (qq[/*\n * This file is automatically generated.\n * Please modify `command.pl' and `command.h.in'.\n */]); | ||||
|  | ||||
| open COMMAND, $ARGV[2] or | ||||
|   die "open ($ARGV[2]): $!"; | ||||
|  | ||||
| while (<COMMAND>) { | ||||
|   chop; | ||||
|  | ||||
|   s/^\s*\@\@GLIBTOP_COMMAND_CONSTANTS\@\@\s*$/$constants_decl_code/; | ||||
|  | ||||
|   s/^\s*\@\@AUTOGEN_COMMENT\@\@\s*$/$auto_gen_comment/; | ||||
| } continue { | ||||
|   print $_; | ||||
| } | ||||
|  | ||||
| close COMMAND; | ||||
| @@ -1,385 +0,0 @@ | ||||
| #!/usr/bin/perl | ||||
|  | ||||
| require 'c_types.pl'; | ||||
|  | ||||
| $[ = 1;			# set array base to 1 | ||||
| $, = ' ';		# set output field separator | ||||
| $\ = "\n";		# set output record separator | ||||
|  | ||||
| $always_use_temp_storage = 0; | ||||
|  | ||||
| sub toupper { | ||||
|     local($_) = @_; | ||||
|     tr/a-z/A-Z/; | ||||
|     return $_; | ||||
| } | ||||
|  | ||||
| sub tolower { | ||||
|     local($_) = @_; | ||||
|     tr/A-Z/a-z/; | ||||
|     return $_; | ||||
| } | ||||
|  | ||||
| print '/* demarshal.c */'; | ||||
| print "/* This is a generated file.  Please modify `demarshal.pl' */"; | ||||
| print ''; | ||||
|  | ||||
| print '#include <glibtop.h>'; | ||||
| print '#include <glibtop/open.h>'; | ||||
| print ''; | ||||
| print '#include <glibtop/sysdeps.h>'; | ||||
| print '#include <glibtop/union.h>'; | ||||
| print ''; | ||||
| print '#include <glibtop/backend.h>'; | ||||
| print ''; | ||||
| print '#include <glibtop-backend-private.h>'; | ||||
| print '#include "server.h"'; | ||||
| print ''; | ||||
|  | ||||
| $feature_count = 0; | ||||
|  | ||||
| while (<>) { | ||||
|   chop;	# strip record separator | ||||
|  | ||||
|   if (/^[^\#]/) { | ||||
|     &output($_); | ||||
|   } | ||||
| } | ||||
|  | ||||
| sub output { | ||||
|   local($line) = @_; | ||||
|   @line_fields = split(/\|/, $line, 9999); | ||||
|   $retval = $line_fields[1]; | ||||
|   $element_def = $line_fields[3]; | ||||
|   $feature = $line_fields[2]; | ||||
|   $param_def = $line_fields[4]; | ||||
|  | ||||
|   return if $feature =~ /^@/; | ||||
|   $name = 'glibtop_'.$feature; | ||||
|    | ||||
|   $orig = $feature; | ||||
|   $feature =~ s/^@//; | ||||
|   $space = $feature; | ||||
|   $space =~ s/./ /g; | ||||
|    | ||||
|   $features{++$feature_count} = $feature; | ||||
|  | ||||
|   $orig_retval = $retval; | ||||
|    | ||||
|   if ($retval eq 'retval') { | ||||
|     $retval_param = '&retval'; | ||||
|     $call_prefix = ''; | ||||
|     $call_prefix_space = ''; | ||||
|     $prefix = 'retval = '; | ||||
|     $prefix_space = '         '; | ||||
|     $retval = 'int'; | ||||
|   } elsif ($retval !~ /^void$/) { | ||||
|     $retval_param = 'NULL'; | ||||
|     $prefix = 'retval = '; | ||||
|     $prefix_space = '         '; | ||||
|     $call_prefix = 'retval = '; | ||||
|     $call_prefix_space = '         '; | ||||
|   } else { | ||||
|     $retval_param = 'NULL'; | ||||
|     $call_prefix = ''; | ||||
|     $call_prefix_space = ''; | ||||
|     $prefix = ''; | ||||
|     $prefix_space = ''; | ||||
|   } | ||||
|    | ||||
|   if ($retval =~ /^(array|pointer)\((.*)\)$/) { | ||||
|     $retval = ($2 eq 'string') ? 'char **' : "$2 *"; | ||||
|   } | ||||
|    | ||||
|   $need_temp_storage = $always_use_temp_storage; | ||||
|   $first_param_name = ''; | ||||
|   $size_code = "\t/* send size */\n"; | ||||
|   $size_code .= "\t_LIBGTOP_SEND_len = 0;\n"; | ||||
|    | ||||
|   $local_var_decl_code = ''; | ||||
|   $local_var_decl_code .= "\tsize_t _LIBGTOP_SEND_len, _LIBGTOP_RECV_len;\n"; | ||||
|   $local_var_decl_code .= "\toff_t _LIBGTOP_SEND_offset;\n"; | ||||
|   $local_var_decl_code .= "\tchar *_LIBGTOP_RECV_buf, *_LIBGTOP_RECV_ptr;\n"; | ||||
|   $local_var_decl_code .= "\tconst char *_LIBGTOP_SEND_ptr;\n"; | ||||
|   $local_var_decl_code .= sprintf | ||||
|     (qq[\tglibtop_%s %s;\n], $feature, $feature); | ||||
|   if ($retval !~ /^void$/) { | ||||
|     $local_var_decl_code .= sprintf ("\t%s retval = (%s) 0;\n", | ||||
| 				     $retval, $retval); | ||||
|   } | ||||
|  | ||||
|   $init_local_var_code = "\t/* variable initialization */\n"; | ||||
|   $init_local_var_code .= sprintf | ||||
|     (qq[\tmemset (&%s, 0, sizeof (glibtop_%s));\n], $feature, $feature); | ||||
|   $init_local_var_code .= "\t_LIBGTOP_SEND_offset = 0;\n"; | ||||
|   $init_local_var_code .= "\t_LIBGTOP_SEND_ptr = ". | ||||
|     "(char *) send_ptr;\n"; | ||||
|  | ||||
|   $demarshal_code = ''; | ||||
|  | ||||
|   $call_param = ''; | ||||
|   $param_decl = ''; | ||||
|   $need_temp_len = 0; | ||||
|   $nr_params = (@params = split(/:/, $param_def, 9999)); | ||||
|   for ($param = 1; $param <= $nr_params; $param++) { | ||||
|     $list = $params[$param]; | ||||
|     $type = $params[$param]; | ||||
|     $type =~ s/\(.*//; | ||||
|     $list =~ s/^.*\(//; | ||||
|     $list =~ s/\)$//; | ||||
|     $count = (@fields = split(/,/, $list, 9999)); | ||||
|     for ($field = 1; $field <= $count; $field++) { | ||||
|       my $c_type = $typeinfo->{$type}->[1]; | ||||
|        | ||||
|       if ($first_param_name eq '') { | ||||
| 	$first_param_name = $fields[$field]; | ||||
|       } | ||||
|        | ||||
|       if ($typeinfo->{$type}->[2]) { | ||||
| 	$need_temp_storage = 1; | ||||
|       } | ||||
|        | ||||
|       if ($param_decl eq '') { | ||||
| 	$param_decl = ",\n            " . $space . '    '; | ||||
|       } else { | ||||
| 	$param_decl = $param_decl . ', '; | ||||
|       } | ||||
|       $param_decl = $param_decl . $c_type . ' ' . $fields[$field]; | ||||
|       $call_param = $call_param . ', _LIBGTOP_demarshal_' . $fields[$field]; | ||||
|  | ||||
|       $size_code .= "\t_LIBGTOP_SEND_len += "; | ||||
|       if ($typeinfo->{$type}->[2]) { | ||||
| 	$size_code .= sprintf ("sizeof (size_t)"); | ||||
|       } else { | ||||
| 	$size_code .= sprintf ("sizeof (%s)", $c_type); | ||||
|       } | ||||
|       $size_code .= ";\n"; | ||||
|  | ||||
|       $local_var_decl_code .= sprintf | ||||
| 	(qq[\t%s _LIBGTOP_demarshal_%s;\n], $c_type, $fields[$field]); | ||||
|       $init_local_var_code .= sprintf | ||||
| 	(qq[\tmemset (&_LIBGTOP_demarshal_%s, 0, sizeof (%s));\n], | ||||
| 	 $fields[$field], $c_type); | ||||
|  | ||||
|       $demarshal_code .= "\t_LIBGTOP_SEND_ptr = ". | ||||
| 	"(char *) send_ptr + _LIBGTOP_SEND_offset;\n"; | ||||
|  | ||||
|       if ($typeinfo->{$type}->[2]) { | ||||
| 	$demarshal_code .= sprintf ("\tmemcpy (&_LIBGTOP_TEMP_len, _LIBGTOP_SEND_ptr, sizeof (size_t));\n"); | ||||
| 	$demarshal_code .= sprintf | ||||
| 	  (qq[\t_LIBGTOP_DATA_len += _LIBGTOP_TEMP_len;\n]); | ||||
| 	$demarshal_code .= sprintf | ||||
| 	  (qq[\tif (_LIBGTOP_DATA_len > data_size)\n\t\treturn -GLIBTOP_ERROR_DEMARSHAL_ERROR;\n]); | ||||
| 	$demarshal_code .= sprintf | ||||
| 	  (qq[\t_LIBGTOP_DATA_offset += _LIBGTOP_TEMP_len;\n]); | ||||
|       } | ||||
|  | ||||
|       if (defined $demarshal_funcs->{$type}) { | ||||
| 	$demarshal_code .= $demarshal_funcs->{$type}->($c_type, $fields[$field], "\t"); | ||||
|       } else { | ||||
| 	$demarshal_code .= sprintf ("\tmemcpy (&_LIBGTOP_demarshal_%s, _LIBGTOP_SEND_ptr, %s);\n", | ||||
| 				    $fields[$field], "sizeof ($c_type)"); | ||||
|       } | ||||
|  | ||||
|       $demarshal_code .= "\t_LIBGTOP_SEND_offset += "; | ||||
|       if ($typeinfo->{$type}->[2]) { | ||||
| 	$demarshal_code .= sprintf ("sizeof (size_t)"); | ||||
|       } else { | ||||
| 	$demarshal_code .= sprintf ("sizeof (%s)", $c_type); | ||||
|       } | ||||
|       $demarshal_code .= ";\n"; | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   if (!($demarshal_code eq '')) { | ||||
|     $demarshal_code = sprintf (qq[\t/* demarshal start */\n%s\n], | ||||
| 			       $demarshal_code); | ||||
|   } | ||||
|  | ||||
|   if ($line_fields[3] eq '') { | ||||
|     $call_code = sprintf | ||||
|       ("\tretval = glibtop_get_%s_p (server%s);\n", | ||||
|        $feature, $call_param); | ||||
|   } elsif ($line_fields[3] eq 'array') { | ||||
|     $call_code = sprintf | ||||
|       ("\tretval = glibtop_get_%s_p (server, &array%s);\n", | ||||
|        $feature, $call_param); | ||||
|     $local_var_decl_code .= sprintf (qq[\tglibtop_array array;\n]); | ||||
|   } elsif ($line_fields[3] =~ /^array/) { | ||||
|     $call_code = sprintf | ||||
|       ("\tretval = glibtop_get_%s_p (server, &array, &%s%s);\n", | ||||
|        $feature, $feature, $call_param); | ||||
|     $local_var_decl_code .= sprintf (qq[\tglibtop_array array;\n]); | ||||
|   } else { | ||||
|     $call_code = sprintf | ||||
|       ("\tretval = glibtop_get_%s_p (server, &%s%s);\n", | ||||
|        $feature, $feature, $call_param); | ||||
|   } | ||||
|  | ||||
|   if ($orig_retval eq 'retval') { | ||||
|     $call_code .= sprintf | ||||
|       (qq[\tif (retval_ptr)\n\t\t*retval_ptr = retval;\n]); | ||||
|   } else { | ||||
|     $call_code .= sprintf | ||||
|       (qq[\tif (retval_ptr)\n\t\t*retval_ptr = server->glibtop_errno;\n]); | ||||
|   } | ||||
|  | ||||
|   $size_code .= sprintf | ||||
|     (qq[\tif (_LIBGTOP_SEND_len != send_size)\n\t\treturn -GLIBTOP_ERROR_DEMARSHAL_ERROR;\n\n]); | ||||
|  | ||||
|   $size_code .= "\t/* recv size */\n"; | ||||
|   $size_code .= "\t_LIBGTOP_RECV_len = 0;\n"; | ||||
|   if ($line_fields[3] eq '') { | ||||
|   } elsif ($line_fields[3] eq 'array') { | ||||
|     $size_code .= "\t_LIBGTOP_RECV_len += sizeof (glibtop_array);\n"; | ||||
|   } elsif ($line_fields[3] =~ /^array/) { | ||||
|     $size_code .= "\t_LIBGTOP_RECV_len += sizeof (glibtop_array);\n"; | ||||
|     $size_code .= sprintf | ||||
|       (qq[\t_LIBGTOP_RECV_len += sizeof (glibtop_%s);\n], $feature); | ||||
|   } else { | ||||
|     $size_code .= sprintf | ||||
|       (qq[\t_LIBGTOP_RECV_len += sizeof (glibtop_%s);\n], $feature); | ||||
|   } | ||||
|   $size_code .= "\n"; | ||||
|  | ||||
|   $size_code .= "\t/* recv buffer */\n"; | ||||
|   if ($line_fields[3] eq '') { | ||||
|     $size_code .= "\t_LIBGTOP_RECV_buf = NULL;\n"; | ||||
|   } else { | ||||
|     $size_code .= "\t_LIBGTOP_RECV_buf = g_malloc (_LIBGTOP_RECV_len);\n"; | ||||
|   } | ||||
|   $size_code .= "\t_LIBGTOP_RECV_ptr = _LIBGTOP_RECV_buf;\n\n"; | ||||
|  | ||||
|   $recv_buf_code = ''; | ||||
|   if ($line_fields[3] eq '') { | ||||
|   } elsif ($line_fields[3] eq 'array') { | ||||
|     $recv_buf_code = "\t/* write recv buffer */\n"; | ||||
|     $recv_buf_code .= sprintf | ||||
|       (qq[\tmemcpy (_LIBGTOP_RECV_ptr, &array, sizeof (glibtop_array));\n]); | ||||
|     $recv_buf_code .= sprintf | ||||
|       (qq[\t_LIBGTOP_RECV_ptr += sizeof (glibtop_array);\n]); | ||||
|   } elsif ($line_fields[3] =~ /^array/) { | ||||
|     $recv_buf_code = "\t/* write recv buffer */\n"; | ||||
|     $recv_buf_code .= sprintf | ||||
|       (qq[\tmemcpy (_LIBGTOP_RECV_ptr, &array, sizeof (glibtop_array));\n]); | ||||
|     $recv_buf_code .= sprintf | ||||
|       (qq[\t_LIBGTOP_RECV_ptr += sizeof (glibtop_array);\n]); | ||||
|     $recv_buf_code .= sprintf | ||||
|       (qq[\tmemcpy (_LIBGTOP_RECV_ptr, &%s, sizeof (glibtop_%s));\n], | ||||
|        $feature, $feature); | ||||
|     $recv_buf_code .= sprintf | ||||
|       (qq[\t_LIBGTOP_RECV_ptr += sizeof (glibtop_%s);\n], $feature); | ||||
|   } else { | ||||
|     $recv_buf_code = "\t/* write recv buffer */\n"; | ||||
|     $recv_buf_code .= sprintf | ||||
|       (qq[\tmemcpy (_LIBGTOP_RECV_ptr, &%s, sizeof (glibtop_%s));\n], | ||||
|        $feature, $feature); | ||||
|     $recv_buf_code .= sprintf | ||||
|       (qq[\t_LIBGTOP_RECV_ptr += sizeof (glibtop_%s);\n], $feature); | ||||
|   } | ||||
|  | ||||
|   $recv_buf_code .= "\n"; | ||||
|   $recv_buf_code .= "\t*recv_buf_ptr = _LIBGTOP_RECV_buf;\n"; | ||||
|   $recv_buf_code .= "\t*recv_size_ptr = _LIBGTOP_RECV_len;\n"; | ||||
|  | ||||
|   if ($orig_retval eq 'pointer(string)') { | ||||
|     $need_temp_storage = 1; | ||||
|     $local_var_decl_code .= "\tchar **_LIBGTOP_TEMP_ptr;\n"; | ||||
|     $local_var_decl_code .= "\tchar *_LIBGTOP_ARRAY_ptr;\n"; | ||||
|     $local_var_decl_code .= "\tchar *_LIBGTOP_ARRAY_base;\n"; | ||||
|     $local_var_decl_code .= "\toff_t _LIBGTOP_ARRAY_offset;\n"; | ||||
|     $local_var_decl_code .= "\toff_t *_LIBGTOP_ARRAY_off_ptr;\n"; | ||||
|  | ||||
|     $recv_buf_code .= "\n"; | ||||
|     $recv_buf_code .= "\t_LIBGTOP_TEMP_len = 0;\n"; | ||||
|     $recv_buf_code .= "\t_LIBGTOP_TEMP_ptr = retval;\n"; | ||||
|     $recv_buf_code .= "\tfor (_LIBGTOP_TEMP_ptr = retval; _LIBGTOP_TEMP_ptr && *_LIBGTOP_TEMP_ptr; _LIBGTOP_TEMP_ptr++)\n"; | ||||
|     $recv_buf_code .= "\t\t_LIBGTOP_TEMP_len += strlen (*_LIBGTOP_TEMP_ptr)+1;\n"; | ||||
|     $recv_buf_code .= "\n"; | ||||
|     $recv_buf_code .= "\t_LIBGTOP_TEMP_len += sizeof (off_t) + 1;\n"; | ||||
|     $recv_buf_code .= "\t_LIBGTOP_TEMP_len += array.number * sizeof (off_t);\n"; | ||||
|     $recv_buf_code .= "\t_LIBGTOP_ARRAY_base = g_malloc (_LIBGTOP_TEMP_len);"; | ||||
|     $recv_buf_code .= "\t_LIBGTOP_ARRAY_ptr = _LIBGTOP_ARRAY_base;\n"; | ||||
|     $recv_buf_code .= "\t_LIBGTOP_ARRAY_offset = array.number * sizeof (off_t);\n"; | ||||
|     $recv_buf_code .= "\t_LIBGTOP_ARRAY_offset += sizeof (off_t);\n"; | ||||
|     $recv_buf_code .= "\t_LIBGTOP_ARRAY_off_ptr = (off_t *) _LIBGTOP_ARRAY_ptr;\n"; | ||||
|     $recv_buf_code .= "\n"; | ||||
|     $recv_buf_code .= "\t*_LIBGTOP_ARRAY_off_ptr++ = _LIBGTOP_ARRAY_offset;\n"; | ||||
|     $recv_buf_code .= "\tfor (_LIBGTOP_TEMP_ptr = retval; _LIBGTOP_TEMP_ptr && *_LIBGTOP_TEMP_ptr; _LIBGTOP_TEMP_ptr++) {\n"; | ||||
|     $recv_buf_code .= "\t\t*_LIBGTOP_ARRAY_off_ptr++ = _LIBGTOP_ARRAY_offset;\n"; | ||||
|     $recv_buf_code .= "\t\t_LIBGTOP_ARRAY_offset += strlen (*_LIBGTOP_TEMP_ptr)+1;\n"; | ||||
|     $recv_buf_code .= "\t}\n\n"; | ||||
|     $recv_buf_code .= "\t_LIBGTOP_ARRAY_ptr = (char *) _LIBGTOP_ARRAY_off_ptr;\n"; | ||||
|     $recv_buf_code .= "\tfor (_LIBGTOP_TEMP_ptr = retval; _LIBGTOP_TEMP_ptr && *_LIBGTOP_TEMP_ptr; _LIBGTOP_TEMP_ptr++) {\n"; | ||||
|     $recv_buf_code .= "\t\tstrcpy (_LIBGTOP_ARRAY_ptr, *_LIBGTOP_TEMP_ptr);\n"; | ||||
|     $recv_buf_code .= "\t\t_LIBGTOP_ARRAY_ptr += strlen (*_LIBGTOP_TEMP_ptr)+1;\n"; | ||||
|     $recv_buf_code .= "\t}\n\n"; | ||||
|     $recv_buf_code .= "\tif (recv_data_ptr) {\n"; | ||||
|     $recv_buf_code .= "\t\t*recv_data_ptr = _LIBGTOP_ARRAY_base;\n"; | ||||
|     $recv_buf_code .= "\t\t*recv_data_size_ptr = _LIBGTOP_TEMP_len;\n"; | ||||
|     $recv_buf_code .= "\t}\n"; | ||||
|  | ||||
|   } elsif ($line_fields[3] =~ /^array/) { | ||||
|     $recv_buf_code .= "\n"; | ||||
|     $recv_buf_code .= "\tif (recv_data_ptr) {\n"; | ||||
|     $recv_buf_code .= "\t\t*recv_data_ptr = retval;\n"; | ||||
|     $recv_buf_code .= "\t\t*recv_data_size_ptr = array.total;\n"; | ||||
|     $recv_buf_code .= "\t}\n"; | ||||
|   } | ||||
|  | ||||
|   if ($need_temp_storage) { | ||||
|     $local_var_decl_code .= "\tsize_t _LIBGTOP_TEMP_len;\n"; | ||||
|     $local_var_decl_code .= "\tsize_t _LIBGTOP_DATA_len;\n"; | ||||
|     $local_var_decl_code .= "\toff_t _LIBGTOP_DATA_offset;\n"; | ||||
|     $local_var_decl_code .= "\tchar *_LIBGTOP_DATA_ptr;\n"; | ||||
|  | ||||
|     $init_local_var_code .= "\t_LIBGTOP_DATA_len = 0;\n"; | ||||
|     $init_local_var_code .= "\t_LIBGTOP_DATA_offset = 0;\n"; | ||||
|     $init_local_var_code .= "\t_LIBGTOP_DATA_ptr = ". | ||||
|       "(char *) data_ptr;\n"; | ||||
|   } | ||||
|  | ||||
|   $func_decl_code = sprintf | ||||
|     (qq[static int\n_glibtop_demarshal_%s_i (glibtop *server, glibtop_backend *backend, const void *send_ptr, size_t send_size, void *data_ptr, size_t data_size, void **recv_buf_ptr, size_t *recv_size_ptr, void **recv_data_ptr, size_t *recv_data_size_ptr, int *retval_ptr)\n], $feature); | ||||
|  | ||||
|   if (!($call_code eq '')) { | ||||
|     $call_code .= "\n"; | ||||
|   } | ||||
|    | ||||
|   $func_body_code = sprintf | ||||
|     (qq[%s%s%s%s], $size_code, $demarshal_code, $call_code, $recv_buf_code); | ||||
|    | ||||
|   $total_code = sprintf | ||||
|     (qq[%s{\n%s\n%s\n%s\n\treturn 0;\n}\n], | ||||
|      $func_decl_code, $local_var_decl_code, $init_local_var_code, | ||||
|      $func_body_code); | ||||
|    | ||||
|   $total_code = sprintf ("#if GLIBTOP_SUID_%s\n\n%s\n#endif /* GLIBTOP_SUID_%s */\n\n", | ||||
| 			 &toupper($feature), $total_code, | ||||
| 			 &toupper($feature)); | ||||
|  | ||||
|   print $total_code; | ||||
| } | ||||
|  | ||||
| $func_decl_code = sprintf | ||||
|   (qq[int\nglibtop_demarshal_func_i (glibtop *server, glibtop_backend *backend, unsigned command, const void *send_ptr, size_t send_size, void *data_ptr, size_t data_size, void **recv_buf_ptr, size_t *recv_size_ptr, void **recv_data_ptr, size_t *recv_data_size_ptr, int *retval_ptr)]); | ||||
|  | ||||
| $switch_body_code = ''; | ||||
|  | ||||
| for ($nr = 1; $nr <= $feature_count; $nr++) { | ||||
|   $feature = $features{$nr}; | ||||
|  | ||||
|   $switch_body_code .= sprintf | ||||
|     (qq[#if GLIBTOP_SUID_%s\n\tcase GLIBTOP_CMND_%s:\n\t\treturn _glibtop_demarshal_%s_i\n\t\t\t(server, backend, send_ptr, send_size,\n\t\t\t data_ptr, data_size,\n\t\t\t recv_buf_ptr, recv_size_ptr,\n\t\t\t recv_data_ptr, recv_data_size_ptr, retval_ptr);\n#endif /* GLIBTOP_SUID_%s */\n], | ||||
|      &toupper ($feature), &toupper ($feature), $feature, &toupper ($feature)); | ||||
| } | ||||
|  | ||||
| $switch_code = sprintf | ||||
|   (qq[\tswitch (command) {\n%s\tdefault:\n\t\treturn -GLIBTOP_ERROR_INVALID_ARGUMENT;\n\t}\n], $switch_body_code); | ||||
|  | ||||
| $total_code = sprintf | ||||
|   (qq[%s\n{\n%s}\n\n], $func_decl_code, $switch_code); | ||||
|  | ||||
| print $total_code; | ||||
|  | ||||
| 1; | ||||
| @@ -1,114 +0,0 @@ | ||||
| /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */ | ||||
|  | ||||
| /* $Id$ */ | ||||
|  | ||||
| /* Copyright (C) 1998-99 Martin Baulig | ||||
|    This file is part of LibGTop 1.0. | ||||
|  | ||||
|    Contributed by Martin Baulig <martin@home-of-linux.org>, April 1998. | ||||
|  | ||||
|    LibGTop is free software; you can redistribute it and/or modify it | ||||
|    under the terms of the GNU General Public License as published by | ||||
|    the Free Software Foundation; either version 2 of the License, | ||||
|    or (at your option) any later version. | ||||
|  | ||||
|    LibGTop is distributed in the hope that it will be useful, but WITHOUT | ||||
|    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||||
|    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License | ||||
|    for more details. | ||||
|  | ||||
|    You should have received a copy of the GNU General Public License | ||||
|    along with LibGTop; see the file COPYING. If not, write to the | ||||
|    Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||||
|    Boston, MA 02111-1307, USA. | ||||
| */ | ||||
|  | ||||
| #include "server.h" | ||||
|  | ||||
| void | ||||
| do_output (int s, glibtop_response *resp, const void *recv_ptr, | ||||
| 	   const void *data_ptr) | ||||
| { | ||||
| #ifdef DEBUG | ||||
|     fprintf (stderr, "Really writing %d bytes.\n", | ||||
| 	     sizeof (glibtop_response)); | ||||
| #endif | ||||
|  | ||||
|     if (s == 0) { | ||||
| 	if (write (1, (const void *) resp, sizeof (glibtop_response)) < 0) | ||||
| 	    glibtop_warn_io ("write"); | ||||
|     } else { | ||||
| 	if (send (s, (const void *) resp, sizeof (glibtop_response), 0) < 0) | ||||
| 	    glibtop_warn_io ("send"); | ||||
|     } | ||||
|  | ||||
|     if (resp->recv_size) { | ||||
| #ifdef DEBUG | ||||
| 	fprintf (stderr, "Writing %ld bytes of data.\n", | ||||
| 		 (long) resp->recv_size); | ||||
| #endif | ||||
|  | ||||
| 	if (s == 0) { | ||||
| 	    if (write (1, recv_ptr, resp->recv_size) < 0) | ||||
| 		glibtop_warn_io ("write"); | ||||
| 	} else { | ||||
| 	    if (send (s, recv_ptr, resp->recv_size, 0) < 0) | ||||
| 		glibtop_warn_io ("send"); | ||||
| 	} | ||||
|     } | ||||
|  | ||||
|     if (resp->data_size) { | ||||
| #ifdef DEBUG | ||||
| 	fprintf (stderr, "Writing %ld bytes of extra data.\n", | ||||
| 		 (long) resp->data_size); | ||||
| #endif | ||||
|  | ||||
| 	if (s == 0) { | ||||
| 	    if (write (1, data_ptr, resp->data_size) < 0) | ||||
| 		glibtop_warn_io ("write"); | ||||
| 	} else { | ||||
| 	    if (send (s, data_ptr, resp->data_size, 0) < 0) | ||||
| 		glibtop_warn_io ("send"); | ||||
| 	} | ||||
|     } | ||||
|  | ||||
| } | ||||
|  | ||||
| int | ||||
| do_read (int s, void *ptr, size_t total_size) | ||||
| { | ||||
|     int nread; | ||||
|     char *tmp_ptr; | ||||
|     size_t already_read = 0, remaining = total_size; | ||||
|  | ||||
|     while (already_read < total_size) { | ||||
| 	if (s) | ||||
| 	    nread = recv (s, ptr, remaining, 0); | ||||
| 	else | ||||
| 	    nread = read (0, ptr, remaining); | ||||
|  | ||||
| 	if ((already_read == 0) && (nread == 0)) { | ||||
| 	    glibtop_warn ("pid %d received eof.", getpid ()); | ||||
| 	    return 0; | ||||
| 	} | ||||
|  | ||||
| 	if (nread <= 0) { | ||||
| 	    glibtop_warn_io ("recv"); | ||||
| 	    return 0; | ||||
| 	} | ||||
|  | ||||
| 	already_read += nread; | ||||
| 	remaining -= nread; | ||||
| 	/* (char *) ptr += nread; */ | ||||
| 	tmp_ptr = ptr; | ||||
| 	tmp_ptr += nread; | ||||
| 	ptr = tmp_ptr; | ||||
|  | ||||
| #ifdef DEBUG | ||||
| 	fprintf (stderr, "READ (%d): %d - %d - %d\n", | ||||
| 		 nread, already_read, remaining, total_size); | ||||
| #endif | ||||
|     } | ||||
|  | ||||
|     return already_read; | ||||
| } | ||||
| @@ -1,13 +0,0 @@ | ||||
| <?xml version="1.0"?> <!-- -*-xml-*- --> | ||||
| <!DOCTYPE libgtop:backends SYSTEM 'libgtop-backends.dtd'> | ||||
| <libgtop:Backends xmlns:libgtop="http://www.home-of-linux.org/libgtop/1.1"> | ||||
|  | ||||
|   <libgtop:Backend> | ||||
|     <libgtop:Name>glibtop-backend-server</libgtop:Name> | ||||
|     <libgtop:Location> | ||||
|       <libgtop:LibtoolName>libgtop_backend_server.la</libgtop:LibtoolName> | ||||
|       <libgtop:ShlibName>libgtop_backend_server.so</libgtop:ShlibName> | ||||
|     </libgtop:Location> | ||||
|   </libgtop:Backend> | ||||
|  | ||||
| </libgtop:Backends> | ||||
| @@ -1,305 +0,0 @@ | ||||
| #!/usr/bin/perl | ||||
|  | ||||
| require 'c_types.pl'; | ||||
|  | ||||
| $[ = 1;			# set array base to 1 | ||||
| $, = ' ';		# set output field separator | ||||
| $\ = "\n";		# set output record separator | ||||
|  | ||||
| $always_use_temp_storage = 1; | ||||
|  | ||||
| sub toupper { | ||||
|     local($_) = @_; | ||||
|     tr/a-z/A-Z/; | ||||
|     return $_; | ||||
| } | ||||
|  | ||||
| sub tolower { | ||||
|     local($_) = @_; | ||||
|     tr/A-Z/a-z/; | ||||
|     return $_; | ||||
| } | ||||
|  | ||||
| print '/* marshal.c */'; | ||||
| print "/* This is a generated file.  Please modify `marshal.pl' */"; | ||||
| print ''; | ||||
|  | ||||
| print '#include <backend-server.h>'; | ||||
| print ''; | ||||
| print '#include <glibtop/sysdeps.h>'; | ||||
| print '#include <glibtop/union.h>'; | ||||
| print ''; | ||||
| print '#include "command.h"'; | ||||
| print '#include <glibtop/call-vector.h>'; | ||||
| print ''; | ||||
|  | ||||
| $feature_count = 0; | ||||
|  | ||||
| while (<>) { | ||||
|     chop;	# strip record separator | ||||
|  | ||||
|     if (/^[^#]/) { | ||||
| 	&output($_); | ||||
|     } | ||||
| } | ||||
|  | ||||
| sub output { | ||||
|     local($line) = @_; | ||||
|     @line_fields = split(/\|/, $line, 9999); | ||||
|     $retval = $line_fields[1]; | ||||
|     $feature = $line_fields[2]; | ||||
|     $param_def = $line_fields[4]; | ||||
|  | ||||
|     $orig = $feature; | ||||
|     $feature =~ s/^@//; | ||||
|     $space = $feature; | ||||
|     $space =~ s/./ /g; | ||||
|  | ||||
|     $features{++$feature_count} = $orig; | ||||
|     return if $orig =~ /^@/; | ||||
|  | ||||
|     $orig_retval = $retval; | ||||
|     if ($retval eq 'retval') { | ||||
|       $retval_param = '&retval'; | ||||
|       $call_prefix = ''; | ||||
|       $call_prefix_space = ''; | ||||
|       $prefix = 'retval = '; | ||||
|       $prefix_space = '         '; | ||||
|       $retval = 'int'; | ||||
|     } | ||||
|     elsif ($retval !~ /^void$/) { | ||||
|       $retval_param = 'NULL'; | ||||
|       $prefix = 'retval = '; | ||||
|       $prefix_space = '         '; | ||||
|       $call_prefix = 'retval = '; | ||||
|       $call_prefix_space = '         '; | ||||
|     } | ||||
|     else { | ||||
|       $retval_param = 'NULL'; | ||||
|       $call_prefix = ''; | ||||
|       $call_prefix_space = ''; | ||||
|       $prefix = ''; | ||||
|       $prefix_space = ''; | ||||
|     } | ||||
|  | ||||
|     if ($retval =~ /^(array|pointer)\((.*)\)$/) { | ||||
|       $retval = ($2 eq 'string') ? 'char **' : "$2 *"; | ||||
|     } | ||||
|  | ||||
|     $need_temp_storage = $always_use_temp_storage; | ||||
|     $local_var_init_code = "\t/* variable initialization */\n"; | ||||
|     $local_var_init_code .= "\t_LIBGTOP_SEND_len = 0;\n"; | ||||
|     $local_var_init_code .= "\t_LIBGTOP_DATA_len = 0;\n"; | ||||
|     $local_var_init_code .= "\t_LIBGTOP_SEND_offset = 0;\n"; | ||||
|     $local_var_init_code  .= "\t_LIBGTOP_SEND_ptr = ". | ||||
| 	  "(char *) _LIBGTOP_SEND_buf;\n"; | ||||
|     $marshal_code = "\t/* marshal start */\n"; | ||||
|     $marshal_code .= "\tmemset (_LIBGTOP_SEND_buf, 0, _LIBGTOP_SEND_len);\n"; | ||||
|     $first_param_name = ''; | ||||
|     $size_code = ''; | ||||
|  | ||||
|     $call_param = ''; | ||||
|     $param_decl = ''; | ||||
|     $need_temp_len = 0; | ||||
|     $nr_params = (@params = split(/:/, $param_def, 9999)); | ||||
|     for ($param = 1; $param <= $nr_params; $param++) { | ||||
|       $list = $params[$param]; | ||||
|       $type = $params[$param]; | ||||
|       $type =~ s/\(.*//; | ||||
|       $list =~ s/^.*\(//; | ||||
|       $list =~ s/\)$//; | ||||
|       $count = (@fields = split(/,/, $list, 9999)); | ||||
|       for ($field = 1; $field <= $count; $field++) { | ||||
| 	my $c_type = $typeinfo->{$type}->[1]; | ||||
|  | ||||
| 	if ($first_param_name eq '') { | ||||
| 	  $first_param_name = $fields[$field]; | ||||
| 	} | ||||
|  | ||||
| 	if ($typeinfo->{$type}->[2]) { | ||||
| 	  $need_temp_storage = 1; | ||||
| 	} | ||||
|  | ||||
| 	if ($param_decl eq '') { | ||||
| 	  $param_decl = ",\n            " . $space . '    '; | ||||
| 	} | ||||
| 	else { | ||||
| 	  $param_decl = $param_decl . ', '; | ||||
| 	} | ||||
| 	$param_decl = $param_decl . $c_type . ' ' . $fields[$field]; | ||||
| 	$call_param = $call_param . ', ' . $fields[$field]; | ||||
|  | ||||
| 	$size_code .= "\t_LIBGTOP_SEND_len += "; | ||||
| 	if ($typeinfo->{$type}->[2]) { | ||||
| 	  $size_code .= sprintf ("sizeof (size_t)"); | ||||
| 	} else { | ||||
| 	  $size_code .= sprintf ("sizeof (%s)", $c_type); | ||||
| 	} | ||||
| 	$size_code .= ";\n"; | ||||
|  | ||||
| 	if (defined $sizeof_funcs->{$type}) { | ||||
| 	  $size_code .= "\t_LIBGTOP_DATA_len += "; | ||||
| 	  $size_code .= $sizeof_funcs->{$type}->($fields[$field]); | ||||
| 	  $size_code .= ";\n"; | ||||
| 	} | ||||
|  | ||||
| 	$marshal_code .= "\t_LIBGTOP_SEND_ptr = ". | ||||
| 	  "(char *) _LIBGTOP_SEND_buf + _LIBGTOP_SEND_offset;\n"; | ||||
|  | ||||
| 	if (defined $marshal_funcs->{$type}) { | ||||
| 	  $marshal_code .= $marshal_funcs->{$type}->($c_type, $fields[$field], "\t"); | ||||
| 	} else { | ||||
| 	  $marshal_code .= sprintf ("\tmemcpy (_LIBGTOP_SEND_ptr, %s, %s);\n", | ||||
| 				    '&'.$fields[$field], "sizeof ($c_type)"); | ||||
| 	} | ||||
|  | ||||
| 	$marshal_code .= "\t_LIBGTOP_SEND_offset += "; | ||||
| 	if ($typeinfo->{$type}->[2]) { | ||||
| 	  $marshal_code .= sprintf ("sizeof (size_t)"); | ||||
| 	} else { | ||||
| 	  $marshal_code .= sprintf ("sizeof (%s)", $c_type); | ||||
| 	} | ||||
| 	$marshal_code .= ";\n"; | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     $local_var_code = ""; | ||||
|     $local_var_code .= "\tunsigned _LIBGTOP_SEND_offset, _LIBGTOP_SEND_len;\n"; | ||||
|     $local_var_code .= "\tunsigned _LIBGTOP_DATA_len;\n"; | ||||
|     if ($need_temp_len) { | ||||
|       $local_var_code .= "\tunsigned _LIBGTOP_SEND_temp_len;\n"; | ||||
|     } | ||||
|     $local_var_code .= "\tvoid *_LIBGTOP_SEND_buf, *_LIBGTOP_DATA_buf;\n"; | ||||
|     $local_var_code .= "\tchar *_LIBGTOP_SEND_ptr, *_LIBGTOP_DATA_ptr;\n"; | ||||
|     if ($retval !~ /^void$/) { | ||||
|       $local_var_code .= sprintf ("\t%s retval = (%s) 0;\n", | ||||
| 				  $retval, $retval); | ||||
|     } | ||||
|  | ||||
|     $total_code = ''; | ||||
|  | ||||
|     $send_buf_code = "\t/* send buffer */\n"; | ||||
|     $send_buf_code .= "\t_LIBGTOP_SEND_buf = "; | ||||
|     if ($need_temp_storage) { | ||||
|       $send_buf_code .= "g_malloc (_LIBGTOP_SEND_len+1)"; | ||||
|     } else { | ||||
|       $send_buf_code .= '(void *) &'.$first_param_name; | ||||
|     } | ||||
|     $send_buf_code .= ";\n\n"; | ||||
|  | ||||
|     $send_buf_code .= "\t/* data buffer */\n"; | ||||
|     $send_buf_code .= "\t_LIBGTOP_DATA_buf = "; | ||||
|     if ($need_temp_storage) { | ||||
|       $send_buf_code .= "g_malloc (_LIBGTOP_DATA_len+1)"; | ||||
|     } else { | ||||
|       $send_buf_code .= 'NULL'; | ||||
|     } | ||||
|     $send_buf_code .= ";\n"; | ||||
|     $send_buf_code .= "\t_LIBGTOP_DATA_ptr = _LIBGTOP_DATA_buf;\n"; | ||||
|  | ||||
|     $call_code = ''; | ||||
|     $call_code .= sprintf ("\t%sglibtop_call_i (server, closure, GLIBTOP_CMND_%s,\n", | ||||
| 			   $call_prefix, &toupper($feature)); | ||||
|     $call_code .= sprintf ("\t\t\t%s%s, %s,\n", $call_prefix_space, | ||||
| 			   "_LIBGTOP_SEND_len", "_LIBGTOP_SEND_buf"); | ||||
|     $call_code .= sprintf ("\t\t\t%s%s, %s,\n", $call_prefix_space, | ||||
| 			   "_LIBGTOP_DATA_len", "_LIBGTOP_DATA_buf"); | ||||
|     if ($line_fields[3] eq '') { | ||||
|       $call_code .= sprintf ("\t\t\t%s0, NULL,\n", $call_prefix_space); | ||||
|     } elsif ($line_fields[3] eq  'array') { | ||||
|       $call_code .= sprintf ("\t\t\t%ssizeof (glibtop_array), array,\n", | ||||
| 			     $call_prefix_space); | ||||
|     } else { | ||||
|       $call_code .= sprintf ("\t\t\t%ssizeof (glibtop_%s), buf,\n", | ||||
| 			     $call_prefix_space, $feature); | ||||
|     } | ||||
|     $call_code .= sprintf ("\t\t\t%s%s);\n", $call_prefix_space, $retval_param); | ||||
|  | ||||
|     if ($need_temp_storage) { | ||||
|       $send_buf_free_code = "\tg_free (_LIBGTOP_SEND_buf);\n"; | ||||
|       $send_buf_free_code .= "\tg_free (_LIBGTOP_DATA_buf);\n"; | ||||
|     } else { | ||||
|       $send_buf_free_code = ""; | ||||
|     } | ||||
|  | ||||
|     if (!($size_code eq '')) { | ||||
|       $size_code = sprintf (qq[\t/* send size */\n%s\n], $size_code); | ||||
|     } | ||||
|  | ||||
|     if ($orig_retval eq 'pointer(string)') { | ||||
|       $call_code .= "\n"; | ||||
|       $local_var_code .= "\tchar *_LIBGTOP_ARRAY_ptr, **ptrlist;\n"; | ||||
|       $local_var_code .= "\toff_t *_LIBGTOP_ARRAY_off_ptr;\n"; | ||||
|       $local_var_code .= "\tint i;\n"; | ||||
|       $call_code .= "\tptrlist = g_malloc (array->number+1 * sizeof (char *));\n"; | ||||
|       $call_code .= "\t_LIBGTOP_ARRAY_off_ptr = (off_t *) retval;\n"; | ||||
|       $call_code .= "\t_LIBGTOP_ARRAY_ptr = (char *) retval;\n"; | ||||
|       $call_code .= "\t_LIBGTOP_ARRAY_off_ptr++;\n\n"; | ||||
|       $call_code .= "\tfor (i = 0; i < array->number; i++)\n"; | ||||
|       $call_code .= "\t\tptrlist [i] = g_strdup (_LIBGTOP_ARRAY_ptr + *_LIBGTOP_ARRAY_off_ptr++);\n"; | ||||
|       $call_code .= "\tptrlist [array->number] = NULL;\n\n"; | ||||
|       $call_code .= "\tg_free (retval);\n"; | ||||
|       $call_code .= "\tretval = ptrlist;\n"; | ||||
|     } | ||||
|  | ||||
|     $total_code .= sprintf ("%s%s\n%s\n%s\n%s\n", | ||||
| 			    $size_code, $send_buf_code, $marshal_code, | ||||
| 			    $call_code, $send_buf_free_code); | ||||
|  | ||||
|     $return_code = ''; | ||||
|     if ($retval !~ /^void$/) { | ||||
|       $return_code .= "\treturn retval;\n"; | ||||
|     } else { | ||||
|       $return_code .= "\treturn;\n"; | ||||
|     } | ||||
|  | ||||
|     $total_code .= $return_code; | ||||
|  | ||||
|     $func_decl = 'static '.$retval."\n"; | ||||
|     if ($line_fields[3] eq '') { | ||||
|       $func_decl .= sprintf ("_glibtop_get_%s_c (glibtop_server *server, void *closure%s)\n", | ||||
| 			     $feature, $param_decl); | ||||
|     } elsif ($line_fields[3] eq 'array') { | ||||
|       $func_decl .= sprintf ("_glibtop_get_%s_c (glibtop_server *server, void *closure, glibtop_array *array%s)\n", | ||||
| 			     $feature, $param_decl); | ||||
|     } elsif ($line_fields[3] =~ /^array/) { | ||||
|       $func_decl .= sprintf ("_glibtop_get_%s_c (glibtop_server *server, void *closure, glibtop_array *array, %s *buf%s)\n", | ||||
| 			     $feature, 'glibtop_'.$feature, $param_decl); | ||||
|     } else { | ||||
|       $func_decl .= sprintf ("_glibtop_get_%s_c (glibtop_server *server, void *closure, %s *buf%s)\n", | ||||
| 			     $feature, 'glibtop_'.$feature, $param_decl); | ||||
|     } | ||||
|  | ||||
|     $total_code = sprintf ("%s{\n%s\n%s\n%s\n%s}\n", $func_decl, | ||||
| 			   $local_var_code, $local_var_init_code, | ||||
| 			   $total_code); | ||||
|  | ||||
|  | ||||
|     $total_code = sprintf ("#if GLIBTOP_SUID_%s\n\n%s\n#endif /* GLIBTOP_SUID_%s */\n\n", | ||||
| 			   &toupper($feature), $total_code, | ||||
| 			   &toupper($feature)); | ||||
|  | ||||
|     print $total_code; | ||||
| } | ||||
|  | ||||
| $call_vector_code = ''; | ||||
| for ($nr = 1; $nr <= $feature_count; $nr++) { | ||||
|   $feature = $features{$nr}; | ||||
|  | ||||
|   $orig = $feature; | ||||
|   $feature =~ s/^@//; | ||||
|  | ||||
|   if ($orig =~ /^@/) { | ||||
|     $call_vector_code .= sprintf (qq[\tNULL,\n]); | ||||
|   } else { | ||||
|     $call_vector_code .= sprintf | ||||
|       (qq[\#if GLIBTOP_SUID_%s\n\t_glibtop_get_%s_c,\n\#else\n\tNULL,\n\#endif\n], | ||||
|        &toupper($feature), $feature); | ||||
|   } | ||||
| } | ||||
|  | ||||
| print 'glibtop_call_vector glibtop_backend_server_call_vector = {'; | ||||
| print $call_vector_code; | ||||
| print '};'; | ||||
| print ''; | ||||
|  | ||||
| @@ -1,46 +0,0 @@ | ||||
| /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */ | ||||
|  | ||||
| /* $Id$ */ | ||||
|  | ||||
| /* Copyright (C) 1998-99 Martin Baulig | ||||
|    This file is part of LibGTop 1.0. | ||||
|  | ||||
|    Contributed by Martin Baulig <martin@home-of-linux.org>, April 1998. | ||||
|  | ||||
|    LibGTop is free software; you can redistribute it and/or modify it | ||||
|    under the terms of the GNU General Public License as published by | ||||
|    the Free Software Foundation; either version 2 of the License, | ||||
|    or (at your option) any later version. | ||||
|  | ||||
|    LibGTop is distributed in the hope that it will be useful, but WITHOUT | ||||
|    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||||
|    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License | ||||
|    for more details. | ||||
|  | ||||
|    You should have received a copy of the GNU General Public License | ||||
|    along with LibGTop; see the file COPYING. If not, write to the | ||||
|    Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||||
|    Boston, MA 02111-1307, USA. | ||||
| */ | ||||
|  | ||||
| #include <backend-server.h> | ||||
|  | ||||
| void | ||||
| glibtop_read_i (backend_server_private *priv, size_t size, void *buf) | ||||
| { | ||||
|     int ret = 0; | ||||
|  | ||||
| #ifdef DEBUG | ||||
|     fprintf (stderr, "LIBRARY: really reading %d bytes from %d.\n", | ||||
| 	     size, priv->input [0]); | ||||
| #endif | ||||
|  | ||||
|     ret = read (priv->input [0], buf, size); | ||||
|  | ||||
| #ifdef DEBUG | ||||
|     fprintf (stderr, "LIBRARY: read %d bytes.\n", ret); | ||||
| #endif | ||||
|  | ||||
|     if (ret < 0) | ||||
| 	glibtop_error_io_r (priv->server, "read %d bytes", size); | ||||
| } | ||||
| @@ -1,58 +0,0 @@ | ||||
| /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */ | ||||
|  | ||||
| /* $Id$ */ | ||||
|  | ||||
| /* Copyright (C) 1998-99 Martin Baulig | ||||
|    This file is part of LibGTop 1.0. | ||||
|  | ||||
|    Contributed by Martin Baulig <martin@home-of-linux.org>, April 1998. | ||||
|  | ||||
|    LibGTop is free software; you can redistribute it and/or modify it | ||||
|    under the terms of the GNU General Public License as published by | ||||
|    the Free Software Foundation; either version 2 of the License, | ||||
|    or (at your option) any later version. | ||||
|  | ||||
|    LibGTop is distributed in the hope that it will be useful, but WITHOUT | ||||
|    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||||
|    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License | ||||
|    for more details. | ||||
|  | ||||
|    You should have received a copy of the GNU General Public License | ||||
|    along with LibGTop; see the file COPYING. If not, write to the | ||||
|    Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||||
|    Boston, MA 02111-1307, USA. | ||||
| */ | ||||
|  | ||||
| #include <backend-server.h> | ||||
|  | ||||
| void * | ||||
| glibtop_read_data_i (backend_server_private *priv) | ||||
| { | ||||
|     size_t size; | ||||
|     void *ptr; | ||||
|     int ret; | ||||
|  | ||||
| #ifdef DEBUG | ||||
|     fprintf (stderr, "LIBRARY: reading %d data bytes.\n", sizeof (size_t)); | ||||
| #endif | ||||
|  | ||||
|     ret = read (priv->input [0], (void *)&size, sizeof (size_t)); | ||||
|  | ||||
|     if (ret < 0) | ||||
| 	glibtop_error_io_r (priv->server, "read data size"); | ||||
|  | ||||
| #ifdef DEBUG | ||||
|     fprintf (stderr, "LIBRARY: really reading %d data bytes (ret = %d).\n", size, ret); | ||||
| #endif | ||||
|  | ||||
|     if (!size) return NULL; | ||||
|  | ||||
|     ptr = g_malloc (size); | ||||
|  | ||||
|     ret = read (priv->input [0], ptr, size); | ||||
|  | ||||
|     if (ret < 0) | ||||
| 	glibtop_error_io_r (priv->server, "read data %d bytes"); | ||||
|  | ||||
|     return ptr; | ||||
| } | ||||
| @@ -1,189 +0,0 @@ | ||||
| /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */ | ||||
|  | ||||
| /* $Id$ */ | ||||
|  | ||||
| /* Copyright (C) 1998-99 Martin Baulig | ||||
|    This file is part of LibGTop 1.0. | ||||
|  | ||||
|    Contributed by Martin Baulig <martin@home-of-linux.org>, April 1998. | ||||
|  | ||||
|    LibGTop is free software; you can redistribute it and/or modify it | ||||
|    under the terms of the GNU General Public License as published by | ||||
|    the Free Software Foundation; either version 2 of the License, | ||||
|    or (at your option) any later version. | ||||
|  | ||||
|    LibGTop is distributed in the hope that it will be useful, but WITHOUT | ||||
|    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||||
|    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License | ||||
|    for more details. | ||||
|  | ||||
|    You should have received a copy of the GNU General Public License | ||||
|    along with LibGTop; see the file COPYING. If not, write to the | ||||
|    Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||||
|    Boston, MA 02111-1307, USA. | ||||
| */ | ||||
|  | ||||
| #include "server.h" | ||||
|  | ||||
| static glibtop _glibtop_global_server; | ||||
| glibtop *glibtop_global_server = &_glibtop_global_server; | ||||
|  | ||||
| #include <glibtop.h> | ||||
| #include <glibtop/union.h> | ||||
| #include <glibtop/sysdeps.h> | ||||
|  | ||||
| #include <sys/utsname.h> | ||||
|  | ||||
| const unsigned long glibtop_server_features = | ||||
| GLIBTOP_SUID_CPU + | ||||
| GLIBTOP_SUID_MEM + | ||||
| GLIBTOP_SUID_SWAP + | ||||
| GLIBTOP_SUID_UPTIME + | ||||
| GLIBTOP_SUID_LOADAVG + | ||||
| GLIBTOP_SUID_SHM_LIMITS + | ||||
| GLIBTOP_SUID_MSG_LIMITS + | ||||
| GLIBTOP_SUID_SEM_LIMITS + | ||||
| GLIBTOP_SUID_PROCLIST + | ||||
| GLIBTOP_SUID_PROC_STATE + | ||||
| GLIBTOP_SUID_PROC_UID + | ||||
| GLIBTOP_SUID_PROC_MEM + | ||||
| GLIBTOP_SUID_PROC_TIME + | ||||
| GLIBTOP_SUID_PROC_SIGNAL + | ||||
| GLIBTOP_SUID_PROC_KERNEL + | ||||
| GLIBTOP_SUID_PROC_SEGMENT + | ||||
| GLIBTOP_SUID_PROC_ARGS + | ||||
| GLIBTOP_SUID_PROC_MAP + | ||||
| GLIBTOP_SUID_NETINFO + | ||||
| GLIBTOP_SUID_NETLOAD + | ||||
| GLIBTOP_SUID_INTERFACE_NAMES + | ||||
| GLIBTOP_SUID_PPP; | ||||
|  | ||||
| #include <fcntl.h> | ||||
| #include <locale.h> | ||||
|  | ||||
| int | ||||
| main(int argc, char *argv[]) | ||||
| { | ||||
|     struct utsname uts; | ||||
|     int uid, euid, gid, egid; | ||||
|     glibtop *server; | ||||
|  | ||||
|     /* !!! WE ARE ROOT HERE - CHANGE WITH CAUTION !!! */ | ||||
|  | ||||
|     uid = getuid (); euid = geteuid (); | ||||
|     gid = getgid (); egid = getegid (); | ||||
|  | ||||
|     if (uname (&uts) < 0) _exit (1); | ||||
|  | ||||
|     if (strcmp (uts.sysname, LIBGTOP_COMPILE_SYSTEM) || | ||||
| 	strcmp (uts.release, LIBGTOP_COMPILE_RELEASE) || | ||||
| 	strcmp (uts.machine, LIBGTOP_COMPILE_MACHINE)) { | ||||
| 	fprintf (stderr, "Can only run on %s %s %s\n", | ||||
| 		 LIBGTOP_COMPILE_SYSTEM, | ||||
| 		 LIBGTOP_COMPILE_RELEASE, | ||||
| 		 LIBGTOP_COMPILE_MACHINE); | ||||
| 	_exit (1); | ||||
|     } | ||||
|  | ||||
|     server = glibtop_global_server; | ||||
|  | ||||
|     if (!server->_priv) | ||||
| 	server->_priv = g_malloc (sizeof (glibtop_server_private)); | ||||
|  | ||||
|     glibtop_init_p (server, 0, 0); | ||||
|  | ||||
|     if (setreuid (euid, uid)) _exit (1); | ||||
|  | ||||
|     if (setregid (egid, gid)) _exit (1); | ||||
|  | ||||
|     /* !!! END OF SUID ROOT PART !!! */ | ||||
|  | ||||
|     handle_slave_connection (0, 0); | ||||
|  | ||||
|     _exit (0); | ||||
| } | ||||
|  | ||||
| void | ||||
| handle_slave_connection (int input, int output) | ||||
| { | ||||
|     glibtop_command _cmnd, *cmnd = &_cmnd; | ||||
|     glibtop *server = glibtop_global_server; | ||||
|  | ||||
|     /* glibtop_send_version_i (glibtop_global_server, output); */ | ||||
|  | ||||
|     while (do_read (input, cmnd, sizeof (glibtop_command))) { | ||||
| 	size_t recv_size = 0, send_size = 0, recv_data_size = 0; | ||||
| 	void *recv_ptr = NULL, *recv_data_ptr = NULL, *data_ptr = NULL; | ||||
| 	char parameter [BUFSIZ]; | ||||
| 	int retval, func_retval; | ||||
| 	glibtop_response resp; | ||||
|  | ||||
| #ifdef DEBUG | ||||
| 	fprintf (stderr, "Slave %d received command " | ||||
| 		 "%ld from client.\n", getpid (), (long) cmnd->command); | ||||
| #endif | ||||
|  | ||||
| 	if (cmnd->send_size >= BUFSIZ) | ||||
| 	    glibtop_error ("Client sent %d bytes, but buffer is %d", | ||||
| 			   cmnd->send_size, BUFSIZ); | ||||
| 	else if (cmnd->param_size >= BUFSIZ) | ||||
| 	    glibtop_error ("Client sent %d bytes, but buffer is %d", | ||||
| 			   cmnd->param_size, BUFSIZ); | ||||
|  | ||||
| 	memset (parameter, 0, sizeof (parameter)); | ||||
|  | ||||
| 	if (cmnd->send_size) { | ||||
| #ifdef DEBUG | ||||
| 	    fprintf (stderr, "Client has %d bytes of data.\n", | ||||
| 		     cmnd->send_size); | ||||
| #endif | ||||
|  | ||||
| 	    send_size = cmnd->send_size; | ||||
| 	    do_read (input, parameter, send_size); | ||||
| 	} else if (cmnd->param_size) { | ||||
| #ifdef DEBUG | ||||
| 	    fprintf (stderr, "Client has %d bytes of parameter data.\n", | ||||
| 		     cmnd->param_size); | ||||
| #endif | ||||
| 	    send_size = cmnd->param_size; | ||||
| 	    memcpy (parameter, cmnd->parameter, send_size); | ||||
| 	} | ||||
|  | ||||
| 	if (cmnd->data_size) { | ||||
| #ifdef DEBUG | ||||
| 	    fprintf (stderr, "CLIENT has %d bytes of extra data for us.\n", | ||||
| 		     cmnd->data_size); | ||||
| #endif | ||||
|  | ||||
| 	    data_ptr = g_malloc (cmnd->data_size); | ||||
| 	    do_read (input, data_ptr, cmnd->data_size); | ||||
| 	} | ||||
|  | ||||
| 	retval = glibtop_demarshal_func_i (server, NULL, | ||||
| 					   cmnd->command, | ||||
| 					   parameter, send_size, | ||||
| 					   data_ptr, cmnd->data_size, | ||||
| 					   &recv_ptr, &recv_size, | ||||
| 					   &recv_data_ptr, &recv_data_size, | ||||
| 					   &func_retval); | ||||
|  | ||||
| #ifdef DEBUG | ||||
| 	fprintf (stderr, "Retval %d / %d - %p - %d\n", | ||||
| 		 retval, func_retval, recv_ptr, recv_size); | ||||
|  | ||||
| 	if (recv_data_size) { | ||||
| 	    fprintf (stderr, "Returning %d bytes of data from %p.\n", | ||||
| 		     recv_data_size, recv_data_ptr); | ||||
| 	} | ||||
| #endif | ||||
|  | ||||
| 	memset (&resp, 0, sizeof (glibtop_response)); | ||||
|  | ||||
| 	resp.retval = retval; | ||||
| 	resp.glibtop_errno = func_retval; | ||||
| 	resp.recv_size = recv_size; | ||||
| 	resp.data_size = recv_data_size; | ||||
|  | ||||
| 	do_output (output, &resp, recv_ptr, recv_data_ptr); | ||||
|     } | ||||
| } | ||||
| @@ -1,83 +0,0 @@ | ||||
| /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */ | ||||
|  | ||||
| /* $Id$ */ | ||||
|  | ||||
| /* Copyright (C) 1998-99 Martin Baulig | ||||
|    This file is part of LibGTop 1.0. | ||||
|  | ||||
|    Contributed by Martin Baulig <martin@home-of-linux.org>, April 1998. | ||||
|  | ||||
|    LibGTop is free software; you can redistribute it and/or modify it | ||||
|    under the terms of the GNU General Public License as published by | ||||
|    the Free Software Foundation; either version 2 of the License, | ||||
|    or (at your option) any later version. | ||||
|  | ||||
|    LibGTop is distributed in the hope that it will be useful, but WITHOUT | ||||
|    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||||
|    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License | ||||
|    for more details. | ||||
|  | ||||
|    You should have received a copy of the GNU General Public License | ||||
|    along with LibGTop; see the file COPYING. If not, write to the | ||||
|    Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||||
|    Boston, MA 02111-1307, USA. | ||||
| */ | ||||
|  | ||||
| #ifndef __GLIBTOP_DAEMON_H__ | ||||
| #define __GLIBTOP_DAEMON_H__ | ||||
|  | ||||
| #include <glibtop.h> | ||||
|  | ||||
| #include <glibtop/open.h> | ||||
| #include <glibtop/union.h> | ||||
| #include <glibtop/parameter.h> | ||||
|  | ||||
| #include <fcntl.h> | ||||
| #include <sys/wait.h> | ||||
| #include <sys/socket.h> | ||||
| #include <syslog.h> | ||||
|  | ||||
| #include <glibtop/backend.h> | ||||
| #include <glibtop-backend-private.h> | ||||
|  | ||||
| #include "command.h" | ||||
|  | ||||
| G_BEGIN_DECLS | ||||
|  | ||||
| /* Some don't have LOG_PERROR */ | ||||
| #ifndef LOG_PERROR | ||||
| #define LOG_PERROR 0 | ||||
| #endif | ||||
|  | ||||
| #define LIBGTOP_VERSION_STRING "Libgtop %s server version %s (%u,%u,%u,%u)." | ||||
|  | ||||
| #if defined(HAVE_GETDTABLESIZE) | ||||
| #define GET_MAX_FDS() getdtablesize() | ||||
| #else | ||||
| /* Fallthrough case - please add other #elif cases above | ||||
|    for different OS's as necessary */ | ||||
| #define GET_MAX_FDS() 256 | ||||
| #endif | ||||
|  | ||||
| void | ||||
| do_output (int s, glibtop_response *resp, const void *recv_ptr, | ||||
| 	   const void *data_ptr); | ||||
|  | ||||
| int | ||||
| do_read (int s, void *ptr, size_t total_size); | ||||
|  | ||||
| void | ||||
| handle_slave_connection (int input, int output); | ||||
|  | ||||
| int | ||||
| glibtop_demarshal_func_i (glibtop *server, glibtop_backend *backend, unsigned command, const void *send_ptr, size_t send_size, void *data_ptr, size_t data_size, void **recv_buf_ptr, size_t *recv_size_ptr, void **recv_data_ptr, size_t *recv_data_size_ptr, int *retval_ptr); | ||||
|  | ||||
| void | ||||
| glibtop_send_version_i (glibtop *server, int fd); | ||||
|  | ||||
| extern int enable_debug; | ||||
| extern int verbose_output; | ||||
|  | ||||
| G_END_DECLS | ||||
|  | ||||
| #endif | ||||
| @@ -1,62 +0,0 @@ | ||||
| /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */ | ||||
|  | ||||
| /* $Id$ */ | ||||
|  | ||||
| /* Copyright (C) 1998-99 Martin Baulig | ||||
|    This file is part of LibGTop 1.0. | ||||
|  | ||||
|    Contributed by Martin Baulig <martin@home-of-linux.org>, April 1998. | ||||
|  | ||||
|    LibGTop is free software; you can redistribute it and/or modify it | ||||
|    under the terms of the GNU General Public License as published by | ||||
|    the Free Software Foundation; either version 2 of the License, | ||||
|    or (at your option) any later version. | ||||
|  | ||||
|    LibGTop is distributed in the hope that it will be useful, but WITHOUT | ||||
|    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||||
|    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License | ||||
|    for more details. | ||||
|  | ||||
|    You should have received a copy of the GNU General Public License | ||||
|    along with LibGTop; see the file COPYING. If not, write to the | ||||
|    Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||||
|    Boston, MA 02111-1307, USA. | ||||
| */ | ||||
|  | ||||
| #include "server.h" | ||||
|  | ||||
| void | ||||
| glibtop_send_version_i (glibtop *server, int fd) | ||||
| { | ||||
|     char buffer [BUFSIZ]; | ||||
|     size_t size; | ||||
|  | ||||
|     sprintf (buffer, LIBGTOP_VERSION_STRING, | ||||
| 	     LIBGTOP_VERSION, LIBGTOP_SERVER_VERSION, | ||||
| 	     sizeof (glibtop_command), | ||||
| 	     sizeof (glibtop_response), | ||||
| 	     sizeof (glibtop_union), | ||||
| 	     sizeof (glibtop_sysdeps)); | ||||
|  | ||||
|     size = strlen (buffer) + 1; | ||||
|  | ||||
| #ifdef DEBUG | ||||
|     fprintf (stderr, "SERVER ID: |%s|\n", buffer); | ||||
| #endif | ||||
|  | ||||
|     if (fd == 0) { | ||||
| 	if (write (1, (const void *) &size, sizeof (size)) < 0) | ||||
| 	    glibtop_warn_io_r (server, "write"); | ||||
|     } else { | ||||
| 	if (send (fd, (const void *) &size, sizeof (size), 0) < 0) | ||||
| 	    glibtop_warn_io_r (server, "send"); | ||||
|     } | ||||
|  | ||||
|     if (fd == 0) { | ||||
| 	if (write (1, (const void *) buffer, size) < 0) | ||||
| 	    glibtop_warn_io_r (server, "write"); | ||||
|     } else { | ||||
| 	if (send (fd, (const void *) buffer, size, 0) < 0) | ||||
| 	    glibtop_warn_io_r (server, "send"); | ||||
|     } | ||||
| } | ||||
| @@ -1,43 +0,0 @@ | ||||
| /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */ | ||||
|  | ||||
| /* $Id$ */ | ||||
|  | ||||
| /* Copyright (C) 1998-99 Martin Baulig | ||||
|    This file is part of LibGTop 1.0. | ||||
|  | ||||
|    Contributed by Martin Baulig <martin@home-of-linux.org>, April 1998. | ||||
|  | ||||
|    LibGTop is free software; you can redistribute it and/or modify it | ||||
|    under the terms of the GNU General Public License as published by | ||||
|    the Free Software Foundation; either version 2 of the License, | ||||
|    or (at your option) any later version. | ||||
|  | ||||
|    LibGTop is distributed in the hope that it will be useful, but WITHOUT | ||||
|    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||||
|    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License | ||||
|    for more details. | ||||
|  | ||||
|    You should have received a copy of the GNU General Public License | ||||
|    along with LibGTop; see the file COPYING. If not, write to the | ||||
|    Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||||
|    Boston, MA 02111-1307, USA. | ||||
| */ | ||||
|  | ||||
| #include <backend-server.h> | ||||
|  | ||||
| void | ||||
| glibtop_write_i (backend_server_private *priv, size_t size, const void *buf) | ||||
| { | ||||
|     int ret; | ||||
|  | ||||
|     if (size == 0) return; | ||||
|  | ||||
| #ifdef DEBUG | ||||
|     fprintf (stderr, "LIBRARY: really writing %d bytes.\n", size); | ||||
| #endif | ||||
|  | ||||
|     ret = write (priv->output [1], buf, size); | ||||
|  | ||||
|     if (ret < 0) | ||||
| 	glibtop_error_io_r (priv->server, "write %d bytes", size); | ||||
| } | ||||
| @@ -1,7 +0,0 @@ | ||||
| .deps | ||||
| .libs | ||||
| Makefile | ||||
| Makefile.in | ||||
| *.lo | ||||
| *.la | ||||
| marshal.c | ||||
| @@ -1,68 +0,0 @@ | ||||
| 2003-10-20  Bastien Nocera  <hadess@hadess.net> | ||||
|  | ||||
| 	* backend-sysdeps.c: (_open_sysdeps): s/u_int64_t/guint64/ | ||||
|  | ||||
| 2003-10-20  Bastien Nocera  <hadess@hadess.net> | ||||
|  | ||||
| 	* backend-sysdeps.h: fixed compilation | ||||
|  | ||||
| 2000-11-26  Martin Baulig  <martin@home-of-linux.org> | ||||
|  | ||||
| 	* glibtop-backend-private.h: Removed. | ||||
|  | ||||
| 	* backend-sysdeps.h: New files. | ||||
|  | ||||
| 	* backend-sysdeps.c (_open_sysdeps): Don't overwrite | ||||
| 	`backend->_priv'. | ||||
|  | ||||
| 2000-11-22  Martin Baulig  <martin@home-of-linux.org> | ||||
|  | ||||
| 	* Makefile.am: Link libgtop_backend_sysdeps.la against | ||||
| 	$(top_builddir)/sysdeps/$(sysdeps_dir)/libgtop_sysdeps.la and | ||||
| 	$(top_builddir)/lib/libgtop_server.la. | ||||
|  | ||||
| 	* libgtop-sysdeps.backend: Removed the ExtraLibs section. | ||||
|  | ||||
| 2000-02-22  Martin Baulig  <martin@home-of-linux.org> | ||||
|  | ||||
| 	* backend-sysdeps.c (LibGTopBackendInfo): Call this | ||||
| 	`LibGTopBackendInfo_Sysdeps' when we don't use gmodule. | ||||
|  | ||||
| 2000-02-22  Martin Baulig  <martin@home-of-linux.org> | ||||
|  | ||||
| 	* Makefile.am: Only install the libs in $(LIBGTOP_BACKEND_DIR) | ||||
| 	when we LIBGTOP_USE_GMODULE and in $(libdir) otherwise. | ||||
|  | ||||
| 2000-01-22  Martin Baulig  <martin@home-of-linux.org> | ||||
|  | ||||
| 	* libgtop-sysdeps.backend: Added "ExtraLibs" section to | ||||
| 	load `-lgtop_sysdeps'. | ||||
|  | ||||
| 2000-01-12  Martin Baulig  <martin@home-of-linux.org> | ||||
|  | ||||
| 	* Makefile.am: Install everything in $(LIBGTOP_BACKEND_DIR). | ||||
|  | ||||
| 	* libgtop-sysdeps.backend: New file. | ||||
|  | ||||
| 	* backend-sysdeps.c (glibtop_backend_sysdeps): Renamed to | ||||
| 	`LibGTopBackendInfo'. | ||||
|  | ||||
| 2000-01-12  Martin Baulig  <martin@home-of-linux.org> | ||||
|  | ||||
| 	* marshal.pl: Create the `_glibtop_init_hook_s' as well. | ||||
|  | ||||
| 	* marshal.pl: Don't create code for things which are now | ||||
| 	in the new `glibtop-backend-common' backend. | ||||
|  | ||||
| 2000-01-02  Martin Baulig  <martin@home-of-linux.org> | ||||
|  | ||||
| 	* marshal.pl: New file. Automatically creates `marshal.c'. | ||||
| 	* call-vector.c: Removed. | ||||
|  | ||||
| 2000-01-01  Martin Baulig  <martin@home-of-linux.org> | ||||
|  | ||||
| 	Initial version of the "glibtop-backend-sysdeps" backend. | ||||
|  | ||||
| 	* backend-sysdeps.c: New file. | ||||
| 	* glibtop-backend-private.h: New file. | ||||
|  | ||||
| @@ -1,47 +0,0 @@ | ||||
| LINK		= $(LIBTOOL) --mode=link $(CC) $(CFLAGS) $(LDFLAGS) -o $@ | ||||
|  | ||||
| INCLUDES	= @INCLUDES@ | ||||
|  | ||||
| backenddir	= @LIBGTOP_BACKEND_DIR@ | ||||
|  | ||||
| if LIBGTOP_USE_GMODULE | ||||
| backendlibdir	= $(backenddir) | ||||
| else | ||||
| backendlibdir	= $(libdir) | ||||
| endif | ||||
|  | ||||
| dynamic_ldflags	= @libgtop_dynamic_ldflags@ | ||||
|  | ||||
| backend_DATA = \ | ||||
| 	libgtop-sysdeps.backend | ||||
|  | ||||
| noinst_HEADERS = \ | ||||
| 	backend-sysdeps.h | ||||
|  | ||||
| backendlib_LTLIBRARIES = \ | ||||
| 	libgtop_backend_sysdeps.la | ||||
|  | ||||
| libgtop_backend_sysdeps_la_SOURCES = \ | ||||
| 	backend-sysdeps.c		\ | ||||
| 	marshal.c | ||||
|  | ||||
| libgtop_backend_sysdeps_la_LDFLAGS = \ | ||||
| 	$(LT_VERSION_INFO) $(dynamic_ldflags) | ||||
|  | ||||
| libgtop_backend_sysdeps_la_LIBADD = \ | ||||
| 	$(top_builddir)/sysdeps/$(sysdeps_dir)/libgtop_sysdeps.la | ||||
| 	$(top_builddir)/lib/libgtop_server.la | ||||
|  | ||||
| BUILT_SOURCES = \ | ||||
| 	marshal.c | ||||
|  | ||||
| EXTRA_DIST = \ | ||||
| 	marshal.pl	\ | ||||
| 	libgtop-sysdeps.backend | ||||
|  | ||||
| CLEANFILES = $(BUILT_SOURCES) | ||||
|  | ||||
| marshal.c: marshal.pl $(top_builddir)/config.h $(top_srcdir)/features.def $(top_srcdir)/scripts/c_types.pl | ||||
| 	$(PERL) -I $(top_srcdir)/scripts $(srcdir)/marshal.pl < $(top_srcdir)/features.def > tmp-t | ||||
| 	mv tmp-t marshal.c | ||||
|  | ||||
| @@ -1,76 +0,0 @@ | ||||
| /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */ | ||||
|  | ||||
| /* $Id$ */ | ||||
|  | ||||
| /* Copyright (C) 1998-99 Martin Baulig | ||||
|    This file is part of LibGTop 1.0. | ||||
|  | ||||
|    Contributed by Martin Baulig <martin@home-of-linux.org>, April 1998. | ||||
|  | ||||
|    LibGTop is free software; you can redistribute it and/or modify it | ||||
|    under the terms of the GNU General Public License as published by | ||||
|    the Free Software Foundation; either version 2 of the License, | ||||
|    or (at your option) any later version. | ||||
|  | ||||
|    LibGTop is distributed in the hope that it will be useful, but WITHOUT | ||||
|    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||||
|    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License | ||||
|    for more details. | ||||
|  | ||||
|    You should have received a copy of the GNU General Public License | ||||
|    along with LibGTop; see the file COPYING. If not, write to the | ||||
|    Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||||
|    Boston, MA 02111-1307, USA. | ||||
| */ | ||||
|  | ||||
| #include <backend-sysdeps.h> | ||||
|  | ||||
| static int | ||||
| _open_sysdeps (glibtop_server *, glibtop_backend *, guint64, const char **); | ||||
|  | ||||
| static int | ||||
| _close_sysdeps (glibtop_server *, glibtop_backend *, void *); | ||||
|  | ||||
| extern glibtop_call_vector glibtop_backend_sysdeps_call_vector; | ||||
|  | ||||
| #ifdef LIBGTOP_USE_GMODULE | ||||
| glibtop_backend_info LibGTopBackendInfo = { | ||||
|     "glibtop-backend-sysdeps", _open_sysdeps, _close_sysdeps, | ||||
|     &glibtop_backend_sysdeps_call_vector | ||||
| }; | ||||
| #else | ||||
| glibtop_backend_info LibGTopBackendInfo_Sysdeps = { | ||||
|     "glibtop-backend-sysdeps", _open_sysdeps, _close_sysdeps, | ||||
|     &glibtop_backend_sysdeps_call_vector | ||||
| }; | ||||
| #endif | ||||
|  | ||||
| static int | ||||
| _open_sysdeps (glibtop_server *server, glibtop_backend *backend, | ||||
| 	       guint64 features, const char **backend_args) | ||||
| { | ||||
|     glibtop_init_func_t *init_fkt; | ||||
|  | ||||
|     /* Do the initialization, but only if not already initialized. */ | ||||
|  | ||||
|     if ((server->flags & _GLIBTOP_INIT_STATE_SYSDEPS) == 0) { | ||||
| 	glibtop_open_s (server, "glibtop", features, 0); | ||||
|  | ||||
| 	for (init_fkt = _glibtop_init_hook_s; *init_fkt; init_fkt++) | ||||
| 	    (*init_fkt) (server); | ||||
|  | ||||
| 	server->info->sysdeps.pointer_size = sizeof (void*)*8; | ||||
|  | ||||
| 	server->flags |= _GLIBTOP_INIT_STATE_SYSDEPS; | ||||
|     } | ||||
|  | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| static int | ||||
| _close_sysdeps (glibtop_server *server, glibtop_backend *backend, | ||||
| 		void *closure) | ||||
| { | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| @@ -1,36 +0,0 @@ | ||||
| /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */ | ||||
|  | ||||
| /* $Id$ */ | ||||
|  | ||||
| /* Copyright (C) 1998-99 Martin Baulig | ||||
|    This file is part of LibGTop 1.0. | ||||
|  | ||||
|    Contributed by Martin Baulig <martin@home-of-linux.org>, April 1998. | ||||
|  | ||||
|    LibGTop is free software; you can redistribute it and/or modify it | ||||
|    under the terms of the GNU General Public License as published by | ||||
|    the Free Software Foundation; either version 2 of the License, | ||||
|    or (at your option) any later version. | ||||
|  | ||||
|    LibGTop is distributed in the hope that it will be useful, but WITHOUT | ||||
|    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||||
|    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License | ||||
|    for more details. | ||||
|  | ||||
|    You should have received a copy of the GNU General Public License | ||||
|    along with LibGTop; see the file COPYING. If not, write to the | ||||
|    Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||||
|    Boston, MA 02111-1307, USA. | ||||
| */ | ||||
|  | ||||
| #ifndef __GLIBTOP_BACKEND_SYSDEPS_H__ | ||||
| #define __GLIBTOP_BACKEND_SYSDEPS_H__ | ||||
|  | ||||
| #include <glibtop.h> | ||||
| #include <glibtop/global.h> | ||||
|  | ||||
| #include <glibtop/open.h> | ||||
| #include <glibtop/glibtop-backend.h> | ||||
| #include <glibtop/glibtop-backend-info.h> | ||||
|  | ||||
| #endif | ||||
| @@ -1,13 +0,0 @@ | ||||
| <?xml version="1.0"?> <!-- -*-xml-*- --> | ||||
| <!DOCTYPE libgtop:backends SYSTEM 'libgtop-backends.dtd'> | ||||
| <libgtop:Backends xmlns:libgtop="http://www.home-of-linux.org/libgtop/1.1"> | ||||
|  | ||||
|   <libgtop:Backend> | ||||
|     <libgtop:Name>glibtop-backend-sysdeps</libgtop:Name> | ||||
|     <libgtop:Location> | ||||
|       <libgtop:LibtoolName>libgtop_backend_sysdeps.la</libgtop:LibtoolName> | ||||
|       <libgtop:ShlibName>libgtop_backend_sysdeps.so</libgtop:ShlibName> | ||||
|     </libgtop:Location> | ||||
|   </libgtop:Backend> | ||||
|  | ||||
| </libgtop:Backends> | ||||
| @@ -1,195 +0,0 @@ | ||||
| #!/usr/bin/perl | ||||
|  | ||||
| require 'c_types.pl'; | ||||
|  | ||||
| $[ = 1;			# set array base to 1 | ||||
| $, = ' ';		# set output field separator | ||||
| $\ = "\n";		# set output record separator | ||||
|  | ||||
| $always_use_temp_storage = 1; | ||||
|  | ||||
| sub toupper { | ||||
|     local($_) = @_; | ||||
|     tr/a-z/A-Z/; | ||||
|     return $_; | ||||
| } | ||||
|  | ||||
| sub tolower { | ||||
|     local($_) = @_; | ||||
|     tr/A-Z/a-z/; | ||||
|     return $_; | ||||
| } | ||||
|  | ||||
| print '/* marshal.c */'; | ||||
| print "/* This is a generated file.  Please modify `marshal.pl' */"; | ||||
| print ''; | ||||
|  | ||||
| print '#include <backend-sysdeps.h>'; | ||||
| print ''; | ||||
| print '#include <glibtop/sysdeps.h>'; | ||||
| print '#include <glibtop/union.h>'; | ||||
| print ''; | ||||
| print '#include <glibtop/call-vector.h>'; | ||||
| print ''; | ||||
|  | ||||
| $feature_count = 0; | ||||
|  | ||||
| while (<>) { | ||||
|     chop;	# strip record separator | ||||
|  | ||||
|     if (/^[^#]/) { | ||||
| 	&output($_); | ||||
|     } | ||||
| } | ||||
|  | ||||
| sub output { | ||||
|     local($line) = @_; | ||||
|     @line_fields = split(/\|/, $line, 9999); | ||||
|     $retval = $line_fields[1]; | ||||
|     $feature = $line_fields[2]; | ||||
|     $param_def = $line_fields[4]; | ||||
|  | ||||
|     $orig = $feature; | ||||
|     $feature =~ s/^@//; | ||||
|     $space = $feature; | ||||
|     $space =~ s/./ /g; | ||||
|  | ||||
|     $features{++$feature_count} = $orig; | ||||
|  | ||||
|     return if $orig =~ /^@/; | ||||
|  | ||||
|     if ($retval eq 'retval') { | ||||
|       $retval_param = '&retval'; | ||||
|       $call_prefix = ''; | ||||
|       $call_prefix_space = ''; | ||||
|       $prefix = 'retval = '; | ||||
|       $prefix_space = '         '; | ||||
|       $retval = 'int'; | ||||
|     } | ||||
|     elsif ($retval !~ /^void$/) { | ||||
|       $retval_param = 'NULL'; | ||||
|       $prefix = 'retval = '; | ||||
|       $prefix_space = '         '; | ||||
|       $call_prefix = 'retval = '; | ||||
|       $call_prefix_space = '         '; | ||||
|     } | ||||
|     else { | ||||
|       $retval_param = 'NULL'; | ||||
|       $call_prefix = ''; | ||||
|       $call_prefix_space = ''; | ||||
|       $prefix = ''; | ||||
|       $prefix_space = ''; | ||||
|     } | ||||
|  | ||||
|     if ($retval =~ /^(array|pointer)\((.*)\)$/) { | ||||
|       $retval = ($2 eq 'string') ? 'char **' : "$2 *"; | ||||
|     } | ||||
|  | ||||
|     $need_temp_storage = $always_use_temp_storage; | ||||
|     $first_param_name = ''; | ||||
|  | ||||
|     $call_param = ''; | ||||
|     $param_decl = ''; | ||||
|     $need_temp_len = 0; | ||||
|     $nr_params = (@params = split(/:/, $param_def, 9999)); | ||||
|     for ($param = 1; $param <= $nr_params; $param++) { | ||||
|       $list = $params[$param]; | ||||
|       $type = $params[$param]; | ||||
|       $type =~ s/\(.*//; | ||||
|       $list =~ s/^.*\(//; | ||||
|       $list =~ s/\)$//; | ||||
|       $count = (@fields = split(/,/, $list, 9999)); | ||||
|       for ($field = 1; $field <= $count; $field++) { | ||||
| 	my $c_type = $typeinfo->{$type}->[1]; | ||||
|  | ||||
| 	if ($first_param_name eq '') { | ||||
| 	  $first_param_name = $fields[$field]; | ||||
| 	} | ||||
|  | ||||
| 	if ($typeinfo->{$type}->[2]) { | ||||
| 	  $need_temp_storage = 1; | ||||
| 	} | ||||
|  | ||||
| 	if ($param_decl eq '') { | ||||
| 	  $param_decl = ",\n             " . $space . '    '; | ||||
| 	} | ||||
| 	else { | ||||
| 	  $param_decl = $param_decl . ', '; | ||||
| 	} | ||||
| 	$param_decl = $param_decl . $c_type . ' ' . $fields[$field]; | ||||
| 	$call_param = $call_param . ', ' . $fields[$field]; | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     if ($line_fields[3] eq '') { | ||||
|       $total_code = sprintf | ||||
| 	("\treturn glibtop_get_%s_s (server%s);\n", $feature, $call_param); | ||||
|     } elsif ($line_fields[3] eq 'array') { | ||||
|       $total_code = sprintf | ||||
| 	("\treturn glibtop_get_%s_s (server, array%s);\n", $feature, $call_param); | ||||
|     } elsif ($line_fields[3] =~ /^array/) { | ||||
|       $total_code = sprintf | ||||
| 	("\treturn glibtop_get_%s_s (server, array, buf%s);\n", $feature, $call_param); | ||||
|     } else { | ||||
|       $total_code = sprintf | ||||
| 	("\treturn glibtop_get_%s_s (server, buf%s);\n", $feature, $call_param); | ||||
|     } | ||||
|  | ||||
|     $func_decl = 'static '.$retval."\n"; | ||||
|     if ($line_fields[3] eq '') { | ||||
|       $func_decl .= sprintf ("_glibtop_get_%s_c (glibtop_server *server, void *closure%s)\n", | ||||
| 			     $feature, $param_decl); | ||||
|     } elsif ($line_fields[3] eq 'array') { | ||||
|       $func_decl .= sprintf ("_glibtop_get_%s_c (glibtop_server *server, void *closure, glibtop_array *array%s)\n", | ||||
| 			     $feature, $param_decl); | ||||
|     } elsif ($line_fields[3] =~ /^array/) { | ||||
|       $func_decl .= sprintf ("_glibtop_get_%s_c (glibtop_server *server, void *closure, glibtop_array *array, %s *buf%s)\n", | ||||
| 			     $feature, 'glibtop_'.$feature, $param_decl); | ||||
|     } else { | ||||
|       $func_decl .= sprintf ("_glibtop_get_%s_c (glibtop_server *server, void *closure, %s *buf%s)\n", | ||||
| 			     $feature, 'glibtop_'.$feature, $param_decl); | ||||
|     } | ||||
|  | ||||
|     $total_code = sprintf ("%s{\n%s\n%s}\n", $func_decl, $total_code); | ||||
|  | ||||
|     $total_code = sprintf ("#if (!GLIBTOP_SUID_%s)\n\n%s\n#endif /* not GLIBTOP_SUID_%s */\n\n", | ||||
| 			   &toupper($feature), $total_code, | ||||
| 			   &toupper($feature)); | ||||
|  | ||||
|     print $total_code; | ||||
| } | ||||
|  | ||||
| $init_hook_code = ''; | ||||
| $call_vector_code = ''; | ||||
| for ($nr = 1; $nr <= $feature_count; $nr++) { | ||||
|   $feature = $features{$nr}; | ||||
|  | ||||
|   if ($feature =~ /^@/) { | ||||
|     $call_vector_code .= sprintf (qq[\tNULL,\n]); | ||||
|   } else { | ||||
|     $call_vector_code .= sprintf | ||||
|       (qq[\#if GLIBTOP_SUID_%s\n\tNULL,\n\#else\n\t_glibtop_get_%s_c,\n\#endif\n], | ||||
|        &toupper($feature), $feature); | ||||
|   } | ||||
|  | ||||
|   if (!($feature =~ /^@/)) { | ||||
|     $init_hook_code .= sprintf | ||||
|       (qq[\#if !GLIBTOP_SUID_%s\n\tglibtop_init_%s_s,\n\#endif\n], | ||||
|        &toupper($feature), $feature); | ||||
|   } | ||||
| } | ||||
| $init_hook_code .= sprintf (qq[\tNULL\n]); | ||||
|  | ||||
| chop $init_hook_code; | ||||
| chop $call_vector_code; | ||||
|  | ||||
| print 'glibtop_call_vector glibtop_backend_sysdeps_call_vector = {'; | ||||
| print $call_vector_code; | ||||
| print '};'; | ||||
| print ''; | ||||
|  | ||||
| print 'glibtop_init_func_t _glibtop_init_hook_s [] = {'; | ||||
| print $init_hook_code; | ||||
| print '};'; | ||||
| print ''; | ||||
|  | ||||
| @@ -7,13 +7,13 @@ AM_CONFIG_HEADER(config.h) | ||||
| AC_CANONICAL_SYSTEM | ||||
|  | ||||
| LIBGTOP_MAJOR_VERSION=2 | ||||
| LIBGTOP_MINOR_VERSION=10 | ||||
| LIBGTOP_MICRO_VERSION=2 | ||||
| LIBGTOP_MINOR_VERSION=11 | ||||
| LIBGTOP_MICRO_VERSION=0 | ||||
| LIBGTOP_VERSION=$LIBGTOP_MAJOR_VERSION.$LIBGTOP_MINOR_VERSION.$LIBGTOP_MICRO_VERSION | ||||
| AM_INIT_AUTOMAKE(libgtop, $LIBGTOP_VERSION) | ||||
|  | ||||
| dnl  increment if the interface has additions, changes, removals. | ||||
| LIBGTOP_CURRENT=5 | ||||
| LIBGTOP_CURRENT=6 | ||||
|  | ||||
| dnl  increment any time the source changes; set to | ||||
| dnl  0 if you increment CURRENT | ||||
| @@ -22,7 +22,7 @@ LIBGTOP_REVISION=0 | ||||
| dnl  increment if any interfaces have been added; set to 0 | ||||
| dnl  if any interfaces have been removed. removal has | ||||
| dnl  precedence over adding, so set to 0 if both happened. | ||||
| LIBGTOP_AGE=0 | ||||
| LIBGTOP_AGE=1 | ||||
|  | ||||
| # you can set this to `-snap' for instance to create | ||||
| # a `libgtop-1.x.y-snap.tar.gz' tarball. | ||||
|   | ||||
| @@ -1,2 +0,0 @@ | ||||
| Makefile.in | ||||
| Makefile | ||||
| @@ -1,9 +0,0 @@ | ||||
| backenddir	= @LIBGTOP_BACKEND_DIR@ | ||||
|  | ||||
| backend_DATA	= \ | ||||
| 	libgtop-backends.dtd	\ | ||||
| 	libgtop-backend-info.dtd | ||||
|  | ||||
| EXTRA_DIST	= | | ||||
| 	$(backend_DATA) | ||||
|  | ||||
| @@ -1,23 +0,0 @@ | ||||
| <!ELEMENT BackendInfo (name,description?,comments?,authors,legalnotice)> | ||||
| <!ELEMENT name (short_name,long_name?)> | ||||
| <!ELEMENT short_name (#PCDATA)> | ||||
| <!ELEMENT long_name (#PCDATA)> | ||||
|  | ||||
| <!ELEMENT description (#PCDATA)> | ||||
|  | ||||
| <!ELEMENT authors (author)+> | ||||
| <!ELEMENT author (author_name,author_email?)> | ||||
| <!ELEMENT author_name (#PCDATA)> | ||||
| <!ELEMENT author_email (#PCDATA)> | ||||
|  | ||||
| <!ELEMENT legalnotice (license,copyright?)> | ||||
| <!ELEMENT license (#PCDATA)> | ||||
|  | ||||
| <!ELEMENT copyright (holder)+> | ||||
| <!ELEMENT holder (holder_year?,holder_name,holder_email?)> | ||||
| <!ELEMENT holder_year (#PCDATA)> | ||||
| <!ELEMENT holder_name (#PCDATA)> | ||||
| <!ELEMENT holder_email (#PCDATA)> | ||||
|  | ||||
| <!ELEMENT comments (comment)+> | ||||
| <!ELEMENT comment (#PCDATA)> | ||||
| @@ -1,11 +0,0 @@ | ||||
| <!ELEMENT Backends (Backend)+> | ||||
|  | ||||
| <!ELEMENT Backend (Name,Location)> | ||||
| <!ELEMENT Name (#PCDATA)> | ||||
|  | ||||
| <!ELEMENT Location (LibtoolName?,ShlibName,ExtraLibs?)> | ||||
| <!ELEMENT LibtoolName (#PCDATA)> | ||||
| <!ELEMENT ShlibName (#PCDATA)> | ||||
|  | ||||
| <!ELEMENT ExtraLibs (ExtraLib)+> | ||||
| <!ELEMENT ExtraLib (LibtoolName?,ShlibName)> | ||||
| @@ -31,8 +31,6 @@ | ||||
| #include <glibtop.h> | ||||
| #include <glibtop/cpu.h> | ||||
|  | ||||
| #include "libgtop-i18n.h" | ||||
|  | ||||
| int | ||||
| main (int argc, char *argv []) | ||||
| { | ||||
| @@ -44,10 +42,6 @@ main (int argc, char *argv []) | ||||
| 	char separator [BUFSIZ], buffer [BUFSIZ]; | ||||
| 	int ncpu, i; | ||||
|  | ||||
| 	setlocale (LC_ALL, ""); | ||||
| 	bindtextdomain (GETTEXT_PACKAGE, GTOPLOCALEDIR); | ||||
| 	textdomain (GETTEXT_PACKAGE); | ||||
|  | ||||
| 	glibtop_init(); | ||||
|  | ||||
| 	glibtop_get_cpu (&cpu); | ||||
| @@ -73,16 +67,16 @@ main (int argc, char *argv []) | ||||
| 	memset (separator, '-', 91); | ||||
| 	separator [92] = '\0'; | ||||
|  | ||||
| 	sprintf (buffer, _("Ticks (%ld per second):"), frequency); | ||||
| 	sprintf (buffer, "Ticks (%ld per second):", frequency); | ||||
|  | ||||
| 	printf ("\n\n%-26s %12s %12s %12s %12s %12s\n%s\n", buffer, | ||||
| 		_("Total"), _("User"), _("Nice"), _("Sys"), _("Idle"), separator); | ||||
| 		"Total", "User", "Nice", "Sys", "Idle", separator); | ||||
|  | ||||
| 	printf (_("CPU          (0x%08lx): %12.0f %12.0f %12.0f %12.0f %12.0f\n\n"), | ||||
| 	printf ("CPU          (0x%08lx): %12.0f %12.0f %12.0f %12.0f %12.0f\n\n", | ||||
| 		(unsigned long) cpu.flags, total, user, nice, sys, idle); | ||||
|  | ||||
| 	for (i = 0; i < glibtop_global_server->ncpu; i++) { | ||||
| 		printf (_("CPU %3d      (0x%08lx): %12lu %12lu %12lu %12lu %12lu\n"), i, | ||||
| 		printf ("CPU %3d      (0x%08lx): %12lu %12lu %12lu %12lu %12lu\n", i, | ||||
| 			(unsigned long) cpu.flags, | ||||
| 			(unsigned long) cpu.xcpu_total [i], | ||||
| 			(unsigned long) cpu.xcpu_user  [i], | ||||
| @@ -99,11 +93,11 @@ main (int argc, char *argv []) | ||||
|  | ||||
| 	printf ("%s\n\n\n", separator); | ||||
|  | ||||
| 	printf ("%-26s %12s %12s %12s %12s %12s\n%s\n", _("Percent:"), | ||||
| 		_("Total (%)"), _("User (%)"), _("Nice (%)"), _("Sys (%)"), | ||||
| 		_("Idle (%)"), separator); | ||||
| 	printf ("%-26s %12s %12s %12s %12s %12s\n%s\n", "Percent:", | ||||
| 		"Total (%)", "User (%)", "Nice (%)", "Sys (%)", | ||||
| 		"Idle (%)", separator); | ||||
|  | ||||
| 	printf (_("CPU          (0x%08lx): %12.3f %12.3f %12.3f %12.3f %12.3f\n\n"), | ||||
| 	printf ("CPU          (0x%08lx): %12.3f %12.3f %12.3f %12.3f %12.3f\n\n", | ||||
| 		(unsigned long) cpu.flags, (double) total * 100.0 / total, | ||||
| 		(double) user  * 100.0 / total, | ||||
| 		(double) nice  * 100.0 / total, | ||||
| @@ -119,13 +113,13 @@ main (int argc, char *argv []) | ||||
| 		p_sys   = ((double) cpu.xcpu_sys   [i]) * 100.0 / sys; | ||||
| 		p_idle  = ((double) cpu.xcpu_idle  [i]) * 100.0 / idle; | ||||
|  | ||||
| 		printf (_("CPU %3d      (0x%08lx): %12.3f %12.3f %12.3f %12.3f %12.3f\n"), | ||||
| 		printf ("CPU %3d      (0x%08lx): %12.3f %12.3f %12.3f %12.3f %12.3f\n", | ||||
| 			i, (unsigned long) cpu.flags, p_total, p_user, p_nice, | ||||
| 			p_sys, p_idle); | ||||
| 	} | ||||
|  | ||||
| 	printf ("%s\n%-26s %12.3f %12.3f %12.3f %12.3f %12.3f\n\n", separator, | ||||
| 		_("Spin:"), s_total * 100.0 / total, s_user * 100.0 / user, | ||||
| 		"Spin:", s_total * 100.0 / total, s_user * 100.0 / user, | ||||
| 		s_nice * 100.0 / nice, s_sys * 100.0 / sys, s_idle * 100.0 / idle); | ||||
|  | ||||
| 	exit (0); | ||||
|   | ||||
| @@ -94,9 +94,8 @@ extern glibtop *glibtop_global_server; | ||||
|  | ||||
| extern const unsigned long glibtop_server_features; | ||||
|  | ||||
| #define glibtop_init()	glibtop_init_r(&glibtop_global_server, 0, 0); | ||||
|  | ||||
| #define glibtop_close()	glibtop_close_r(glibtop_global_server); | ||||
| glibtop * | ||||
| glibtop_init (void); | ||||
|  | ||||
| glibtop * | ||||
| glibtop_init_r (glibtop **server_ptr, | ||||
|   | ||||
| @@ -1,4 +1,2 @@ | ||||
| SUBDIRS		= glibtop | ||||
|  | ||||
| EXTRA_DIST	= libgtop-i18n.h | ||||
|  | ||||
|   | ||||
| @@ -28,6 +28,8 @@ | ||||
|  | ||||
| G_BEGIN_DECLS | ||||
|  | ||||
| void glibtop_close (void); | ||||
|  | ||||
| void glibtop_close_r (glibtop *server); | ||||
|  | ||||
| void glibtop_close_s (glibtop *server); | ||||
|   | ||||
| @@ -80,7 +80,7 @@ struct _glibtop_cpu | ||||
| 		xcpu_flags;	                /* GLIBTOP_XCPU_IDLE		*/ | ||||
| }; | ||||
|  | ||||
| #define glibtop_get_cpu(cpu)	glibtop_get_cpu_l(glibtop_global_server, cpu) | ||||
| void glibtop_get_cpu(glibtop_cpu *buf); | ||||
|  | ||||
| #if GLIBTOP_SUID_CPU | ||||
| #define glibtop_get_cpu_r	glibtop_get_cpu_p | ||||
|   | ||||
| @@ -53,7 +53,7 @@ struct _glibtop_fsusage | ||||
| 	guint64 read, write;    /* Total blocks read and written */ | ||||
| }; | ||||
|  | ||||
| #define glibtop_get_fsusage(fsusage,disk)	glibtop_get_fsusage_l(glibtop_global_server, fsusage, disk) | ||||
| void glibtop_get_fsusage(glibtop_fsusage *buf, const char *mount_dir); | ||||
|  | ||||
| #define glibtop_get_fsusage_r		glibtop_get_fsusage_s | ||||
|  | ||||
|   | ||||
| @@ -47,7 +47,7 @@ struct _glibtop_loadavg | ||||
| 		last_pid;		/* GLIBTOP_LOADAVG_LAST_PID	*/ | ||||
| }; | ||||
|  | ||||
| #define glibtop_get_loadavg(loadavg)	glibtop_get_loadavg_l(glibtop_global_server, loadavg) | ||||
| void glibtop_get_loadavg(glibtop_loadavg *buf); | ||||
|  | ||||
| #if GLIBTOP_SUID_LOADAVG | ||||
| #define glibtop_get_loadavg_r		glibtop_get_loadavg_p | ||||
|   | ||||
| @@ -55,7 +55,7 @@ struct _glibtop_mem | ||||
| 		locked;		/* GLIBTOP_MEM_LOCKED	*/ | ||||
| }; | ||||
|  | ||||
| #define glibtop_get_mem(mem)	glibtop_get_mem_l(glibtop_global_server, mem) | ||||
| void glibtop_get_mem(glibtop_mem *buf); | ||||
|  | ||||
| #if GLIBTOP_SUID_MEM | ||||
| #define glibtop_get_mem_r		glibtop_get_mem_p | ||||
|   | ||||
| @@ -55,7 +55,8 @@ struct _glibtop_mountlist | ||||
| 		size;			/* GLIBTOP_MOUNTLIST_SIZE	*/ | ||||
| }; | ||||
|  | ||||
| #define glibtop_get_mountlist(mountlist,all_fs)	glibtop_get_mountlist_l(glibtop_global_server, mountlist, all_fs) | ||||
| glibtop_mountentry * | ||||
| glibtop_get_mountlist(glibtop_mountlist *buf, int all_fs); | ||||
|  | ||||
| #define glibtop_get_mountlist_r		glibtop_get_mountlist_s | ||||
|  | ||||
|   | ||||
| @@ -53,7 +53,7 @@ struct _glibtop_msg_limits | ||||
| 		msgtql;		/* GLIBTOP_IPC_MSGTQL	*/ | ||||
| }; | ||||
|  | ||||
| #define glibtop_get_msg_limits(msg)	glibtop_get_msg_limits_l(glibtop_global_server, msg) | ||||
| void glibtop_get_msg_limits(glibtop_msg_limits *buf); | ||||
|  | ||||
| #if GLIBTOP_SUID_MSG_LIMITS | ||||
| #define glibtop_get_msg_limits_r	glibtop_get_msg_limits_p | ||||
|   | ||||
| @@ -37,7 +37,7 @@ struct _glibtop_netlist | ||||
| 	guint32 number; | ||||
| }; | ||||
|  | ||||
| #define glibtop_get_netlist(netlist)	glibtop_get_netlist_l(glibtop_global_server, netlist) | ||||
| char** glibtop_get_netlist(glibtop_netlist *buf); | ||||
|  | ||||
| #if GLIBTOP_SUID_NETLIST | ||||
| #define glibtop_get_netlist_r		glibtop_get_netlist_p | ||||
|   | ||||
| @@ -107,7 +107,7 @@ struct _glibtop_netload | ||||
| 	guint8 hwaddress[8];		/* GLIBTOP_NETLOAD_HWADDRESS    */ | ||||
| }; | ||||
|  | ||||
| #define glibtop_get_netload(netload,interface)	glibtop_get_netload_l(glibtop_global_server, netload, interface) | ||||
| void glibtop_get_netload(glibtop_netload *buf, const char *interface); | ||||
|  | ||||
| #if GLIBTOP_SUID_NETLOAD | ||||
| #define glibtop_get_netload_r	glibtop_get_netload_p | ||||
|   | ||||
| @@ -51,7 +51,7 @@ struct _glibtop_ppp | ||||
| 		bytes_out;		/* GLIBTOP_PPP_BYTES_OUT	*/ | ||||
| }; | ||||
|  | ||||
| #define glibtop_get_ppp(ppp,device)	glibtop_get_ppp_l(glibtop_global_server, ppp, device) | ||||
| void glibtop_get_ppp(glibtop_ppp *buf, unsigned short device); | ||||
|  | ||||
| #if GLIBTOP_SUID_PPP | ||||
| #define glibtop_get_ppp_r	glibtop_get_ppp_p | ||||
|   | ||||
| @@ -46,9 +46,8 @@ char * | ||||
| glibtop_get_proc_args_l (glibtop *server, glibtop_proc_args *buf, | ||||
| 			 pid_t pid, unsigned max_len); | ||||
|  | ||||
| #define glibtop_get_proc_args(proc_args,pid,max_len) glibtop_get_proc_args_l(glibtop_global_server, proc_args, pid, max_len) | ||||
|  | ||||
|  | ||||
| char * | ||||
| glibtop_get_proc_args (glibtop_proc_args *buf, pid_t pid, unsigned max_len); | ||||
|  | ||||
| #if GLIBTOP_SUID_PROC_ARGS | ||||
|  | ||||
| @@ -82,8 +81,8 @@ char ** | ||||
| glibtop_get_proc_argv_l (glibtop *server, glibtop_proc_args *buf, | ||||
| 			 pid_t pid, unsigned max_len); | ||||
|  | ||||
| #define glibtop_get_proc_argv(proc_args,pid,max_len) glibtop_get_proc_argv_l(glibtop_global_server, proc_args, pid, max_len) | ||||
|  | ||||
| char ** | ||||
| glibtop_get_proc_argv (glibtop_proc_args *buf, pid_t pid, unsigned max_len); | ||||
|  | ||||
|  | ||||
| G_END_DECLS | ||||
|   | ||||
| @@ -64,7 +64,7 @@ struct _glibtop_proc_kernel | ||||
| 	char wchan [40]; | ||||
| }; | ||||
|  | ||||
| #define glibtop_get_proc_kernel(p1, p2)	glibtop_get_proc_kernel_l(glibtop_global_server, p1, p2) | ||||
| void glibtop_get_proc_kernel(glibtop_proc_kernel *buf, pid_t pid); | ||||
|  | ||||
| #if GLIBTOP_SUID_PROC_KERNEL | ||||
| #define glibtop_get_proc_kernel_r	glibtop_get_proc_kernel_p | ||||
|   | ||||
| @@ -62,7 +62,8 @@ struct _glibtop_proclist | ||||
| 		size;			/* GLIBTOP_PROCLIST_SIZE	*/ | ||||
| }; | ||||
|  | ||||
| #define glibtop_get_proclist(proclist,which,arg) glibtop_get_proclist_l(glibtop_global_server, proclist, which, arg) | ||||
| unsigned * | ||||
| glibtop_get_proclist(glibtop_proclist *buf, gint64 which, gint64 arg); | ||||
|  | ||||
| #if GLIBTOP_SUID_PROCLIST | ||||
| #define glibtop_get_proclist_r		glibtop_get_proclist_p | ||||
|   | ||||
| @@ -70,8 +70,9 @@ struct _glibtop_proc_map | ||||
| 		total,			/* GLIBTOP_PROC_MAP_TOTAL	*/ | ||||
| 		size;			/* GLIBTOP_PROC_MAP_SIZE	*/ | ||||
| }; | ||||
| glibtop_map_entry * | ||||
| glibtop_get_proc_map(glibtop_proc_map *buf, pid_t pid); | ||||
|  | ||||
| #define glibtop_get_proc_map(proc_map,pid) glibtop_get_proc_map_l(glibtop_global_server, proc_map, pid) | ||||
|  | ||||
| #if GLIBTOP_SUID_PROC_MAP | ||||
| #define glibtop_get_proc_map_r		glibtop_get_proc_map_p | ||||
|   | ||||
| @@ -55,7 +55,7 @@ struct _glibtop_proc_mem | ||||
| 				 * of the process; usually 2,147,483,647 */ | ||||
| }; | ||||
|  | ||||
| #define glibtop_get_proc_mem(p1, p2)	glibtop_get_proc_mem_l(glibtop_global_server, p1, p2) | ||||
| void glibtop_get_proc_mem(glibtop_proc_mem *buf, pid_t pid); | ||||
|  | ||||
| #if GLIBTOP_SUID_PROC_MEM | ||||
| #define glibtop_get_proc_mem_r		glibtop_get_proc_mem_p | ||||
|   | ||||
| @@ -94,7 +94,8 @@ struct _glibtop_proc_open_files | ||||
| 		size;			/* GLIBTOP_PROC_OPEN_FILES_SIZE   */ | ||||
| }; | ||||
|  | ||||
| #define glibtop_get_proc_open_files(proc_open_files,pid) glibtop_get_proc_open_files_l(glibtop_global_server, proc_open_files, pid) | ||||
| glibtop_open_files_entry * | ||||
| glibtop_get_proc_open_files(glibtop_proc_open_files *buf, pid_t pid); | ||||
|  | ||||
| #if GLIBTOP_SUID_PROC_FILE | ||||
| #define glibtop_get_proc_open_files_r		glibtop_get_proc_open_files_p | ||||
|   | ||||
| @@ -58,7 +58,7 @@ struct _glibtop_proc_segment | ||||
| 		start_stack;	/* address of the bottom of stack segment */ | ||||
| }; | ||||
|  | ||||
| #define glibtop_get_proc_segment(p1, p2)	glibtop_get_proc_segment_l(glibtop_global_server, p1, p2) | ||||
| void glibtop_get_proc_segment(glibtop_proc_segment *buf, pid_t pid); | ||||
|  | ||||
| #if GLIBTOP_SUID_PROC_SEGMENT | ||||
| #define glibtop_get_proc_segment_r	glibtop_get_proc_segment_p | ||||
|   | ||||
| @@ -49,7 +49,7 @@ struct _glibtop_proc_signal | ||||
| 		sigcatch [2];		/* mask of caught  signals */ | ||||
| }; | ||||
|  | ||||
| #define glibtop_get_proc_signal(p1, p2)	glibtop_get_proc_signal_l(glibtop_global_server, p1, p2) | ||||
| void glibtop_get_proc_signal(glibtop_proc_signal *buf, pid_t pid); | ||||
|  | ||||
| #if GLIBTOP_SUID_PROC_SIGNAL | ||||
| #define glibtop_get_proc_signal_r	glibtop_get_proc_signal_p | ||||
|   | ||||
| @@ -74,7 +74,7 @@ struct _glibtop_proc_state | ||||
|         last_processor; | ||||
| }; | ||||
|  | ||||
| #define glibtop_get_proc_state(p1, p2)	glibtop_get_proc_state_l(glibtop_global_server, p1, p2) | ||||
| void glibtop_get_proc_state(glibtop_proc_state *buf, pid_t pid); | ||||
|  | ||||
| #if GLIBTOP_SUID_PROC_STATE | ||||
| #define glibtop_get_proc_state_r	glibtop_get_proc_state_p | ||||
|   | ||||
| @@ -70,7 +70,8 @@ struct _glibtop_proc_time | ||||
| 		xcpu_stime [GLIBTOP_NCPU];	/* SMP machines. */ | ||||
| }; | ||||
|  | ||||
| #define glibtop_get_proc_time(p1, p2)	glibtop_get_proc_time_l(glibtop_global_server, p1, p2) | ||||
|  | ||||
| void glibtop_get_proc_time(glibtop_proc_time *buf, pid_t pid); | ||||
|  | ||||
| #if GLIBTOP_SUID_PROC_TIME | ||||
| #define glibtop_get_proc_time_r	glibtop_get_proc_time_p | ||||
|   | ||||
| @@ -80,7 +80,7 @@ struct _glibtop_proc_uid | ||||
|  | ||||
| }; | ||||
|  | ||||
| #define glibtop_get_proc_uid(p1, p2)	glibtop_get_proc_uid_l(glibtop_global_server, p1, p2) | ||||
| void glibtop_get_proc_uid(glibtop_proc_uid *buf, pid_t pid); | ||||
|  | ||||
| #if GLIBTOP_SUID_PROC_UID | ||||
| #define glibtop_get_proc_uid_r		glibtop_get_proc_uid_p | ||||
|   | ||||
| @@ -59,7 +59,7 @@ struct _glibtop_sem_limits | ||||
| 		semaem;		/* GLIBTOP_IPC_SEMAEM	*/ | ||||
| }; | ||||
|  | ||||
| #define glibtop_get_sem_limits(sem)	glibtop_get_sem_limits_l(glibtop_global_server, sem) | ||||
| void glibtop_get_sem_limits(glibtop_sem_limits *buf); | ||||
|  | ||||
| #if GLIBTOP_SUID_SEM_LIMITS | ||||
| #define glibtop_get_sem_limits_r	glibtop_get_sem_limits_p | ||||
|   | ||||
| @@ -49,7 +49,7 @@ struct _glibtop_shm_limits | ||||
| 		shmall;		/* GLIBTOP_IPC_SHMALL	*/ | ||||
| }; | ||||
|  | ||||
| #define glibtop_get_shm_limits(shm)	glibtop_get_shm_limits_l(glibtop_global_server, shm) | ||||
| void glibtop_get_shm_limits(glibtop_shm_limits *buf); | ||||
|  | ||||
| #if GLIBTOP_SUID_SHM_LIMITS | ||||
| #define glibtop_get_shm_limits_r	glibtop_get_shm_limits_p | ||||
|   | ||||
| @@ -49,7 +49,8 @@ struct _glibtop_swap | ||||
| 		pageout;	/* GLIBTOP_SWAP_PAGEOUT	*/ | ||||
| }; | ||||
|  | ||||
| #define glibtop_get_swap(swap)	glibtop_get_swap_l(glibtop_global_server, swap) | ||||
| void | ||||
| glibtop_get_swap(glibtop_swap *buf); | ||||
|  | ||||
| #if GLIBTOP_SUID_SWAP | ||||
| #define glibtop_get_swap_r		glibtop_get_swap_p | ||||
|   | ||||
| @@ -94,8 +94,7 @@ struct _glibtop_sysdeps | ||||
| 		ppp;			/* glibtop_ppp		*/ | ||||
| }; | ||||
|  | ||||
| #define glibtop_get_sysdeps(sysdeps)	glibtop_get_sysdeps_r(glibtop_global_server,sysdeps) | ||||
|  | ||||
| void glibtop_get_sysdeps (glibtop_sysdeps *buf); | ||||
| void glibtop_get_sysdeps_r (glibtop *server, glibtop_sysdeps *buf); | ||||
|  | ||||
|  | ||||
|   | ||||
| @@ -54,11 +54,10 @@ struct _glibtop_sysinfo | ||||
| 	glibtop_entry cpuinfo [GLIBTOP_NCPU]; | ||||
| }; | ||||
|  | ||||
| #define glibtop_get_sysinfo()	glibtop_get_sysinfo_s(glibtop_global_server) | ||||
|  | ||||
| #define glibtop_get_sysinfo_r	glibtop_get_sysinfo_s | ||||
|  | ||||
| const glibtop_sysinfo *glibtop_get_sysinfo_s (glibtop *server); | ||||
| const glibtop_sysinfo *glibtop_get_sysinfo (void); | ||||
|  | ||||
| G_END_DECLS | ||||
|  | ||||
|   | ||||
| @@ -45,7 +45,7 @@ struct _glibtop_uptime | ||||
| 	guint64 boot_time; | ||||
| }; | ||||
|  | ||||
| #define glibtop_get_uptime(uptime)	glibtop_get_uptime_l(glibtop_global_server, uptime) | ||||
| void glibtop_get_uptime (glibtop_uptime *buf); | ||||
|  | ||||
| #if GLIBTOP_SUID_UPTIME | ||||
| #define glibtop_get_uptime_r		glibtop_get_uptime_p | ||||
|   | ||||
| @@ -1,11 +0,0 @@ | ||||
|  | ||||
| #include <config.h> | ||||
|  | ||||
| #include <libintl.h> | ||||
| #define _(String) gettext (String) | ||||
| #ifdef gettext_noop | ||||
| #   define N_(String) gettext_noop (String) | ||||
| #else | ||||
| #   define N_(String) (String) | ||||
| #endif | ||||
|  | ||||
| @@ -28,7 +28,7 @@ print '#include <glibtop/open.h>'; | ||||
| print ''; | ||||
| print '#include <glibtop/sysdeps.h>'; | ||||
| print '#include <glibtop/union.h>'; | ||||
| print '#include "libgtop-i18n.h"'; | ||||
| print '#include <glib/gi18n-lib.h>'; | ||||
| print ''; | ||||
| print '#include <glibtop/command.h>'; | ||||
|  | ||||
|   | ||||
| @@ -24,7 +24,7 @@ | ||||
| #include <config.h> | ||||
| #include <glibtop/read.h> | ||||
| #include <glibtop/error.h> | ||||
| #include "libgtop-i18n.h" | ||||
| #include <glib/gi18n-lib.h> | ||||
|  | ||||
|  | ||||
| /* Reads some data from server. */ | ||||
|   | ||||
| @@ -25,7 +25,7 @@ | ||||
|  | ||||
| #include <glibtop/error.h> | ||||
| #include <glibtop/read_data.h> | ||||
| #include "libgtop-i18n.h" | ||||
| #include <glib/gi18n-lib.h> | ||||
|  | ||||
| /* Reads some data from server. */ | ||||
|  | ||||
|   | ||||
| @@ -25,7 +25,7 @@ | ||||
|  | ||||
| #include <glibtop/write.h> | ||||
| #include <glibtop/error.h> | ||||
| #include "libgtop-i18n.h" | ||||
| #include <glib/gi18n-lib.h> | ||||
|  | ||||
| /* Writes some data to server. */ | ||||
|  | ||||
|   | ||||
| @@ -31,7 +31,7 @@ | ||||
|  | ||||
| #include <config.h> | ||||
|  | ||||
| #include "libgtop-i18n.h" | ||||
| #include <glib/gi18n-lib.h> | ||||
| #include <glibtop.h> | ||||
| #include <glibtop/open.h> | ||||
| #include <glibtop/close.h> | ||||
|   | ||||
| @@ -17,6 +17,7 @@ libgtop_common_2_0_la_SOURCES	= error.c gnuslib.c \ | ||||
| 				  fsusage.c \ | ||||
|                                   mountlist.c \ | ||||
|                                   procargs.c \ | ||||
| 				  default.c \ | ||||
| 				  $(inodedb_SRCLIST) | ||||
|  | ||||
| libgtop_common_2_0_la_LDFLAGS	= $(LT_VERSION_INFO) | ||||
|   | ||||
							
								
								
									
										212
									
								
								sysdeps/common/default.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										212
									
								
								sysdeps/common/default.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,212 @@ | ||||
| #include <config.h> | ||||
|  | ||||
| #include <glibtop.h> | ||||
| #include <glibtop/sysinfo.h> | ||||
| #include <glibtop/union.h> | ||||
|  | ||||
|  | ||||
| void | ||||
| glibtop_close(void) | ||||
| { | ||||
| 	glibtop_close_r(glibtop_global_server); | ||||
| } | ||||
|  | ||||
|  | ||||
| glibtop* | ||||
| glibtop_init(void) | ||||
| { | ||||
| 	return glibtop_init_r(&glibtop_global_server, 0, 0); | ||||
| } | ||||
|  | ||||
|  | ||||
| void | ||||
| glibtop_get_cpu(glibtop_cpu *buf) | ||||
| { | ||||
| 	glibtop_get_cpu_l(glibtop_global_server, buf); | ||||
| } | ||||
|  | ||||
|  | ||||
| void | ||||
| glibtop_get_fsusage(glibtop_fsusage *buf, const char *mount_dir) | ||||
| { | ||||
| 	glibtop_get_fsusage_l(glibtop_global_server, buf, mount_dir); | ||||
| } | ||||
|  | ||||
|  | ||||
| void | ||||
| glibtop_get_uptime(glibtop_uptime *buf) | ||||
| { | ||||
| 	glibtop_get_uptime_l(glibtop_global_server, buf); | ||||
| } | ||||
|  | ||||
|  | ||||
| const glibtop_sysinfo * | ||||
| glibtop_get_sysinfo(void) | ||||
| { | ||||
| 	return glibtop_get_sysinfo_s(glibtop_global_server); | ||||
| } | ||||
|  | ||||
|  | ||||
| void | ||||
| glibtop_get_swap(glibtop_swap *buf) | ||||
| { | ||||
| 	glibtop_get_swap_l(glibtop_global_server, buf); | ||||
| } | ||||
|  | ||||
|  | ||||
| void | ||||
| glibtop_get_proc_uid(glibtop_proc_uid *buf, pid_t pid) | ||||
| { | ||||
| 	glibtop_get_proc_uid_l(glibtop_global_server, buf, pid); | ||||
| } | ||||
|  | ||||
|  | ||||
| void | ||||
| glibtop_get_proc_time(glibtop_proc_time *buf, pid_t pid) | ||||
| { | ||||
| 	glibtop_get_proc_time_l(glibtop_global_server, buf, pid); | ||||
| } | ||||
|  | ||||
|  | ||||
| void | ||||
| glibtop_get_proc_state(glibtop_proc_state *buf, pid_t pid) | ||||
| { | ||||
| 	glibtop_get_proc_state_l(glibtop_global_server, buf, pid); | ||||
| } | ||||
|  | ||||
|  | ||||
| void | ||||
| glibtop_get_proc_signal(glibtop_proc_signal *buf, pid_t pid) | ||||
| { | ||||
| 	glibtop_get_proc_signal_l(glibtop_global_server, buf, pid); | ||||
| } | ||||
|  | ||||
|  | ||||
| void | ||||
| glibtop_get_proc_segment(glibtop_proc_segment *buf, pid_t pid) | ||||
| { | ||||
| 	glibtop_get_proc_segment_l(glibtop_global_server, buf, pid); | ||||
| } | ||||
|  | ||||
|  | ||||
| glibtop_open_files_entry * | ||||
| glibtop_get_proc_open_files(glibtop_proc_open_files *buf, pid_t pid) | ||||
| { | ||||
| 	return glibtop_get_proc_open_files_l(glibtop_global_server, buf, pid); | ||||
| } | ||||
|  | ||||
|  | ||||
| void | ||||
| glibtop_get_proc_mem(glibtop_proc_mem *buf, pid_t pid) | ||||
| { | ||||
| 	glibtop_get_proc_mem_l(glibtop_global_server, buf, pid); | ||||
| } | ||||
|  | ||||
|  | ||||
| glibtop_map_entry * | ||||
| glibtop_get_proc_map(glibtop_proc_map *buf, pid_t pid) | ||||
| { | ||||
| 	return glibtop_get_proc_map_l(glibtop_global_server, buf, pid); | ||||
| } | ||||
|  | ||||
|  | ||||
| char * | ||||
| glibtop_get_proc_args(glibtop_proc_args *buf, pid_t pid, unsigned max_len) | ||||
| { | ||||
| 	return glibtop_get_proc_args_l(glibtop_global_server, buf, pid, max_len); | ||||
| } | ||||
|  | ||||
|  | ||||
| char ** | ||||
| glibtop_get_proc_argv(glibtop_proc_args *buf, pid_t pid, unsigned max_len) | ||||
| { | ||||
| 	return glibtop_get_proc_argv_l(glibtop_global_server, buf, pid, max_len); | ||||
| } | ||||
|  | ||||
|  | ||||
| unsigned * | ||||
| glibtop_get_proclist(glibtop_proclist *buf, gint64 which, gint64 arg) | ||||
| { | ||||
| 	return glibtop_get_proclist_l(glibtop_global_server, buf, which, arg); | ||||
| } | ||||
|  | ||||
|  | ||||
| void | ||||
| glibtop_get_proc_kernel(glibtop_proc_kernel *buf, pid_t pid) | ||||
| { | ||||
| 	glibtop_get_proc_kernel_l(glibtop_global_server, buf, pid); | ||||
| } | ||||
|  | ||||
|  | ||||
| void | ||||
| glibtop_get_ppp(glibtop_ppp *buf, unsigned short device) | ||||
| { | ||||
| 	glibtop_get_ppp_l(glibtop_global_server, buf, device); | ||||
| } | ||||
|  | ||||
|  | ||||
| char** | ||||
| glibtop_get_netlist(glibtop_netlist *buf) | ||||
| { | ||||
| 	return glibtop_get_netlist_l(glibtop_global_server, buf); | ||||
| } | ||||
|  | ||||
|  | ||||
| void | ||||
| glibtop_get_netload(glibtop_netload *buf, const char *interface) | ||||
| { | ||||
| 	glibtop_get_netload_l(glibtop_global_server, buf, interface); | ||||
| } | ||||
|  | ||||
|  | ||||
| glibtop_mountentry * | ||||
| glibtop_get_mountlist(glibtop_mountlist *buf, int all_fs) | ||||
| { | ||||
| 	return glibtop_get_mountlist_l(glibtop_global_server, buf, all_fs); | ||||
| } | ||||
|  | ||||
|  | ||||
| void | ||||
| glibtop_get_mem(glibtop_mem *buf) | ||||
| { | ||||
| 	glibtop_get_mem_l(glibtop_global_server, buf); | ||||
| } | ||||
|  | ||||
|  | ||||
| void | ||||
| glibtop_get_loadavg(glibtop_loadavg *buf) | ||||
| { | ||||
| 	glibtop_get_loadavg_l(glibtop_global_server, buf); | ||||
| } | ||||
|  | ||||
|  | ||||
| void | ||||
| glibtop_get_msg_limits(glibtop_msg_limits *buf) | ||||
| { | ||||
| 	glibtop_get_msg_limits_l(glibtop_global_server, buf); | ||||
| } | ||||
|  | ||||
|  | ||||
| void | ||||
| glibtop_get_sem_limits(glibtop_sem_limits *buf) | ||||
| { | ||||
| 	glibtop_get_sem_limits_l(glibtop_global_server, buf); | ||||
| } | ||||
|  | ||||
|  | ||||
| void | ||||
| glibtop_get_shm_limits(glibtop_shm_limits *buf) | ||||
| { | ||||
| 	glibtop_get_shm_limits_l(glibtop_global_server, buf); | ||||
| } | ||||
|  | ||||
|  | ||||
| void | ||||
| glibtop_get_sysdeps(glibtop_sysdeps *buf) | ||||
| { | ||||
| 	glibtop_get_sysdeps_r(glibtop_global_server, buf); | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
		Reference in New Issue
	
	Block a user