Example #1
0
static int BrowseShare( stream_t *p_access, input_item_node_t *p_node )
{
    access_sys_t *p_sys = p_access->p_sys;
    smb_share_list  shares;
    const char     *psz_name;
    size_t          share_count;
    int             i_ret = VLC_SUCCESS;

    if( smb_share_get_list( p_sys->p_session, &shares, &share_count )
        != DSM_SUCCESS )
        return VLC_EGENERIC;

    struct vlc_readdir_helper rdh;
    vlc_readdir_helper_init( &rdh, p_access, p_node );

    for( size_t i = 0; i < share_count && i_ret == VLC_SUCCESS; i++ )
    {
        psz_name = smb_share_list_at( shares, i );

        if( psz_name[strlen( psz_name ) - 1] == '$')
            continue;

        i_ret = add_item( p_access, &rdh, psz_name, ITEM_TYPE_DIRECTORY );
    }

    vlc_readdir_helper_finish( &rdh, i_ret == VLC_SUCCESS );

    smb_share_list_destroy( shares );
    return i_ret;
}
Example #2
0
static input_item_t* BrowseShare( access_t *p_access )
{
    access_sys_t *p_sys = p_access->p_sys;
    const char     *psz_name;
    input_item_t   *p_item = NULL;

    if( !p_sys->i_browse_count )
    {
        size_t i_count;
        if( smb_share_get_list( p_sys->p_session, &p_sys->shares, &i_count )
            != DSM_SUCCESS )
            return NULL;
        else
            p_sys->i_browse_count = i_count;
    }
    for( ; !p_item && p_sys->i_browse_idx < p_sys->i_browse_count
         ; p_sys->i_browse_idx++ )
    {
        psz_name = smb_share_list_at( p_sys->shares, p_sys->i_browse_idx );

        if( psz_name[strlen( psz_name ) - 1] == '$')
            continue;

        p_item = new_item( p_access, psz_name, ITEM_TYPE_DIRECTORY );
        if( !p_item )
            return NULL;
    }
    return p_item;
}