Merge file and directory plugins
authorRémi Denis-Courmont <remi@remlab.net>
Sat, 16 Jan 2010 10:56:44 +0000 (12:56 +0200)
committerRémi Denis-Courmont <remi@remlab.net>
Sat, 16 Jan 2010 10:56:44 +0000 (12:56 +0200)
modules/access/Modules.am
modules/access/directory.c
modules/access/file.c

index 5ffa49e..061f2b4 100644 (file)
@@ -12,7 +12,15 @@ if HAVE_WIN32
 SUBDIRS += bda dshow
 endif
 
-SOURCES_access_file = file.c
+libfilesystem_plugin_la_SOURCES = \
+       fs.h \
+       file.c \
+       directory.c \
+       fs.c
+libfilesystem_plugin_la_CFLAGS = $(AM_CFLAGS)
+libfilesystem_plugin_la_LIBADD = $(AM_LIBADD)
+libfilesystem_plugin_la_DEPENDENCIES =
+
 SOURCES_access_mmap = mmap.c
 SOURCES_access_directory = directory.c
 SOURCES_access_dv = dv.c
@@ -57,8 +65,7 @@ libaccess_rtmp_plugin_la_LIBADD = $(AM_LIBADD)
 libaccess_rtmp_plugin_la_DEPENDENCIES =
 
 libvlc_LTLIBRARIES += \
-       libaccess_file_plugin.la \
-       libaccess_directory_plugin.la \
+       libfilesystem_plugin.la \
        libaccess_udp_plugin.la \
        libaccess_tcp_plugin.la \
        libaccess_http_plugin.la \
index 12f5636..a0fe15c 100644 (file)
@@ -31,7 +31,7 @@
 #endif
 
 #include <vlc_common.h>
-#include <vlc_plugin.h>
+#include "fs.h"
 #include <vlc_access.h>
 
 #ifdef HAVE_SYS_TYPES_H
@@ -61,57 +61,11 @@ static inline int dirfd (DIR *dir)
 #include <vlc_url.h>
 #include <vlc_strings.h>
 
-/*****************************************************************************
- * Module descriptor
- *****************************************************************************/
-static int  Open ( vlc_object_t * );
-static void Close( vlc_object_t * );
-
-#define RECURSIVE_TEXT N_("Subdirectory behavior")
-#define RECURSIVE_LONGTEXT N_( \
-        "Select whether subdirectories must be expanded.\n" \
-        "none: subdirectories do not appear in the playlist.\n" \
-        "collapse: subdirectories appear but are expanded on first play.\n" \
-        "expand: all subdirectories are expanded.\n" )
-
-static const char *const psz_recursive_list[] = { "none", "collapse", "expand" };
-static const char *const psz_recursive_list_text[] = {
-    N_("none"), N_("collapse"), N_("expand") };
-
-#define IGNORE_TEXT N_("Ignored extensions")
-#define IGNORE_LONGTEXT N_( \
-        "Files with these extensions will not be added to playlist when " \
-        "opening a directory.\n" \
-        "This is useful if you add directories that contain playlist files " \
-        "for instance. Use a comma-separated list of extensions." )
-
-vlc_module_begin ()
-    set_category( CAT_INPUT )
-    set_shortname( N_("Directory" ) )
-    set_subcategory( SUBCAT_INPUT_ACCESS )
-    set_description( N_("Standard filesystem directory input") )
-    set_capability( "access", 55 )
-    add_shortcut( "directory" )
-    add_shortcut( "dir" )
-    add_shortcut( "file" )
-    add_string( "recursive", "expand" , NULL, RECURSIVE_TEXT,
-                RECURSIVE_LONGTEXT, false )
-      change_string_list( psz_recursive_list, psz_recursive_list_text, 0 )
-    add_string( "ignore-filetypes", "m3u,db,nfo,ini,jpg,jpeg,ljpg,gif,png,pgm,pgmyuv,pbm,pam,tga,bmp,pnm,xpm,xcf,pcx,tif,tiff,lbm,sfv,txt,sub,idx,srt,cue,ssa",
-                NULL, IGNORE_TEXT, IGNORE_LONGTEXT, false )
-    set_callbacks( Open, Close )
-vlc_module_end ()
-
-
-/*****************************************************************************
- * Local prototypes, constants, structures
- *****************************************************************************/
-
 enum
 {
-    MODE_EXPAND,
+    MODE_NONE,
     MODE_COLLAPSE,
-    MODE_NONE
+    MODE_EXPAND,
 };
 
 typedef struct directory_t directory_t;
@@ -136,16 +90,12 @@ struct access_sys_t
     char *psz_xspf_extension;
 };
 
-static block_t *Block( access_t * );
-static int Control( access_t *, int, va_list );
-
 /*****************************************************************************
  * Open: open the directory
  *****************************************************************************/
-static int Open( vlc_object_t *p_this )
+int DirOpen( vlc_object_t *p_this )
 {
     access_t *p_access = (access_t*)p_this;
-    access_sys_t *p_sys;
 
     if( !p_access->psz_path )
         return VLC_EGENERIC;
@@ -169,7 +119,12 @@ static int Open( vlc_object_t *p_this )
     if (handle == NULL)
         return VLC_EGENERIC;
 
-    p_sys = malloc (sizeof (*p_sys));
+    return DirInit (p_access, handle);
+}
+
+int DirInit (access_t *p_access, DIR *handle)
+{
+    access_sys_t *p_sys = malloc (sizeof (*p_sys));
     if (!p_sys)
     {
         closedir( handle );
@@ -193,10 +148,11 @@ static int Open( vlc_object_t *p_this )
         p_sys->mode = MODE_EXPAND;
     free( psz );
 
+    access_InitFields(p_access);
     p_access->pf_read  = NULL;
-    p_access->pf_block = Block;
+    p_access->pf_block = DirBlock;
     p_access->pf_seek  = NULL;
-    p_access->pf_control= Control;
+    p_access->pf_control= DirControl;
     free (p_access->psz_demux);
     p_access->psz_demux = strdup ("xspf-open");
 
@@ -206,7 +162,7 @@ static int Open( vlc_object_t *p_this )
 /*****************************************************************************
  * Close: close the target
  *****************************************************************************/
-static void Close( vlc_object_t * p_this )
+void DirClose( vlc_object_t * p_this )
 {
     access_t *p_access = (access_t*)p_this;
     access_sys_t *p_sys = p_access->p_sys;
@@ -245,7 +201,7 @@ static bool has_inode_loop (const directory_t *dir)
     return false;
 }
 
-static block_t *Block (access_t *p_access)
+block_t *DirBlock (access_t *p_access)
 {
     access_sys_t *p_sys = p_access->p_sys;
     directory_t *current = p_sys->current;
@@ -473,7 +429,7 @@ fatal:
 /*****************************************************************************
  * Control:
  *****************************************************************************/
-static int Control( access_t *p_access, int i_query, va_list args )
+int DirControl( access_t *p_access, int i_query, va_list args )
 {
     switch( i_query )
     {
index 2763238..8d34cab 100644 (file)
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
  *****************************************************************************/
 
-/*****************************************************************************
- * Preamble
- *****************************************************************************/
 #ifdef HAVE_CONFIG_H
 # include "config.h"
 #endif
 
 #include <vlc_common.h>
-#include <vlc_plugin.h>
+#include "fs.h"
 #include <vlc_input.h>
 #include <vlc_access.h>
 #include <vlc_dialog.h>
 
 #include <vlc_charset.h>
 
-/*****************************************************************************
- * Module descriptor
- *****************************************************************************/
-static int  Open ( vlc_object_t * );
-static void Close( vlc_object_t * );
-
-#define CACHING_TEXT N_("Caching value (ms)")
-#define CACHING_LONGTEXT N_( \
-    "Caching value for files, in milliseconds." )
-
-#define NETWORK_CACHING_TEXT N_("Extra network caching value (ms)")
-#define NETWORK_CACHING_LONGTEXT N_( \
-    "Supplementary caching value for remote files, in milliseconds." )
-
-vlc_module_begin ()
-    set_description( N_("File input") )
-    set_shortname( N_("File") )
-    set_category( CAT_INPUT )
-    set_subcategory( SUBCAT_INPUT_ACCESS )
-    add_integer( "file-caching", DEFAULT_PTS_DELAY / 1000, NULL,
-                 CACHING_TEXT, CACHING_LONGTEXT, true )
-        change_safe()
-    add_integer( "network-caching", 3 * DEFAULT_PTS_DELAY / 1000, NULL,
-                 NETWORK_CACHING_TEXT, NETWORK_CACHING_LONGTEXT, true )
-        change_safe()
-    add_obsolete_string( "file-cat" )
-    set_capability( "access", 50 )
-    add_shortcut( "file" )
-    add_shortcut( "fd" )
-    add_shortcut( "stream" )
-    set_callbacks( Open, Close )
-vlc_module_end ()
-
-
-/*****************************************************************************
- * Exported prototypes
- *****************************************************************************/
-static int  Seek( access_t *, int64_t );
-static int  NoSeek( access_t *, int64_t );
-static ssize_t Read( access_t *, uint8_t *, size_t );
-static int  Control( access_t *, int, va_list );
-
 struct access_sys_t
 {
     unsigned int i_nb_reads;
@@ -174,16 +129,24 @@ static bool IsRemote (int fd)
 /*****************************************************************************
  * Open: open the file
  *****************************************************************************/
-static int Open( vlc_object_t *p_this )
+int Open( vlc_object_t *p_this )
 {
     access_t     *p_access = (access_t*)p_this;
-    access_sys_t *p_sys;
+    access_sys_t *p_sys = malloc (sizeof (*p_sys));
     const char   *path = p_access->psz_path;
 #ifdef WIN32
     bool is_remote = false;
 #endif
 
-    STANDARD_READ_ACCESS_INIT;
+    if (unlikely(p_sys == NULL))
+        return VLC_ENOMEM;
+
+    access_InitFields (p_access);
+    p_access->pf_read = FileRead;
+    p_access->pf_block = NULL;
+    p_access->pf_control = FileControl;
+    p_access->pf_seek = FileSeek;
+    p_access->p_sys = p_sys;
     p_sys->i_nb_reads = 0;
     p_sys->b_pace_control = true;
 
@@ -278,7 +241,7 @@ error:
 /*****************************************************************************
  * Close: close the target
  *****************************************************************************/
-static void Close (vlc_object_t * p_this)
+void Close (vlc_object_t * p_this)
 {
     access_t     *p_access = (access_t*)p_this;
     access_sys_t *p_sys = p_access->p_sys;
@@ -293,7 +256,7 @@ static void Close (vlc_object_t * p_this)
 /*****************************************************************************
  * Read: standard read on a file descriptor.
  *****************************************************************************/
-static ssize_t Read( access_t *p_access, uint8_t *p_buffer, size_t i_len )
+ssize_t FileRead( access_t *p_access, uint8_t *p_buffer, size_t i_len )
 {
     access_sys_t *p_sys = p_access->p_sys;
     int fd = p_sys->fd;
@@ -350,7 +313,7 @@ static ssize_t Read( access_t *p_access, uint8_t *p_buffer, size_t i_len )
 /*****************************************************************************
  * Seek: seek to a specific location in a file
  *****************************************************************************/
-static int Seek (access_t *p_access, int64_t i_pos)
+int FileSeek (access_t *p_access, int64_t i_pos)
 {
     p_access->info.i_pos = i_pos;
     p_access->info.b_eof = false;
@@ -359,7 +322,7 @@ static int Seek (access_t *p_access, int64_t i_pos)
     return VLC_SUCCESS;
 }
 
-static int NoSeek (access_t *p_access, int64_t i_pos)
+int NoSeek (access_t *p_access, int64_t i_pos)
 {
     /* assert(0); ?? */
     (void) p_access; (void) i_pos;
@@ -369,7 +332,7 @@ static int NoSeek (access_t *p_access, int64_t i_pos)
 /*****************************************************************************
  * Control:
  *****************************************************************************/
-static int Control( access_t *p_access, int i_query, va_list args )
+int FileControl( access_t *p_access, int i_query, va_list args )
 {
     access_sys_t *p_sys = p_access->p_sys;
     bool    *pb_bool;