⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 http.c

📁 video linux conference
💻 C
📖 第 1 页 / 共 5 页
字号:
static void mvar_PushNewVar( mvar_t *vars, char *name, char *value ){    mvar_t *f = mvar_New( name, value );    mvar_PushVar( vars, f );}static void mvar_AppendNewVar( mvar_t *vars, char *name, char *value ){    mvar_t *f = mvar_New( name, value );    mvar_AppendVar( vars, f );}/* arg= start[:stop[:step]],.. */static mvar_t *mvar_IntegerSetNew( char *name, char *arg ){    char *dup = strdup( arg );    char *str = dup;    mvar_t *s = mvar_New( name, "set" );    while( str )    {        char *p;        int  i_start,i_stop,i_step;        int  i_match;        p = strchr( str, ',' );        if( p )        {            *p++ = '\0';        }        i_step = 0;        i_match = sscanf( str, "%d:%d:%d", &i_start, &i_stop, &i_step );        if( i_match == 1 )        {            i_stop = i_start;            i_step = 1;        }        else if( i_match == 2 )        {            i_step = i_start < i_stop ? 1 : -1;        }        if( i_match >= 1 )        {            int i;            if( ( i_start <= i_stop && i_step > 0 ) ||                ( i_start >= i_stop && i_step < 0 ) )            {                for( i = i_start; ; i += i_step )                {                    char   value[512];                    if( ( i_step > 0 && i > i_stop ) ||                        ( i_step < 0 && i < i_stop ) )                    {                        break;                    }                    sprintf( value, "%d", i );                    mvar_PushNewVar( s, name, value );                }            }        }        str = p;    }    free( dup );    return s;}void PlaylistListNode( playlist_t *p_pl, playlist_item_t *p_node,                       char *name, mvar_t *s, int i_depth ){    if( p_node != NULL )    {        if (p_node->i_children == -1)        {            char value[512];            mvar_t *itm = mvar_New( name, "set" );            sprintf( value, "%d", ( p_pl->status.p_item == p_node )? 1 : 0 );            mvar_AppendNewVar( itm, "current", value );            sprintf( value, "%d", p_node->input.i_id );            mvar_AppendNewVar( itm, "index", value );            mvar_AppendNewVar( itm, "name", p_node->input.psz_name );            mvar_AppendNewVar( itm, "uri", p_node->input.psz_uri );            sprintf( value, "Item");            mvar_AppendNewVar( itm, "type", value );            sprintf( value, "%d", i_depth );            mvar_AppendNewVar( itm, "depth", value );            mvar_AppendVar( s, itm );        }        else        {            char value[512];            int i_child;            mvar_t *itm = mvar_New( name, "set" );            mvar_AppendNewVar( itm, "name", p_node->input.psz_name );            mvar_AppendNewVar( itm, "uri", p_node->input.psz_name );            sprintf( value, "Node" );            mvar_AppendNewVar( itm, "type", value );            sprintf( value, "%d", p_node->input.i_id );            mvar_AppendNewVar( itm, "index", value );            sprintf( value, "%d", p_node->i_children);            mvar_AppendNewVar( itm, "i_children", value );            sprintf( value, "%d", i_depth );            mvar_AppendNewVar( itm, "depth", value );            mvar_AppendVar( s, itm );            for (i_child = 0 ; i_child < p_node->i_children ; i_child++)                PlaylistListNode( p_pl, p_node->pp_children[i_child], name, s, i_depth + 1);        }    }}static mvar_t *mvar_PlaylistSetNew( char *name, playlist_t *p_pl ){    playlist_view_t *p_view;    mvar_t *s = mvar_New( name, "set" );    vlc_mutex_lock( &p_pl->object_lock );    p_view = playlist_ViewFind( p_pl, VIEW_CATEGORY ); /* FIXME */    if( p_view != NULL )        PlaylistListNode( p_pl, p_view->p_root, name, s, 0 );    vlc_mutex_unlock( &p_pl->object_lock );    return s;}static mvar_t *mvar_InfoSetNew( char *name, input_thread_t *p_input ){    mvar_t *s = mvar_New( name, "set" );    int i, j;    if( p_input == NULL )    {        return s;    }    vlc_mutex_lock( &p_input->input.p_item->lock );    for ( i = 0; i < p_input->input.p_item->i_categories; i++ )    {        info_category_t *p_category = p_input->input.p_item->pp_categories[i];        mvar_t *cat  = mvar_New( name, "set" );        mvar_t *iset = mvar_New( "info", "set" );        mvar_AppendNewVar( cat, "name", p_category->psz_name );        mvar_AppendVar( cat, iset );        for ( j = 0; j < p_category->i_infos; j++ )        {            info_t *p_info = p_category->pp_infos[j];            mvar_t *info = mvar_New( "info", "" );            msg_Dbg( p_input, "adding info name=%s value=%s",                     p_info->psz_name, p_info->psz_value );            mvar_AppendNewVar( info, "name",  p_info->psz_name );            mvar_AppendNewVar( info, "value", p_info->psz_value );            mvar_AppendVar( iset, info );        }        mvar_AppendVar( s, cat );    }    vlc_mutex_unlock( &p_input->input.p_item->lock );    return s;}#if 0static mvar_t *mvar_HttpdInfoSetNew( char *name, httpd_t *p_httpd, int i_type ){    mvar_t       *s = mvar_New( name, "set" );    httpd_info_t info;    int          i;    if( !p_httpd->pf_control( p_httpd, i_type, &info, NULL ) )    {        for( i= 0; i < info.i_count; )        {            mvar_t *inf;            inf = mvar_New( name, "set" );            do            {                /* fprintf( stderr," mvar_HttpdInfoSetNew: append name=`%s' value=`%s'\n",                            info.info[i].psz_name, info.info[i].psz_value ); */                mvar_AppendNewVar( inf,                                   info.info[i].psz_name,                                   info.info[i].psz_value );                i++;            } while( i < info.i_count && strcmp( info.info[i].psz_name, "id" ) );            mvar_AppendVar( s, inf );        }    }    /* free mem */    for( i = 0; i < info.i_count; i++ )    {        free( info.info[i].psz_name );        free( info.info[i].psz_value );    }    if( info.i_count > 0 )    {        free( info.info );    }    return s;}#endifstatic mvar_t *mvar_FileSetNew( char *name, char *psz_dir ){    mvar_t *s = mvar_New( name, "set" );    char           tmp[MAX_DIR_SIZE], *p, *src;#ifdef HAVE_SYS_STAT_H    struct stat   stat_info;#endif    DIR           *p_dir;    struct dirent *p_dir_content;    char          sep;    /* convert all / to native separator */#if defined( WIN32 )    while( (p = strchr( psz_dir, '/' )) )    {        *p = '\\';    }    sep = '\\';#else    sep = '/';#endif    /* remove trailling separator */    while( strlen( psz_dir ) > 1 &&#if defined( WIN32 )           !( strlen(psz_dir)==3 && psz_dir[1]==':' && psz_dir[2]==sep ) &&#endif           psz_dir[strlen( psz_dir ) -1 ] == sep )    {        psz_dir[strlen( psz_dir ) -1 ]  ='\0';    }    /* remove double separator */    for( p = src = psz_dir; *src != '\0'; src++, p++ )    {        if( src[0] == sep && src[1] == sep )        {            src++;        }        *p = *src;    }    *p = '\0';    if( *psz_dir == '\0' )    {        return s;    }    /* first fix all .. dir */    p = src = psz_dir;    while( *src )    {        if( src[0] == '.' && src[1] == '.' )        {            src += 2;            if( p <= &psz_dir[1] )            {                continue;            }            p -= 2;            while( p > &psz_dir[1] && *p != sep )            {                p--;            }        }        else if( *src == sep )        {            if( p > psz_dir && p[-1] == sep )            {                src++;            }            else            {                *p++ = *src++;            }        }        else        {            do            {                *p++ = *src++;            } while( *src && *src != sep );        }    }    *p = '\0';#ifdef HAVE_SYS_STAT_H    if( stat( psz_dir, &stat_info ) == -1 || !S_ISDIR( stat_info.st_mode ) )    {        return s;    }#endif    if( ( p_dir = opendir( psz_dir ) ) == NULL )    {        fprintf( stderr, "cannot open dir (%s)", psz_dir );        return s;    }    /* remove traling / or \ */    for( p = &psz_dir[strlen( psz_dir) - 1];         p >= psz_dir && ( *p =='/' || *p =='\\' ); p-- )    {        *p = '\0';    }    for( ;; )    {        mvar_t *f;        /* parse psz_src dir */        if( ( p_dir_content = readdir( p_dir ) ) == NULL )        {            break;        }        if( !strcmp( p_dir_content->d_name, "." ) )        {            continue;        }        sprintf( tmp, "%s/%s", psz_dir, p_dir_content->d_name );#ifdef HAVE_SYS_STAT_H        if( stat( tmp, &stat_info ) == -1 )        {            continue;        }#endif        f = mvar_New( name, "set" );        mvar_AppendNewVar( f, "name", tmp );#ifdef HAVE_SYS_STAT_H        if( S_ISDIR( stat_info.st_mode ) )        {            mvar_AppendNewVar( f, "type", "directory" );        }        else if( S_ISREG( stat_info.st_mode ) )        {            mvar_AppendNewVar( f, "type", "file" );        }        else        {            mvar_AppendNewVar( f, "type", "unknown" );        }        sprintf( tmp, I64Fd, (int64_t)stat_info.st_size );        mvar_AppendNewVar( f, "size", tmp );        /* FIXME memory leak FIXME */#ifdef HAVE_CTIME_R        ctime_r( &stat_info.st_mtime, tmp );        mvar_AppendNewVar( f, "date", tmp );#else        mvar_AppendNewVar( f, "date", ctime( &stat_info.st_mtime ) );#endif#else        mvar_AppendNewVar( f, "type", "unknown" );        mvar_AppendNewVar( f, "size", "unknown" );        mvar_AppendNewVar( f, "date", "unknown" );#endif        mvar_AppendVar( s, f );    }    return s;}static mvar_t *mvar_VlmSetNew( char *name, vlm_t *vlm ){    mvar_t        *s = mvar_New( name, "set" );    vlm_message_t *msg;    int    i;    if( vlm == NULL ) return s;    if( vlm_ExecuteCommand( vlm, "show", &msg ) )    {        return s;    }    for( i = 0; i < msg->i_child; i++ )    {        /* Over media, schedule */        vlm_message_t *ch = msg->child[i];        int j;        for( j = 0; j < ch->i_child; j++ )        {            /* Over name */            vlm_message_t *el = ch->child[j];            vlm_message_t *inf, *desc;            mvar_t        *set;            char          psz[500];            int k;            sprintf( psz, "show %s", el->psz_name );            if( vlm_ExecuteCommand( vlm, psz, &inf ) )                continue;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -