From d2d8d38db402132df3baefc828233278f2ccfa9f Mon Sep 17 00:00:00 2001 From: Martin Baulig Date: Sun, 19 Dec 1999 00:30:18 +0000 Subject: [PATCH] New file. We define `GLIBTOP_ERROR_*' error constants here. 1999-12-19 Martin Baulig * include/glibtop/errors.h: New file. We define `GLIBTOP_ERROR_*' error constants here. * lib/errors.c: New file. (glibtop_error_strings): Array of error messages. (glibtop_get_error_string_l): Get error message. * include/glibtop/parameter.h: Added `GLIBTOP_PARAM_REMOTE_USER' and `GLIBTOP_PARAM_PATH_RSH'. * lib/parameter.c (glibtop_get_parameter_l): Changed return value from `size_t' to `ssize_t' and let it return an error constant. (glibtop_get_parameter_size_l): New function. (glibtop_set_parameter_l): Changed return value from `void' to `int' and let it return an error constant on error. * structures.def (glibtop_sysdeps): Added. --- ChangeLog | 20 ++++++++++ glibtop.h | 1 + include/glibtop/Makefile.am | 3 +- include/glibtop/errors.h | 47 ++++++++++++++++++++++ include/glibtop/parameter.h | 9 ++++- lib/Makefile.am | 2 +- lib/errors.c | 44 +++++++++++++++++++++ lib/parameter.c | 78 ++++++++++++++++++++++++++++++++----- structures.def | 1 + 9 files changed, 192 insertions(+), 13 deletions(-) create mode 100644 include/glibtop/errors.h create mode 100644 lib/errors.c diff --git a/ChangeLog b/ChangeLog index 564c072e..cc5d310f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,23 @@ +1999-12-19 Martin Baulig + + * include/glibtop/errors.h: New file. We define `GLIBTOP_ERROR_*' + error constants here. + + * lib/errors.c: New file. + (glibtop_error_strings): Array of error messages. + (glibtop_get_error_string_l): Get error message. + + * include/glibtop/parameter.h: Added `GLIBTOP_PARAM_REMOTE_USER' and + `GLIBTOP_PARAM_PATH_RSH'. + + * lib/parameter.c (glibtop_get_parameter_l): Changed return value + from `size_t' to `ssize_t' and let it return an error constant. + (glibtop_get_parameter_size_l): New function. + (glibtop_set_parameter_l): Changed return value from `void' to `int' + and let it return an error constant on error. + + * structures.def (glibtop_sysdeps): Added. + 1999-12-12 Martin Baulig All functions which return an array now take a `glibtop_array *array' diff --git a/glibtop.h b/glibtop.h index 2a251108..1ff0006d 100644 --- a/glibtop.h +++ b/glibtop.h @@ -41,6 +41,7 @@ typedef struct _glibtop glibtop; #include +#include struct _glibtop { diff --git a/include/glibtop/Makefile.am b/include/glibtop/Makefile.am index 66de9b1b..224b68f4 100644 --- a/include/glibtop/Makefile.am +++ b/include/glibtop/Makefile.am @@ -8,4 +8,5 @@ glibtop_HEADERS = close.h loadavg.h prockernel.h procstate.h \ procsignal.h read_data.h union.h types.h gnuserv.h \ parameter.h mountlist.h fsusage.h procmap.h signal.h \ inodedb.h sysinfo.h ppp.h procargs.h netload.h \ - netinfo.h interfaces.h limits.h array.h compat_10.h + netinfo.h interfaces.h limits.h array.h compat_10.h \ + errors.h diff --git a/include/glibtop/errors.h b/include/glibtop/errors.h new file mode 100644 index 00000000..62bd3c6c --- /dev/null +++ b/include/glibtop/errors.h @@ -0,0 +1,47 @@ +/* -*- 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 , 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_ERRORS_H__ +#define __GLIBTOP_ERRORS_H__ + +#include + +BEGIN_LIBGTOP_DECLS + +#define GLIBTOP_ERROR_NO_ERROR 0 +#define GLIBTOP_ERROR_UNKNOWN 1 +#define GLIBTOP_ERROR_INVALID_ARGUMENT 2 +#define GLIBTOP_ERROR_NO_SUCH_PARAMETER 3 +#define GLIBTOP_ERROR_READONLY_VALUE 4 +#define GLIBTOP_ERROR_SIZE_MISMATCH 5 + +#define GLIBTOP_MAX_ERROR 6 + +char * +glibtop_get_error_string_l (glibtop *server, unsigned error_number); + +END_LIBGTOP_DECLS + +#endif diff --git a/include/glibtop/parameter.h b/include/glibtop/parameter.h index f23810e8..0923b832 100644 --- a/include/glibtop/parameter.h +++ b/include/glibtop/parameter.h @@ -36,15 +36,20 @@ BEGIN_LIBGTOP_DECLS #define GLIBTOP_PARAM_PORT 5 #define GLIBTOP_PARAM_ERROR_METHOD 6 #define GLIBTOP_PARAM_REQUIRED 7 +#define GLIBTOP_PARAM_REMOTE_USER 8 +#define GLIBTOP_PARAM_PATH_RSH 9 #define glibtop_get_parameter(p1,p2,p3) glibtop_get_parameter_l(glibtop_global_server,p1,p2,p3) #define glibtop_set_parameter(p1,p2,p3) glibtop_set_parameter_l(glibtop_global_server,p1,p2,p3) -size_t +ssize_t glibtop_get_parameter_l (glibtop *server, const unsigned parameter, void *data_ptr, size_t data_size); -void +int +glibtop_get_parameter_size_l (glibtop *server, const unsigned parameter); + +int glibtop_set_parameter_l (glibtop *server, const unsigned parameter, const void *data_ptr, size_t data_size); diff --git a/lib/Makefile.am b/lib/Makefile.am index b523a789..bf4d4186 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -6,7 +6,7 @@ lib_LTLIBRARIES = libgtop.la libgtop_la_SOURCES = init.c open.c close.c command.c read.c \ read_data.c write.c lib.c parameter.c \ - sysdeps.c + sysdeps.c errors.c libgtop_la_LDFLAGS = $(LT_VERSION_INFO) diff --git a/lib/errors.c b/lib/errors.c new file mode 100644 index 00000000..6f73bd0c --- /dev/null +++ b/lib/errors.c @@ -0,0 +1,44 @@ +/* $Id$ */ + +/* Copyright (C) 1998-99 Martin Baulig + This file is part of LibGTop 1.0. + + Contributed by Martin Baulig , 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 +#include +#include + +const char *glibtop_error_strings[GLIBTOP_MAX_ERROR] = { + N_("No error"), + N_("Unknown error"), + N_("Invalid argument"), + N_("No such parameter"), + N_("Attempted to modify a read-only value"), + N_("Parameter size mismatch") +}; + +char * +glibtop_get_error_string_l (glibtop *server, unsigned error_number) +{ + if (error_number >= GLIBTOP_MAX_ERROR) + error_number = GLIBTOP_ERROR_UNKNOWN; + + return glibtop_strdup_r (server, _(glibtop_error_strings [error_number])); +} diff --git a/lib/parameter.c b/lib/parameter.c index 83a8bfe7..bd3731b7 100644 --- a/lib/parameter.c +++ b/lib/parameter.c @@ -22,10 +22,12 @@ */ #include +#include #include #define _write_data(ptr,size) \ - if ((data_ptr == NULL) || (data_size < size)) return -size; \ + if ((data_ptr == NULL) || (data_size < size)) \ + return -GLIBTOP_ERROR_SIZE_MISMATCH; \ if (ptr == NULL) { strcpy (data_ptr, ""); return 1; } \ memcpy (data_ptr, ptr, size); \ return size; @@ -35,12 +37,12 @@ glibtop_warn_r (server, "glibtop_set_parameter (%d): " \ "Expected %lu bytes but got %lu.", \ parameter, size, data_size); \ - return; \ + return -GLIBTOP_ERROR_SIZE_MISMATCH; \ } #define _strlen(ptr) (ptr ? strlen (ptr) : 0) -size_t +ssize_t glibtop_get_parameter_l (glibtop *server, const unsigned parameter, void *data_ptr, size_t data_size) { @@ -60,6 +62,12 @@ glibtop_get_parameter_l (glibtop *server, const unsigned parameter, case GLIBTOP_PARAM_PORT: _write_data (&server->server_port, sizeof (server->server_port)); + case GLIBTOP_PARAM_REMOTE_USER: + _write_data (server->server_user, + _strlen(server->server_user)); + case GLIBTOP_PARAM_PATH_RSH: + _write_data (server->server_rsh, + _strlen(server->server_rsh)); case GLIBTOP_PARAM_ERROR_METHOD: _write_data (&server->error_method, sizeof (server->error_method)); @@ -68,10 +76,37 @@ glibtop_get_parameter_l (glibtop *server, const unsigned parameter, sizeof (server->required)); } - return 0; + return -GLIBTOP_ERROR_NO_SUCH_PARAMETER; } -void +int +glibtop_get_parameter_size_l (glibtop *server, const unsigned parameter) +{ + switch (parameter) { + case GLIBTOP_PARAM_METHOD: + return sizeof (server->method); + case GLIBTOP_PARAM_FEATURES: + return sizeof (server->features); + case GLIBTOP_PARAM_COMMAND: + return _strlen(server->server_command); + case GLIBTOP_PARAM_HOST: + return _strlen(server->server_host); + case GLIBTOP_PARAM_PORT: + return sizeof (server->server_port); + case GLIBTOP_PARAM_REMOTE_USER: + return _strlen(server->server_user); + case GLIBTOP_PARAM_PATH_RSH: + return _strlen(server->server_rsh); + case GLIBTOP_PARAM_ERROR_METHOD: + return sizeof (server->error_method); + case GLIBTOP_PARAM_REQUIRED: + return sizeof (server->required); + } + + return -GLIBTOP_ERROR_NO_SUCH_PARAMETER; +} + +int glibtop_set_parameter_l (glibtop *server, const unsigned parameter, const void *data_ptr, size_t data_size) { @@ -81,10 +116,31 @@ glibtop_set_parameter_l (glibtop *server, const unsigned parameter, memcpy (&server->method, data_ptr, data_size); break; case GLIBTOP_PARAM_FEATURES: - /* You should not be allowed to set this field. */ - glibtop_warn_r (server, "glibtop_set_parameter (%d): " \ - "Cannot modify read-only value.", - parameter); + return -GLIBTOP_ERROR_READONLY_VALUE; + break; + case GLIBTOP_PARAM_COMMAND: + if (server->server_command) + glibtop_free_r (server, server->server_command); + server->server_command = glibtop_strdup_r (server, data_ptr); + break; + case GLIBTOP_PARAM_HOST: + if (server->server_host) + glibtop_free_r (server, server->server_host); + server->server_host = glibtop_strdup_r (server, data_ptr); + break; + case GLIBTOP_PARAM_PORT: + _check_data (sizeof (server->server_port)); + memcpy (&server->server_port, data_ptr, data_size); + break; + case GLIBTOP_PARAM_REMOTE_USER: + if (server->server_user) + glibtop_free_r (server, server->server_user); + server->server_user = glibtop_strdup_r (server, data_ptr); + break; + case GLIBTOP_PARAM_PATH_RSH: + if (server->server_rsh) + glibtop_free_r (server, server->server_rsh); + server->server_rsh = glibtop_strdup_r (server, data_ptr); break; case GLIBTOP_PARAM_ERROR_METHOD: _check_data (sizeof (server->error_method)); @@ -94,5 +150,9 @@ glibtop_set_parameter_l (glibtop *server, const unsigned parameter, _check_data (sizeof (server->required)); memcpy (&server->required, data_ptr, data_size); break; + default: + return -GLIBTOP_ERROR_NO_SUCH_PARAMETER; } + + return 0; } diff --git a/structures.def b/structures.def index c12ce3a3..5c6d883d 100644 --- a/structures.def +++ b/structures.def @@ -1,3 +1,4 @@ glibtop_map_entry|ulong(flags,start,end,offset,perm,inode,device):string(filename) glibtop_mountentry|ulong(dev):string(devname,mountdir,type) glibtop_interface|ulong(flags,if_flags,transport,type,number,instance,num_logical):string(name) +glibtop_sysdeps|ulong(features,pointer_size,cpu,mem,swap,uptime,loadavg,shm_limits,msg_limits,sem_limits,proclist,proc_state,proc_uid,proc_mem,proc_time,proc_signal,proc_kernel,proc_segment,proc_args,proc_map,mountlist,fsusage,interface_names,netinfo,netload,ppp)