summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Görig <jgorig@redhat.com>2010-12-16 10:19:14 +0100
committerJan Görig <jgorig@redhat.com>2010-12-16 10:19:14 +0100
commit8f466aa21dda3cd8055fac54ba7291c9af737103 (patch)
treef040d492a07c6c658f264dc3279c4fd4d9014098
parent63b6a8fcbfb3115db0827b8402aef641e05e2ab9 (diff)
downloadprocps-ng-8f466aa21dda3cd8055fac54ba7291c9af737103.tar.gz
Headers for disk and slab info and getopt replacement
Author: Liu Xing <liuxing@cn.fujitsu.com> Author: Michael Tokarev <mjt@corpit.ru> Bug-Debian: http://bugs.debian.org/436805 Bug-Debian: http://bugs.debian.org/408088
-rw-r--r--vmstat.c80
1 files changed, 34 insertions, 46 deletions
diff --git a/vmstat.c b/vmstat.c
index f022928..e0d3c23 100644
--- a/vmstat.c
+++ b/vmstat.c
@@ -29,14 +29,15 @@
#include "proc/sysinfo.h"
#include "proc/version.h"
-static unsigned long dataUnit=1024;
-static char szDataUnit [16];
#define UNIT_B 1
#define UNIT_k 1000
#define UNIT_K 1024
#define UNIT_m 1000000
#define UNIT_M 1048576
+static unsigned long dataUnit=UNIT_K;
+static char szDataUnit[3] = "K";
+
#define VMSTAT 0
#define DISKSTAT 0x00000001
#define VMSUMSTAT 0x00000002
@@ -354,6 +355,7 @@ static void diskformat(void){
if ((fDiskstat=fopen("/proc/diskstats", "rb"))){
fclose(fDiskstat);
ndisks=getdiskstat(&disks,&partitions);
+ if (!moreheaders) diskheader();
for(k=0; k<ndisks; k++){
if (moreheaders && ((k%height)==0)) diskheader();
printf(format,
@@ -424,6 +426,7 @@ static void slabformat (void){
return;
}
+ if (!moreheaders) slabheader();
nSlab = getslabinfo(&slabs);
for(k=0; k<nSlab; k++){
if (moreheaders && ((k%height)==0)) slabheader();
@@ -582,12 +585,10 @@ static int winhi(void) {
////////////////////////////////////////////////////////////////////////////
int main(int argc, char *argv[]) {
- char partition[16];
- argc=0; /* redefined as number of integer arguments */
- for (argv++;*argv;argv++) {
- if ('-' ==(**argv)) {
- switch (*(++(*argv))) {
-
+ char *partition = NULL;
+ int c;
+
+ while((c = getopt(argc, argv, "VdafmDnp:S:s")) != EOF) switch(c) {
case 'V':
display_version();
exit(0);
@@ -603,7 +604,7 @@ int main(int argc, char *argv[]) {
fork_format();
exit(0);
case 'm':
- statMode |= SLABSTAT;
+ statMode |= SLABSTAT;
break;
case 'D':
statMode |= DISKSUMSTAT;
@@ -614,53 +615,40 @@ int main(int argc, char *argv[]) {
break;
case 'p':
statMode |= PARTITIONSTAT;
- if (argv[1]){
- char *cp = *++argv;
- if(!memcmp(cp,"/dev/",5)) cp += 5;
- snprintf(partition, sizeof partition, "%s", cp);
- }else{
- fprintf(stderr, "-p requires an argument\n");
- exit(EXIT_FAILURE);
- }
+ partition = optarg;
+ if (memcmp(partition, "/dev/", 5) == 0) partition += 5;
break;
case 'S':
- if (argv[1]){
- ++argv;
- if (!strcmp(*argv, "k")) dataUnit=UNIT_k;
- else if (!strcmp(*argv, "K")) dataUnit=UNIT_K;
- else if (!strcmp(*argv, "m")) dataUnit=UNIT_m;
- else if (!strcmp(*argv, "M")) dataUnit=UNIT_M;
- else {fprintf(stderr, "-S requires k, K, m or M (default is kb)\n");
- exit(EXIT_FAILURE);
- }
- strcpy(szDataUnit, *argv);
- }else {fprintf(stderr, "-S requires an argument\n");
- exit(EXIT_FAILURE);
- }
+ switch(optarg[0]) {
+ case 'b': case 'B': dataUnit = UNIT_B; break;
+ case 'k': dataUnit = UNIT_k; break;
+ case 'K': dataUnit = UNIT_K; break;
+ case 'm': dataUnit = UNIT_m; break;
+ case 'M': dataUnit = UNIT_M; break;
+ default:
+ fprintf(stderr, "-S requires k, K, m or M (default is kb)\n");
+ exit(EXIT_FAILURE);
+ }
+ szDataUnit[0] = optarg[0];
break;
case 's':
- statMode |= VMSUMSTAT;
+ statMode |= VMSUMSTAT;
break;
default:
/* no other aguments defined yet. */
usage();
- }
- }else{
- argc++;
- switch (argc) {
- case 1:
- if ((sleep_time = atoi(*argv)) == 0)
+ }
+
+ if (optind < argc) {
+ if ((sleep_time = atoi(argv[optind++])) == 0)
usage();
- num_updates = ULONG_MAX;
- break;
- case 2:
- num_updates = atol(*argv);
- break;
- default:
- usage();
- } /* switch */
+ num_updates = ULONG_MAX;
}
-}
+ if (optind < argc)
+ num_updates = atol(argv[optind++]);
+ if (optind < argc)
+ usage();
+
if (moreheaders) {
int tmp=winhi()-3;
height=((tmp>0)?tmp:22);