[mythtv] MythTV 0.15 Port for FreeBSD
Stacey Son
mythdev at son.org
Fri Jun 4 10:42:09 EDT 2004
Here is a patch to mythmediamonitor.cpp that I believe will work on both
linux and freebsd... Basicly, it changes the code so it uses
getfsent(3) instead of getmntent(3).
-stacey.
-------------- next part --------------
Index: ./libs/libmyth/mythmediamonitor.cpp
===================================================================
RCS file: /var/lib/mythcvs/mythtv/libs/libmyth/mythmediamonitor.cpp,v
retrieving revision 1.4
diff -u -r1.4 mythmediamonitor.cpp
--- ./libs/libmyth/mythmediamonitor.cpp 4 Jun 2004 02:31:22 -0000 1.4
+++ ./libs/libmyth/mythmediamonitor.cpp 4 Jun 2004 13:50:36 -0000
@@ -5,8 +5,10 @@
#include <fcntl.h>
#include <dirent.h>
#include <cstdio>
-#include <mntent.h>
+#include <fstab.h>
#include <iostream>
+#include <sys/types.h>
+#include <sys/stat.h>
#include <unistd.h>
#include "mythcontext.h"
@@ -17,7 +19,11 @@
#endif
#ifndef MNTTYPE_ISO9660
+#ifdef linux
#define MNTTYPE_ISO9660 "iso9660"
+#elif defined(__FreeBSD__)
+#define MNTTYPE_ISO9660 "cd9660"
+#endif
#endif
#ifndef MNTTYPE_UDF
@@ -69,24 +75,24 @@
// Loop through the file system table and add any supported devices.
bool MediaMonitor::addFSTab()
{
- struct mntent * mep = NULL;
- FILE* vt = NULL;
+ struct fstab * mep = NULL;
// Attempt to open the file system descriptor entry.
- if ((vt = setmntent("/etc/fstab", "r")) == NULL)
+ if (!setfsent())
{
- perror("setmntent");
- cerr << "MediaMonitor::addFSTab - Failed to open /etc/fstab for "
- "reading." << endl;
+ perror("setfsent");
+ cerr << "MediaMonitor::addFSTab - Failed to open "
+ _PATH_FSTAB
+ " for reading." << endl;
return false;
}
else
{
// Add all the entries
- while ((mep = getmntent(vt))!=NULL)
- addDevice(mep->mnt_fsname);
+ while ((mep = getfsent()) != NULL)
+ addDevice(mep->fs_spec);
- endmntent(vt);
+ endfsent();
}
if (m_Devices.isEmpty())
@@ -112,8 +118,7 @@
MythMediaDevice* pDevice = NULL;
- struct mntent * mep=0;
- FILE* vt;
+ struct fstab * mep = NULL;
char lpath[PATH_MAX];
struct stat sbuf;
bool is_supermount = false;
@@ -125,56 +130,59 @@
lpath[len] = 0;
// Attempt to open the file system descriptor entry.
- if ((vt = setmntent("/etc/fstab", "r")) == NULL)
+ if (!setfsent())
{
- cout << "couldn't open the fstab" << endl;
+ perror("setfsent");
+ cerr << "MediaMonitor::addDevice - Failed to open "
+ _PATH_FSTAB
+ " for reading." << endl;
return false;
}
else
{
// Loop over the file system descriptor entry.
- while ((mep = getmntent(vt)) != NULL)
+ while ((mep = getfsent()) != NULL)
{
// cout << "***************************************************" << endl;
// cout << "devicePath == " << devicePath << endl;
-// cout << "mep->mnt_fsname == " << mep->mnt_fsname << endl;
+// cout << "mep->fs_spec == " << mep->fs_spec << endl;
// cout << "lpath == " << lpath << endl;
-// cout << "strcmp(devicePath, mep->mnt_fsname) == " << strcmp(devicePath, mep->mnt_fsname) << endl;
+// cout << "strcmp(devicePath, mep->fs_spec) == " << strcmp(devicePath, mep->fs_spec) << endl;
// cout << "len ==" << len << endl;
-// cout << "strcmp(lpath, mep->mnt_fsname)==" << strcmp(lpath, mep->mnt_fsname) << endl;
+// cout << "strcmp(lpath, mep->fs_spec)==" << strcmp(lpath, mep->fs_spec) << endl;
// cout <<endl << endl;
// Check to see if this is the same as our passed in device.
- if ((strcmp(devicePath, mep->mnt_fsname) != 0) &&
- (len && (strcmp(lpath, mep->mnt_fsname) != 0)))
+ if ((strcmp(devicePath, mep->fs_spec) != 0) &&
+ (len && (strcmp(lpath, mep->fs_spec) != 0)))
continue;
- stat(mep->mnt_fsname, &sbuf);
+ stat(mep->fs_spec, &sbuf);
- if (((strstr(mep->mnt_opts, "owner") &&
- (sbuf.st_mode & S_IRUSR)) || strstr(mep->mnt_opts, "user")) &&
- (strstr(mep->mnt_type, MNTTYPE_ISO9660) ||
- strstr(mep->mnt_type, MNTTYPE_UDF) ||
- strstr(mep->mnt_type, MNTTYPE_AUTO)))
+ if (((strstr(mep->fs_mntops, "owner") &&
+ (sbuf.st_mode & S_IRUSR)) || strstr(mep->fs_mntops, "user")) &&
+ (strstr(mep->fs_vfstype, MNTTYPE_ISO9660) ||
+ strstr(mep->fs_vfstype, MNTTYPE_UDF) ||
+ strstr(mep->fs_vfstype, MNTTYPE_AUTO)))
{
break;
}
- if (strstr(mep->mnt_opts, MNTTYPE_ISO9660) &&
- strstr(mep->mnt_type, MNTTYPE_SUPERMOUNT))
+ if (strstr(mep->fs_mntops, MNTTYPE_ISO9660) &&
+ strstr(mep->fs_vfstype, MNTTYPE_SUPERMOUNT))
{
is_supermount = true;
break;
}
}
- endmntent(vt);
+ endfsent();
}
if (mep)
{
- if (strstr(mep->mnt_opts, MNTTYPE_ISO9660) ||
- strstr(mep->mnt_type, MNTTYPE_ISO9660))
+ if (strstr(mep->fs_mntops, MNTTYPE_ISO9660) ||
+ strstr(mep->fs_vfstype, MNTTYPE_ISO9660))
{
is_cdrom = true;
//cout << "Device is a CDROM" << endl;
@@ -183,14 +191,14 @@
if (!is_supermount)
{
if (is_cdrom)
- pDevice = MythCDROM::get(this, QString(mep->mnt_fsname),
+ pDevice = MythCDROM::get(this, QString(mep->fs_spec),
is_supermount, m_AllowEject);
}
else
{
char *dev;
int len = 0;
- dev = strstr(mep->mnt_opts, SUPER_OPT_DEV);
+ dev = strstr(mep->fs_mntops, SUPER_OPT_DEV);
dev += sizeof(SUPER_OPT_DEV)-1;
while (dev[len] != ',' && dev[len] != ' ' && dev[len] != 0)
len++;
@@ -210,7 +218,7 @@
if (pDevice)
{
- pDevice->setMountPath(mep->mnt_dir);
+ pDevice->setMountPath(mep->fs_file);
VERBOSE(VB_ALL, QString("Mediamonitor: Adding %1")
.arg(pDevice->getDevicePath()));
if (pDevice->testMedia() == MEDIAERR_OK)
More information about the mythtv-dev
mailing list