X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Futils_mount.c;h=176714ce8e66d171071771211d4140e09af7e8a2;hb=efe2a48f63ed4042c101f770d64e1c543fea70ad;hp=72ce930130bfb45dbb9b50c78ffdb9a336414f06;hpb=5835a87810b4870c98bf3ab541a376a80c109713;p=collectd.git diff --git a/src/utils_mount.c b/src/utils_mount.c index 72ce9301..176714ce 100644 --- a/src/utils_mount.c +++ b/src/utils_mount.c @@ -1,6 +1,6 @@ /** * collectd - src/utils_mount.c - * Copyright (C) 2005 Niki W. Waibel + * Copyright (C) 2005,2006 Niki W. Waibel * * This program is free software; you can redistribute it and/ * or modify it under the terms of the GNU General Public Li- @@ -29,6 +29,7 @@ #define XFS_SUPER_MAGIC_STR "XFSB" #define XFS_SUPER_MAGIC2_STR "BSFX" #endif + #include "utils_debug.h" #include "utils_mount.h" @@ -51,18 +52,26 @@ # include #endif -#ifndef MNTTAB -# if defined(_PATH_MOUNTED) -# define MNTTAB _PATH_MOUNTED -# elif defined(MNT_MNTTAB) -# define MNTTAB MNT_MNTTAB -# elif defined(MNTTABNAME) -# define MNTTAB MNTTABNAME -# elif defined(KMTAB) -# define MNTTAB KMTAB -# else -# define MNTTAB "/etc/mnttab" -# endif +#if HAVE_PATHS_H +# include +#endif + +#ifdef COLLECTD_MNTTAB +# undef COLLECTD_MNTTAB +#endif + +#if defined(_PATH_MOUNTED) /* glibc */ +# define COLLECTD_MNTTAB _PATH_MOUNTED +#elif defined(MNTTAB) /* Solaris */ +# define COLLECTD_MNTTAB MNTTAB +#elif defined(MNT_MNTTAB) +# define COLLECTD_MNTTAB MNT_MNTTAB +#elif defined(MNTTABNAME) +# define COLLECTD_MNTTAB MNTTABNAME +#elif defined(KMTAB) +# define COLLECTD_MNTTAB KMTAB +#else +# define COLLECTD_MNTTAB "/etc/mnttab" #endif /* *** *** *** ********************************************* *** *** *** */ @@ -362,7 +371,7 @@ static cu_mount_t *cu_mount_listmntent (void) struct mntent *mnt; struct tabmntent *mntlist; - if(listmntent(&mntlist, MNTTAB, NULL, NULL) < 0) { + if(listmntent(&mntlist, COLLECTD_MNTTAB, NULL, NULL) < 0) { DBG("calling listmntent() failed: %s", strerror(errno)); } @@ -420,15 +429,21 @@ static cu_mount_t *cu_mount_getfsstat (void) /* Get the number of mounted file systems */ if ((bufsize = getfsstat (NULL, 0, MNT_NOWAIT)) < 1) + { + DBG ("getfsstat failed: %s", strerror (errno)); return (NULL); + } - if ((buf = (struct statfs *) malloc (bufsize * sizeof (struct statfs))) == NULL) + if ((buf = (struct statfs *) malloc (bufsize * sizeof (struct statfs))) + == NULL) return (NULL); memset (buf, '\0', bufsize * sizeof (struct statfs)); - /* FIXME: If `bufsize' in bytes or structures? */ - if ((num = getfsstat (buf, bufsize, MNT_NOWAIT)) < 1) + /* The bufsize needs to be passed in bytes. Really. This is not in the + * manpage.. -octo */ + if ((num = getfsstat (buf, bufsize * sizeof (struct statfs), MNT_NOWAIT)) < 1) { + DBG ("getfsstat failed: %s", strerror (errno)); free (buf); return (NULL); } @@ -477,8 +492,13 @@ static cu_mount_t *cu_mount_gen_getmntent (void) cu_mount_t *last = NULL; cu_mount_t *new = NULL; - if ((fp = fopen (MNTTAB, "r")) == NULL) + DBG ("(void); COLLECTD_MNTTAB = %s", COLLECTD_MNTTAB); + + if ((fp = fopen (COLLECTD_MNTTAB, "r")) == NULL) + { + syslog (LOG_ERR, "fopen (%s): %s", COLLECTD_MNTTAB, strerror (errno)); return (NULL); + } while (getmntent (fp, &mt) == 0) { @@ -531,8 +551,13 @@ static cu_mount_t *cu_mount_getmntent (void) cu_mount_t *last = NULL; cu_mount_t *new = NULL; - if ((fp = setmntent (MNTTAB, "r")) == NULL) + DBG ("(void); COLLECTD_MNTTAB = %s", COLLECTD_MNTTAB); + + if ((fp = setmntent (COLLECTD_MNTTAB, "r")) == NULL) + { + syslog (LOG_ERR, "setmntent (%s): %s", COLLECTD_MNTTAB, strerror (errno)); return (NULL); + } while ((me = getmntent (fp)) != NULL) { @@ -548,6 +573,9 @@ static cu_mount_t *cu_mount_getmntent (void) new->device = get_device_name (new->options); new->next = NULL; + DBG ("new = {dir = %s, spec_device = %s, type = %s, options = %s, device = %s}", + new->dir, new->spec_device, new->type, new->options, new->device); + /* Append to list */ if (first == NULL) { @@ -563,6 +591,8 @@ static cu_mount_t *cu_mount_getmntent (void) endmntent (fp); + DBG ("return (0x%p)", (void *) first); + return (first); } #endif /* HAVE_GETMNTENT */ @@ -622,6 +652,8 @@ void cu_mount_freelist (cu_mount_t *list) cu_mount_t *this; cu_mount_t *next; + DBG ("(list = 0x%p)", (void *) list); + for (this = list; this != NULL; this = next) { next = this->next;