diff options
Diffstat (limited to 'sysdeps')
-rw-r--r-- | sysdeps/common/default.c | 4 | ||||
-rw-r--r-- | sysdeps/linux/disk.c | 33 | ||||
-rw-r--r-- | sysdeps/linux/glibtop_private.h | 2 | ||||
-rw-r--r-- | sysdeps/stub/Makefile.am | 2 | ||||
-rw-r--r-- | sysdeps/stub_suid/Makefile.am | 2 | ||||
-rw-r--r-- | sysdeps/stub_suid/disk.c | 47 |
6 files changed, 76 insertions, 14 deletions
diff --git a/sysdeps/common/default.c b/sysdeps/common/default.c index 653a4f5a..ff6c3ecd 100644 --- a/sysdeps/common/default.c +++ b/sysdeps/common/default.c @@ -72,9 +72,9 @@ glibtop_get_cpu(glibtop_cpu *buf) * */ void -glibtop_get_cpu (glibtop_cpu *buf) +glibtop_get_disk (glibtop_disk *buf) { - glibtop_get_cpu_l (glibtop_global_server, buf); + glibtop_get_disk_l (glibtop_global_server, buf); } diff --git a/sysdeps/linux/disk.c b/sysdeps/linux/disk.c index 3ad74bcc..c2d341f6 100644 --- a/sysdeps/linux/disk.c +++ b/sysdeps/linux/disk.c @@ -48,7 +48,7 @@ _glibtop_init_disk_s (glibtop *server) // Handle LVM and RAID // void -find_primary_part (_partition_info *primary_part, const char *m) +find_primary_part (partition_info *primary_part, const char *m) { int n = 0, tlvl = 0; char name[256]="",type[256]=""; @@ -190,7 +190,7 @@ find_primary_part (_partition_info *primary_part, const char *m) } int -is_virtual_drive (_partition_info *primary_part, const char *p) +is_virtual_drive (partition_info *primary_part, const char *p) { int i; char name[256]; @@ -220,10 +220,27 @@ is_virtual_drive (_partition_info *primary_part, const char *p) return test; } +int +max_lines (const char *p) +{ + char temp[10]; + int count = 0; + + while (sscanf (p, "%s", temp) == 1) + { + + p = skip_line(p); + count++; + + } + + return count; +} + void glibtop_get_disk_s (glibtop *server, glibtop_disk *buf) { - _partition_info primary_part[GLIBTOP_NDISK]; + partition_info primary_part[GLIBTOP_NDISK]; char buffer [STAT_BUFSIZ], *p, map_buffer [STAT_BUFSIZ], *m; int i; @@ -233,8 +250,6 @@ glibtop_get_disk_s (glibtop *server, glibtop_disk *buf) get_from_pipe (map_buffer, CMD_PIPE); - server->ndisk = GLIBTOP_NDISK; - /* * GLOBAL */ @@ -246,23 +261,23 @@ glibtop_get_disk_s (glibtop *server, glibtop_disk *buf) * PER DISK */ + server->ndisk = max_lines(p); + find_primary_part (primary_part, m); - for (i = 0; i <= server->ndisk; i++) { + for (i = 0; i < server->ndisk; i++) { p = skip_multiple_token (p,2); // skip if disk is the raw device if (!is_virtual_drive (primary_part, p)) { + server->ndisk--; p = skip_line (p); /* move to ^ */ p = skip_multiple_token (p, 2); } - if (!check_disk_line_warn (server, p, i)) - break; - p = skip_token (p); /* prev xdisk_name */ p = skip_token (p); /* prev xdisk_reads_completed */ p = skip_token (p); /* prev xdisk_reads_merged */ diff --git a/sysdeps/linux/glibtop_private.h b/sysdeps/linux/glibtop_private.h index 66fed54c..39101163 100644 --- a/sysdeps/linux/glibtop_private.h +++ b/sysdeps/linux/glibtop_private.h @@ -62,7 +62,7 @@ skip_line (const char *p) } void -get_from_pipe (char *buffer, const char *cmd) +get_from_pipe (char *buffer, const char *cmd); /* * Smart strtoul which handles binary suffixes diff --git a/sysdeps/stub/Makefile.am b/sysdeps/stub/Makefile.am index f4219edb..6d9ce727 100644 --- a/sysdeps/stub/Makefile.am +++ b/sysdeps/stub/Makefile.am @@ -3,7 +3,7 @@ AM_CPPFLAGS = @AM_CPPFLAGS@ noinst_LTLIBRARIES = libgtop_sysdeps-2.0.la -libgtop_sysdeps_2_0_la_SOURCES = open.c close.c siglist.c cpu.c mem.c swap.c \ +libgtop_sysdeps_2_0_la_SOURCES = open.c close.c siglist.c cpu.c disk.c mem.c swap.c \ uptime.c loadavg.c shm_limits.c msg_limits.c \ sem_limits.c proclist.c procstate.c procuid.c \ proctime.c procmem.c procsignal.c prockernel.c \ diff --git a/sysdeps/stub_suid/Makefile.am b/sysdeps/stub_suid/Makefile.am index fcc7daf9..3f1bf958 100644 --- a/sysdeps/stub_suid/Makefile.am +++ b/sysdeps/stub_suid/Makefile.am @@ -7,7 +7,7 @@ libgtop_sysdeps_2_0_la_SOURCES = nosuid.c siglist.c libgtop_sysdeps_2_0_la_LDFLAGS = $(LT_VERSION_INFO) -libgtop_sysdeps_suid_2_0_la_SOURCES = open.c close.c siglist.c cpu.c mem.c swap.c \ +libgtop_sysdeps_suid_2_0_la_SOURCES = open.c close.c siglist.c cpu.c disk.c mem.c swap.c \ uptime.c loadavg.c shm_limits.c msg_limits.c \ sem_limits.c proclist.c procstate.c procuid.c \ proctime.c procmem.c procsignal.c prockernel.c \ diff --git a/sysdeps/stub_suid/disk.c b/sysdeps/stub_suid/disk.c new file mode 100644 index 00000000..ed5cda02 --- /dev/null +++ b/sysdeps/stub_suid/disk.c @@ -0,0 +1,47 @@ +/* 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., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#include <config.h> +#include <glibtop.h> +#include <glibtop/error.h> +#include <glibtop/disk.h> + +#include <glibtop_suid.h> + +static const unsigned long _glibtop_sysdeps_disk = 0; + +/* Init function. */ + +void +_glibtop_init_disk_p (glibtop *server) +{ + server->sysdeps.disk = _glibtop_sysdeps_disk; +} + +/* Provides information about disk usage. */ + +void +glibtop_get_disk_p (glibtop *server, glibtop_disk *buf) +{ + glibtop_init_p (server, GLIBTOP_SYSDEPS_DISK, 0); + + memset (buf, 0, sizeof (glibtop_disk)); +} |