vlc | branch: master | Konstantin Pavlov <[email protected]> | Wed Feb 15 16:30:38 2012 +0400| [565422b6a71f4253cc0d17d65f99b2d921bad31a] | committer: Konstantin Pavlov
Bluray: try to find mount point if block device file is passed. > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=565422b6a71f4253cc0d17d65f99b2d921bad31a --- configure.ac | 2 +- modules/access/bluray.c | 24 ++++++++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletions(-) diff --git a/configure.ac b/configure.ac index 50fdee0..1c8223a 100644 --- a/configure.ac +++ b/configure.ac @@ -707,7 +707,7 @@ AC_CHECK_HEADERS([sys/mount.h], [], [], if test "${SYS}" != "mingw32" -a "${SYS}" != "mingwce"; then AC_CHECK_HEADERS(machine/param.h sys/shm.h) AC_CHECK_HEADERS([linux/version.h linux/dccp.h scsi/scsi.h linux/magic.h]) - AC_CHECK_HEADERS(syslog.h) + AC_CHECK_HEADERS(syslog.h mntent.h) fi # end "${SYS}" != "mingw32" -a "${SYS}" != "mingwce" dnl LP64 and LLP64 architectures had better define ssize_t by themselves... diff --git a/modules/access/bluray.c b/modules/access/bluray.c index 7bfc3f0..2f9ef6f 100644 --- a/modules/access/bluray.c +++ b/modules/access/bluray.c @@ -26,6 +26,10 @@ #include <assert.h> #include <limits.h> /* PATH_MAX */ +#if defined (HAVE_MNTENT_H) && defined(HAVE_SYS_STAT_H) +#include <mntent.h> +#include <sys/stat.h> +#endif #include <vlc_common.h> #include <vlc_plugin.h> @@ -122,6 +126,26 @@ static int blurayOpen( vlc_object_t *object ) bd_path[PATH_MAX - 1] = '\0'; } +#if defined (HAVE_MNTENT_H) && defined (HAVE_SYS_STAT_H) + /* If we're passed a block device, try to convert it to the mount point. */ + struct stat st; + if ( !stat (bd_path, &st)) { + if (S_ISBLK (st.st_mode)) { + FILE* mtab = setmntent ("/proc/self/mounts", "r"); + struct mntent* m; + struct mntent mbuf; + char buf [8192]; + while ((m = getmntent_r (mtab, &mbuf, buf, sizeof(buf))) != NULL) { + if (!strcmp (m->mnt_fsname, bd_path)) { + strncpy (bd_path, m->mnt_dir, sizeof(bd_path)); + bd_path[sizeof(bd_path) - 1] = '\0'; + break; + } + } + endmntent (mtab); + } + } +#endif /* HAVE_MNTENT_H && HAVE_SYS_STAT_H */ p_sys->bluray = bd_open(bd_path, NULL); if (!p_sys->bluray) { free(p_sys); _______________________________________________ vlc-commits mailing list [email protected] http://mailman.videolan.org/listinfo/vlc-commits
