[vlc-devel] [PATCH] access: add a default pf_control for directory accesses
Thomas Guillem
thomas at gllm.fr
Wed Jun 3 12:00:21 CEST 2015
---
include/vlc_access.h | 28 ++++++++++++++++++++++++++++
modules/access/directory.c | 2 +-
modules/access/dsm/access.c | 4 ++--
modules/access/ftp.c | 2 +-
modules/access/sftp.c | 2 +-
modules/access/smb.c | 2 +-
modules/services_discovery/upnp.cpp | 2 +-
7 files changed, 35 insertions(+), 7 deletions(-)
diff --git a/include/vlc_access.h b/include/vlc_access.h
index 1adf669..94c1e70 100644
--- a/include/vlc_access.h
+++ b/include/vlc_access.h
@@ -186,6 +186,34 @@ VLC_API input_thread_t * access_GetParentInput( access_t *p_access ) VLC_USED;
if( !p_sys ) return VLC_ENOMEM; \
} while(0);
+static inline int DirectoryControl( access_t *p_access, int i_query,
+ va_list args )
+{
+ VLC_UNUSED( p_access );
+
+ switch( i_query )
+ {
+ case ACCESS_CAN_SEEK:
+ case ACCESS_CAN_FASTSEEK:
+ case ACCESS_CAN_PAUSE:
+ case ACCESS_CAN_CONTROL_PACE:
+ *va_arg( args, bool* ) = false;
+ break;
+ case ACCESS_GET_PTS_DELAY:
+ *va_arg( args, int64_t * ) = 0;
+ break;
+ default:
+ return VLC_EGENERIC;
+ }
+ return VLC_SUCCESS;
+}
+
+#define ACCESS_SET_DIRECTORY_CALLBACK( readdir ) \
+ do { \
+ p_access->pf_readdir = readdir; \
+ p_access->pf_control = DirectoryControl; \
+ } while(0)
+
/**
* @}
*/
diff --git a/modules/access/directory.c b/modules/access/directory.c
index 87b5b33..5814b78 100644
--- a/modules/access/directory.c
+++ b/modules/access/directory.c
@@ -92,7 +92,7 @@ int DirOpen (vlc_object_t *p_this)
}
p_access->p_sys->p_dir = p_dir;
p_access->p_sys->psz_base_uri = psz_base_uri;
- p_access->pf_readdir = DirRead;
+ ACCESS_SET_DIRECTORY_CALLBACK( DirRead );
return VLC_SUCCESS;
}
diff --git a/modules/access/dsm/access.c b/modules/access/dsm/access.c
index 8e7fcdd..1b2d6ce 100644
--- a/modules/access/dsm/access.c
+++ b/modules/access/dsm/access.c
@@ -699,10 +699,10 @@ static int BrowserInit( access_t *p_access )
access_sys_t *p_sys = p_access->p_sys;
if( p_sys->psz_share == NULL )
- p_access->pf_readdir = BrowseShare;
+ ACCESS_SET_DIRECTORY_CALLBACK( BrowseShare );
else
{
- p_access->pf_readdir = BrowseDirectory;
+ ACCESS_SET_DIRECTORY_CALLBACK( BrowseDirectory );
p_access->info.b_dir_can_loop = true;
}
diff --git a/modules/access/ftp.c b/modules/access/ftp.c
index 096d54c..9642a06 100644
--- a/modules/access/ftp.c
+++ b/modules/access/ftp.c
@@ -667,7 +667,7 @@ static int InOpen( vlc_object_t *p_this )
if( b_directory )
{
- p_access->pf_readdir = DirRead;
+ ACCESS_SET_DIRECTORY_CALLBACK( DirRead );
p_access->info.b_dir_can_loop = true;
} else
ACCESS_SET_CALLBACKS( Read, NULL, Control, Seek ); \
diff --git a/modules/access/sftp.c b/modules/access/sftp.c
index 740da6b..7d2e913 100644
--- a/modules/access/sftp.c
+++ b/modules/access/sftp.c
@@ -295,7 +295,7 @@ static int Open( vlc_object_t* p_this )
/* Open the given directory */
p_sys->file = libssh2_sftp_opendir( p_sys->sftp_session, psz_path );
- p_access->pf_readdir = DirRead;
+ ACCESS_SET_DIRECTORY_CALLBACK( DirRead );
p_access->info.b_dir_can_loop = true;
if( p_sys->file )
diff --git a/modules/access/smb.c b/modules/access/smb.c
index 3aa9902..e3cca52 100644
--- a/modules/access/smb.c
+++ b/modules/access/smb.c
@@ -252,7 +252,7 @@ static int Open( vlc_object_t *p_this )
#ifdef _WIN32
return VLC_EGENERIC;
#else
- p_access->pf_readdir = DirRead;
+ ACCESS_SET_DIRECTORY_CALLBACK( DirRead );
p_access->info.b_dir_can_loop = true;
i_smb = smbc_opendir( psz_uri );
i_size = 0;
diff --git a/modules/services_discovery/upnp.cpp b/modules/services_discovery/upnp.cpp
index 4f5aaf8..4dbd619 100644
--- a/modules/services_discovery/upnp.cpp
+++ b/modules/services_discovery/upnp.cpp
@@ -838,7 +838,7 @@ static int Open( vlc_object_t *p_this )
return VLC_EGENERIC;
}
- p_access->pf_readdir = ReadDirectory;
+ ACCESS_SET_DIRECTORY_CALLBACK( ReadDirectory );
p_access->info.b_dir_sorted = true;
p_access->info.b_dir_can_loop = true;
--
2.1.4
More information about the vlc-devel
mailing list