}
+/*
+ *-----------------------------------------------------------------------------
+ *
+ * WiperOpenMountFile --
+ *
+ * Open mount file /etc/mtab or /proc/mounts.
+ *
+ * Results:
+ * MNTHANDLE on success.
+ * NULL on failure.
+ *
+ * Side Effects:
+ * None
+ *
+ *-----------------------------------------------------------------------------
+ */
+
+static MNTHANDLE
+WiperOpenMountFile(void)
+{
+ MNTHANDLE fp;
+
+ fp = OPEN_MNTFILE("r");
+ if (fp == NULL) {
+#if defined(__linux__)
+#define PROC_MOUNTS "/proc/mounts"
+ if (errno == ENOENT && strcmp(MNTFILE, PROC_MOUNTS) != 0) {
+ /*
+ * Try /proc/mounts if /etc/mtab is not available.
+ */
+ fp = Posix_Setmntent(PROC_MOUNTS, "r");
+ if (fp == NULL) {
+ Log("Could not open %s (%d)\n", PROC_MOUNTS, errno);
+ }
+ return fp;
+ }
+#endif
+ Log("Could not open %s (%d)\n", MNTFILE, errno);
+ }
+
+ return fp;
+}
+
+
/*
*-----------------------------------------------------------------------------
*
ASSERT(initDone);
- fp = OPEN_MNTFILE("r");
+ fp = WiperOpenMountFile();
if (fp == NULL) {
- Log("Could not open %s\n", MNTFILE);
return NULL;
}
DblLnkLst_Init(&pl->link);
- /* Basically call functions to parse /etc/mtab ... */
- fp = OPEN_MNTFILE("r");
+ /* Basically call functions to parse mounts table */
+ fp = WiperOpenMountFile();
if (fp == NULL) {
- Log("Unable to open mount file.\n");
return FALSE;
}