diff options
-rw-r--r-- | lib/mountlist.c | 92 | ||||
-rw-r--r-- | plugins/check_disk.c | 31 |
2 files changed, 68 insertions, 55 deletions
diff --git a/lib/mountlist.c b/lib/mountlist.c index b667c443..d171858a 100644 --- a/lib/mountlist.c +++ b/lib/mountlist.c | |||
@@ -35,9 +35,9 @@ void free (); | |||
35 | #ifndef strstr | 35 | #ifndef strstr |
36 | char *strstr (); | 36 | char *strstr (); |
37 | #endif | 37 | #endif |
38 | char *xmalloc (); | 38 | /* char *xmalloc (); */ |
39 | char *xrealloc (); | 39 | /* char *realloc (); */ |
40 | char *xstrdup (); | 40 | /* char *xstrdup (); */ |
41 | 41 | ||
42 | #include <errno.h> | 42 | #include <errno.h> |
43 | #ifndef errno | 43 | #ifndef errno |
@@ -307,10 +307,10 @@ read_filesystem_list (int need_fs_type) | |||
307 | return NULL; | 307 | return NULL; |
308 | for (p = mntlist; p; p = p->next) { | 308 | for (p = mntlist; p; p = p->next) { |
309 | mnt = p->ment; | 309 | mnt = p->ment; |
310 | me = (struct mount_entry*) xmalloc(sizeof (struct mount_entry)); | 310 | me = (struct mount_entry*) malloc(sizeof (struct mount_entry)); |
311 | me->me_devname = xstrdup(mnt->mnt_fsname); | 311 | me->me_devname = strdup(mnt->mnt_fsname); |
312 | me->me_mountdir = xstrdup(mnt->mnt_dir); | 312 | me->me_mountdir = strdup(mnt->mnt_dir); |
313 | me->me_type = xstrdup(mnt->mnt_type); | 313 | me->me_type = strdup(mnt->mnt_type); |
314 | me->me_dummy = ME_DUMMY (me->me_devname, me->me_type); | 314 | me->me_dummy = ME_DUMMY (me->me_devname, me->me_type); |
315 | me->me_remote = ME_REMOTE (me->me_devname, me->me_type); | 315 | me->me_remote = ME_REMOTE (me->me_devname, me->me_type); |
316 | me->me_dev = -1; | 316 | me->me_dev = -1; |
@@ -334,10 +334,10 @@ read_filesystem_list (int need_fs_type) | |||
334 | 334 | ||
335 | while ((mnt = getmntent (fp))) | 335 | while ((mnt = getmntent (fp))) |
336 | { | 336 | { |
337 | me = (struct mount_entry *) xmalloc (sizeof (struct mount_entry)); | 337 | me = (struct mount_entry *) malloc (sizeof (struct mount_entry)); |
338 | me->me_devname = xstrdup (mnt->mnt_fsname); | 338 | me->me_devname = strdup (mnt->mnt_fsname); |
339 | me->me_mountdir = xstrdup (mnt->mnt_dir); | 339 | me->me_mountdir = strdup (mnt->mnt_dir); |
340 | me->me_type = xstrdup (mnt->mnt_type); | 340 | me->me_type = strdup (mnt->mnt_type); |
341 | me->me_dummy = ME_DUMMY (me->me_devname, me->me_type); | 341 | me->me_dummy = ME_DUMMY (me->me_devname, me->me_type); |
342 | me->me_remote = ME_REMOTE (me->me_devname, me->me_type); | 342 | me->me_remote = ME_REMOTE (me->me_devname, me->me_type); |
343 | devopt = strstr (mnt->mnt_opts, "dev="); | 343 | devopt = strstr (mnt->mnt_opts, "dev="); |
@@ -373,9 +373,9 @@ read_filesystem_list (int need_fs_type) | |||
373 | { | 373 | { |
374 | char *fs_type = fsp_to_string (fsp); | 374 | char *fs_type = fsp_to_string (fsp); |
375 | 375 | ||
376 | me = (struct mount_entry *) xmalloc (sizeof (struct mount_entry)); | 376 | me = (struct mount_entry *) malloc (sizeof (struct mount_entry)); |
377 | me->me_devname = xstrdup (fsp->f_mntfromname); | 377 | me->me_devname = strdup (fsp->f_mntfromname); |
378 | me->me_mountdir = xstrdup (fsp->f_mntonname); | 378 | me->me_mountdir = strdup (fsp->f_mntonname); |
379 | me->me_type = fs_type; | 379 | me->me_type = fs_type; |
380 | me->me_dummy = ME_DUMMY (me->me_devname, me->me_type); | 380 | me->me_dummy = ME_DUMMY (me->me_devname, me->me_type); |
381 | me->me_remote = ME_REMOTE (me->me_devname, me->me_type); | 381 | me->me_remote = ME_REMOTE (me->me_devname, me->me_type); |
@@ -398,9 +398,9 @@ read_filesystem_list (int need_fs_type) | |||
398 | 0 < (val = getmnt (&offset, &fsd, sizeof (fsd), NOSTAT_MANY, | 398 | 0 < (val = getmnt (&offset, &fsd, sizeof (fsd), NOSTAT_MANY, |
399 | (char *) 0))) | 399 | (char *) 0))) |
400 | { | 400 | { |
401 | me = (struct mount_entry *) xmalloc (sizeof (struct mount_entry)); | 401 | me = (struct mount_entry *) malloc (sizeof (struct mount_entry)); |
402 | me->me_devname = xstrdup (fsd.fd_req.devname); | 402 | me->me_devname = strdup (fsd.fd_req.devname); |
403 | me->me_mountdir = xstrdup (fsd.fd_req.path); | 403 | me->me_mountdir = strdup (fsd.fd_req.path); |
404 | me->me_type = gt_names[fsd.fd_req.fstype]; | 404 | me->me_type = gt_names[fsd.fd_req.fstype]; |
405 | me->me_dummy = ME_DUMMY (me->me_devname, me->me_type); | 405 | me->me_dummy = ME_DUMMY (me->me_devname, me->me_type); |
406 | me->me_remote = ME_REMOTE (me->me_devname, me->me_type); | 406 | me->me_remote = ME_REMOTE (me->me_devname, me->me_type); |
@@ -458,10 +458,10 @@ read_filesystem_list (int need_fs_type) | |||
458 | continue; | 458 | continue; |
459 | 459 | ||
460 | if (strcmp (d->d_name, ".") == 0) | 460 | if (strcmp (d->d_name, ".") == 0) |
461 | name = xstrdup ("/"); | 461 | name = strdup ("/"); |
462 | else | 462 | else |
463 | { | 463 | { |
464 | name = xmalloc (1 + strlen (d->d_name) + 1); | 464 | name = malloc (1 + strlen (d->d_name) + 1); |
465 | name[0] = '/'; | 465 | name[0] = '/'; |
466 | strcpy (name + 1, d->d_name); | 466 | strcpy (name + 1, d->d_name); |
467 | } | 467 | } |
@@ -470,7 +470,7 @@ read_filesystem_list (int need_fs_type) | |||
470 | { | 470 | { |
471 | struct rootdir_entry *re; | 471 | struct rootdir_entry *re; |
472 | 472 | ||
473 | re = (struct rootdir_entry *) xmalloc (sizeof (struct rootdir_entry)); | 473 | re = (struct rootdir_entry *) malloc (sizeof (struct rootdir_entry)); |
474 | re->name = name; | 474 | re->name = name; |
475 | re->dev = statbuf.st_dev; | 475 | re->dev = statbuf.st_dev; |
476 | re->ino = statbuf.st_ino; | 476 | re->ino = statbuf.st_ino; |
@@ -496,10 +496,10 @@ read_filesystem_list (int need_fs_type) | |||
496 | if (re->dev == fi.dev && re->ino == fi.root) | 496 | if (re->dev == fi.dev && re->ino == fi.root) |
497 | break; | 497 | break; |
498 | 498 | ||
499 | me = (struct mount_entry *) xmalloc (sizeof (struct mount_entry)); | 499 | me = (struct mount_entry *) malloc (sizeof (struct mount_entry)); |
500 | me->me_devname = xstrdup (fi.device_name[0] != '\0' ? fi.device_name : fi.fsh_name); | 500 | me->me_devname = strdup (fi.device_name[0] != '\0' ? fi.device_name : fi.fsh_name); |
501 | me->me_mountdir = xstrdup (re != NULL ? re->name : fi.fsh_name); | 501 | me->me_mountdir = strdup (re != NULL ? re->name : fi.fsh_name); |
502 | me->me_type = xstrdup (fi.fsh_name); | 502 | me->me_type = strdup (fi.fsh_name); |
503 | me->me_dev = fi.dev; | 503 | me->me_dev = fi.dev; |
504 | me->me_dummy = 0; | 504 | me->me_dummy = 0; |
505 | me->me_remote = (fi.flags & B_FS_IS_SHARED) != 0; | 505 | me->me_remote = (fi.flags & B_FS_IS_SHARED) != 0; |
@@ -530,7 +530,7 @@ read_filesystem_list (int need_fs_type) | |||
530 | return (NULL); | 530 | return (NULL); |
531 | 531 | ||
532 | bufsize = (1 + numsys) * sizeof (struct statfs); | 532 | bufsize = (1 + numsys) * sizeof (struct statfs); |
533 | stats = (struct statfs *)xmalloc (bufsize); | 533 | stats = (struct statfs *)malloc (bufsize); |
534 | numsys = getfsstat (stats, bufsize, MNT_WAIT); | 534 | numsys = getfsstat (stats, bufsize, MNT_WAIT); |
535 | 535 | ||
536 | if (numsys < 0) | 536 | if (numsys < 0) |
@@ -541,9 +541,9 @@ read_filesystem_list (int need_fs_type) | |||
541 | 541 | ||
542 | for (counter = 0; counter < numsys; counter++) | 542 | for (counter = 0; counter < numsys; counter++) |
543 | { | 543 | { |
544 | me = (struct mount_entry *) xmalloc (sizeof (struct mount_entry)); | 544 | me = (struct mount_entry *) malloc (sizeof (struct mount_entry)); |
545 | me->me_devname = xstrdup (stats[counter].f_mntfromname); | 545 | me->me_devname = strdup (stats[counter].f_mntfromname); |
546 | me->me_mountdir = xstrdup (stats[counter].f_mntonname); | 546 | me->me_mountdir = strdup (stats[counter].f_mntonname); |
547 | me->me_type = mnt_names[stats[counter].f_type]; | 547 | me->me_type = mnt_names[stats[counter].f_type]; |
548 | me->me_dummy = ME_DUMMY (me->me_devname, me->me_type); | 548 | me->me_dummy = ME_DUMMY (me->me_devname, me->me_type); |
549 | me->me_remote = ME_REMOTE (me->me_devname, me->me_type); | 549 | me->me_remote = ME_REMOTE (me->me_devname, me->me_type); |
@@ -570,15 +570,15 @@ read_filesystem_list (int need_fs_type) | |||
570 | 570 | ||
571 | while (fread (&mnt, sizeof mnt, 1, fp) > 0) | 571 | while (fread (&mnt, sizeof mnt, 1, fp) > 0) |
572 | { | 572 | { |
573 | me = (struct mount_entry *) xmalloc (sizeof (struct mount_entry)); | 573 | me = (struct mount_entry *) malloc (sizeof (struct mount_entry)); |
574 | # ifdef GETFSTYP /* SVR3. */ | 574 | # ifdef GETFSTYP /* SVR3. */ |
575 | me->me_devname = xstrdup (mnt.mt_dev); | 575 | me->me_devname = strdup (mnt.mt_dev); |
576 | # else | 576 | # else |
577 | me->me_devname = xmalloc (strlen (mnt.mt_dev) + 6); | 577 | me->me_devname = malloc (strlen (mnt.mt_dev) + 6); |
578 | strcpy (me->me_devname, "/dev/"); | 578 | strcpy (me->me_devname, "/dev/"); |
579 | strcpy (me->me_devname + 5, mnt.mt_dev); | 579 | strcpy (me->me_devname + 5, mnt.mt_dev); |
580 | # endif | 580 | # endif |
581 | me->me_mountdir = xstrdup (mnt.mt_filsys); | 581 | me->me_mountdir = strdup (mnt.mt_filsys); |
582 | me->me_dev = (dev_t) -1; /* Magic; means not known yet. */ | 582 | me->me_dev = (dev_t) -1; /* Magic; means not known yet. */ |
583 | me->me_type = ""; | 583 | me->me_type = ""; |
584 | # ifdef GETFSTYP /* SVR3. */ | 584 | # ifdef GETFSTYP /* SVR3. */ |
@@ -589,7 +589,7 @@ read_filesystem_list (int need_fs_type) | |||
589 | 589 | ||
590 | if (statfs (me->me_mountdir, &fsd, sizeof fsd, 0) != -1 | 590 | if (statfs (me->me_mountdir, &fsd, sizeof fsd, 0) != -1 |
591 | && sysfs (GETFSTYP, fsd.f_fstyp, typebuf) != -1) | 591 | && sysfs (GETFSTYP, fsd.f_fstyp, typebuf) != -1) |
592 | me->me_type = xstrdup (typebuf); | 592 | me->me_type = strdup (typebuf); |
593 | } | 593 | } |
594 | # endif | 594 | # endif |
595 | me->me_dummy = ME_DUMMY (me->me_devname, me->me_type); | 595 | me->me_dummy = ME_DUMMY (me->me_devname, me->me_type); |
@@ -618,10 +618,10 @@ read_filesystem_list (int need_fs_type) | |||
618 | struct mntent **mnttbl=getmnttbl(),**ent; | 618 | struct mntent **mnttbl=getmnttbl(),**ent; |
619 | for (ent=mnttbl;*ent;ent++) | 619 | for (ent=mnttbl;*ent;ent++) |
620 | { | 620 | { |
621 | me = (struct mount_entry *) xmalloc (sizeof (struct mount_entry)); | 621 | me = (struct mount_entry *) malloc (sizeof (struct mount_entry)); |
622 | me->me_devname = xstrdup ( (*ent)->mt_resource); | 622 | me->me_devname = strdup ( (*ent)->mt_resource); |
623 | me->me_mountdir = xstrdup( (*ent)->mt_directory); | 623 | me->me_mountdir = strdup( (*ent)->mt_directory); |
624 | me->me_type = xstrdup ((*ent)->mt_fstype); | 624 | me->me_type = strdup ((*ent)->mt_fstype); |
625 | me->me_dummy = ME_DUMMY (me->me_devname, me->me_type); | 625 | me->me_dummy = ME_DUMMY (me->me_devname, me->me_type); |
626 | me->me_remote = ME_REMOTE (me->me_devname, me->me_type); | 626 | me->me_remote = ME_REMOTE (me->me_devname, me->me_type); |
627 | me->me_dev = (dev_t) -1; /* Magic; means not known yet. */ | 627 | me->me_dev = (dev_t) -1; /* Magic; means not known yet. */ |
@@ -679,10 +679,10 @@ read_filesystem_list (int need_fs_type) | |||
679 | { | 679 | { |
680 | while ((ret = getmntent (fp, &mnt)) == 0) | 680 | while ((ret = getmntent (fp, &mnt)) == 0) |
681 | { | 681 | { |
682 | me = (struct mount_entry *) xmalloc (sizeof (struct mount_entry)); | 682 | me = (struct mount_entry *) malloc (sizeof (struct mount_entry)); |
683 | me->me_devname = xstrdup (mnt.mnt_special); | 683 | me->me_devname = strdup (mnt.mnt_special); |
684 | me->me_mountdir = xstrdup (mnt.mnt_mountp); | 684 | me->me_mountdir = strdup (mnt.mnt_mountp); |
685 | me->me_type = xstrdup (mnt.mnt_fstype); | 685 | me->me_type = strdup (mnt.mnt_fstype); |
686 | me->me_dummy = MNT_IGNORE (&mnt) != 0; | 686 | me->me_dummy = MNT_IGNORE (&mnt) != 0; |
687 | me->me_remote = ME_REMOTE (me->me_devname, me->me_type); | 687 | me->me_remote = ME_REMOTE (me->me_devname, me->me_type); |
688 | me->me_dev = (dev_t) -1; /* Magic; means not known yet. */ | 688 | me->me_dev = (dev_t) -1; /* Magic; means not known yet. */ |
@@ -714,7 +714,7 @@ read_filesystem_list (int need_fs_type) | |||
714 | 714 | ||
715 | /* Ask how many bytes to allocate for the mounted filesystem info. */ | 715 | /* Ask how many bytes to allocate for the mounted filesystem info. */ |
716 | mntctl (MCTL_QUERY, sizeof bufsize, (struct vmount *) &bufsize); | 716 | mntctl (MCTL_QUERY, sizeof bufsize, (struct vmount *) &bufsize); |
717 | entries = xmalloc (bufsize); | 717 | entries = malloc (bufsize); |
718 | 718 | ||
719 | /* Get the list of mounted filesystems. */ | 719 | /* Get the list of mounted filesystems. */ |
720 | mntctl (MCTL_QUERY, bufsize, (struct vmount *) entries); | 720 | mntctl (MCTL_QUERY, bufsize, (struct vmount *) entries); |
@@ -734,7 +734,7 @@ read_filesystem_list (int need_fs_type) | |||
734 | /* Prepend the remote pathname. */ | 734 | /* Prepend the remote pathname. */ |
735 | host = thisent + vmp->vmt_data[VMT_HOSTNAME].vmt_off; | 735 | host = thisent + vmp->vmt_data[VMT_HOSTNAME].vmt_off; |
736 | path = thisent + vmp->vmt_data[VMT_OBJECT].vmt_off; | 736 | path = thisent + vmp->vmt_data[VMT_OBJECT].vmt_off; |
737 | me->me_devname = xmalloc (strlen (host) + strlen (path) + 2); | 737 | me->me_devname = malloc (strlen (host) + strlen (path) + 2); |
738 | strcpy (me->me_devname, host); | 738 | strcpy (me->me_devname, host); |
739 | strcat (me->me_devname, ":"); | 739 | strcat (me->me_devname, ":"); |
740 | strcat (me->me_devname, path); | 740 | strcat (me->me_devname, path); |
@@ -742,11 +742,11 @@ read_filesystem_list (int need_fs_type) | |||
742 | else | 742 | else |
743 | { | 743 | { |
744 | me->me_remote = 0; | 744 | me->me_remote = 0; |
745 | me->me_devname = xstrdup (thisent + | 745 | me->me_devname = strdup (thisent + |
746 | vmp->vmt_data[VMT_OBJECT].vmt_off); | 746 | vmp->vmt_data[VMT_OBJECT].vmt_off); |
747 | } | 747 | } |
748 | me->me_mountdir = xstrdup (thisent + vmp->vmt_data[VMT_STUB].vmt_off); | 748 | me->me_mountdir = strdup (thisent + vmp->vmt_data[VMT_STUB].vmt_off); |
749 | me->me_type = xstrdup (fstype_to_string (vmp->vmt_gfstype)); | 749 | me->me_type = strdup (fstype_to_string (vmp->vmt_gfstype)); |
750 | options = thisent + vmp->vmt_data[VMT_ARGS].vmt_off; | 750 | options = thisent + vmp->vmt_data[VMT_ARGS].vmt_off; |
751 | ignore = strstr (options, "ignore"); | 751 | ignore = strstr (options, "ignore"); |
752 | me->me_dummy = (ignore | 752 | me->me_dummy = (ignore |
diff --git a/plugins/check_disk.c b/plugins/check_disk.c index 2558f6d3..f9a9a847 100644 --- a/plugins/check_disk.c +++ b/plugins/check_disk.c | |||
@@ -63,6 +63,7 @@ const char *options = "\ | |||
63 | #include "utils.h" | 63 | #include "utils.h" |
64 | #include <stdarg.h> | 64 | #include <stdarg.h> |
65 | #include "../lib/fsusage.h" | 65 | #include "../lib/fsusage.h" |
66 | #include "../lib/mountlist.h" | ||
66 | 67 | ||
67 | /* If nonzero, show inode information. */ | 68 | /* If nonzero, show inode information. */ |
68 | static int inode_format; | 69 | static int inode_format; |
@@ -146,6 +147,8 @@ int verbose = 0; | |||
146 | int erronly = FALSE; | 147 | int erronly = FALSE; |
147 | int display_mntp = FALSE; | 148 | int display_mntp = FALSE; |
148 | 149 | ||
150 | /* Linked list of mounted filesystems. */ | ||
151 | static struct mount_entry *mount_list; | ||
149 | 152 | ||
150 | int | 153 | int |
151 | main (int argc, char **argv) | 154 | main (int argc, char **argv) |
@@ -162,22 +165,32 @@ main (int argc, char **argv) | |||
162 | char mntp[MAX_INPUT_BUFFER]; | 165 | char mntp[MAX_INPUT_BUFFER]; |
163 | char *output = ""; | 166 | char *output = ""; |
164 | 167 | ||
168 | struct mount_entry *me; | ||
165 | struct fs_usage fsp; | 169 | struct fs_usage fsp; |
166 | char *disk; | 170 | char *disk; |
167 | 171 | ||
168 | if (process_arguments (argc, argv) != OK) | 172 | if (process_arguments (argc, argv) != OK) |
169 | usage ("Could not parse arguments\n"); | 173 | usage ("Could not parse arguments\n"); |
170 | 174 | ||
171 | get_fs_usage (path, disk, &fsp); | 175 | mount_list = read_filesystem_list (0); |
176 | |||
177 | for (me = mount_list; me; me = me->me_next) { | ||
178 | get_fs_usage (me->me_mountdir, me->me_devname, &fsp); | ||
179 | if (fsp.fsu_blocks && strcmp ("none", me->me_mountdir)) { | ||
180 | usp = (fsp.fsu_blocks - fsp.fsu_bavail) * 100 / fsp.fsu_blocks; | ||
181 | disk_result = check_disk (usp, fsp.fsu_bavail); | ||
182 | result = max_state (disk_result, result); | ||
183 | asprintf (&output, "%s %llu of %llu kB (%2.0f%%) free (%d-byte blocks) on %s (%s) %d\n", | ||
184 | output, | ||
185 | fsp.fsu_bavail*fsp.fsu_blocksize/1024, | ||
186 | fsp.fsu_blocks*fsp.fsu_blocksize/1024, | ||
187 | (double)fsp.fsu_bavail*100/fsp.fsu_blocks, | ||
188 | fsp.fsu_blocksize, | ||
189 | me->me_mountdir, | ||
190 | me->me_type, usp); | ||
191 | } | ||
192 | } | ||
172 | 193 | ||
173 | usp = (fsp.fsu_blocks - fsp.fsu_bavail) / fsp.fsu_blocks; | ||
174 | disk_result = check_disk (usp, fsp.fsu_bavail); | ||
175 | result = disk_result; | ||
176 | asprintf (&output, "%llu of %llu kB (%2.0f%%) free (%d-byte blocks)", | ||
177 | fsp.fsu_bavail*fsp.fsu_blocksize/1024, | ||
178 | fsp.fsu_blocks*fsp.fsu_blocksize/1024, | ||
179 | (double)fsp.fsu_bavail*100/fsp.fsu_blocks, | ||
180 | fsp.fsu_blocksize); | ||
181 | 194 | ||
182 | terminate (result, "DISK %s %s\n", state_text (result), output); | 195 | terminate (result, "DISK %s %s\n", state_text (result), output); |
183 | } | 196 | } |