Example #1
0
static int ctl_load_files_and_play(argc_argv_t *argc_argv, int playflag)
{
    StringTable st;
    int i, n, len;
    char buffer[BUFSIZ];
    char **files;
    int prevnfiles;

    if(argc_argv==NULL)
        return RC_NONE;

    w32g_get_playlist_index(NULL, &prevnfiles, NULL);

    init_string_table(&st);
    n = argc_argv->argc;
    for(i = 0; i < n; i++)
    {
        strcpy(buffer,(argc_argv->argv)[i]);
        if(is_directory(buffer))
            directory_form(buffer);
        len = strlen(buffer);
        put_string_table(&st, buffer, strlen(buffer));
    }
#if 1
    for(i=0; i<argc_argv->argc; i++) {
        free(argc_argv->argv[i]);
    }
    free(argc_argv->argv);
    argc_argv->argv = NULL;
    argc_argv->argc = 0;
#endif
    if((files = make_string_array(&st)) == NULL)
        n = 0;
    else
    {
        n = w32g_add_playlist(n, files, 1,
                              ctl.flags & CTLF_AUTOUNIQ,
                              ctl.flags & CTLF_AUTOREFINE);
        free(files[0]);
        free(files);
    }
    if(n > 0)
    {
        ctl_panel_refresh();
        if(playflag)
        {
            w32g_goto_playlist(prevnfiles, !(ctl.flags & CTLF_NOT_CONTINUE));
            return RC_LOAD_FILE;
        }
    }
    return RC_NONE;
}
Example #2
0
static int ctl_drop_file(HDROP hDrop)
{
    StringTable st;
    int i, n, len;
    char buffer[BUFSIZ];
    char **files;
    int prevnfiles;

    w32g_get_playlist_index(NULL, &prevnfiles, NULL);

    init_string_table(&st);
    n = DragQueryFile(hDrop,0xffffffffL, NULL, 0);
    for(i = 0; i < n; i++)
    {
        DragQueryFile(hDrop, i, buffer, sizeof(buffer));
        if(is_directory(buffer))
            directory_form(buffer);
        len = strlen(buffer);
        put_string_table(&st, buffer, strlen(buffer));
    }
    DragFinish(hDrop);

    if((files = make_string_array(&st)) == NULL)
        n = 0;
    else
    {
        n = w32g_add_playlist(n, files, 1,
                              ctl.flags & CTLF_AUTOUNIQ,
                              ctl.flags & CTLF_AUTOREFINE);
        free(files[0]);
        free(files);
    }
    if(n > 0)
    {
        ctl_panel_refresh();
        if(ctl.flags & CTLF_DRAG_START)
        {
            w32g_goto_playlist(prevnfiles, !(ctl.flags & CTLF_NOT_CONTINUE));
            return RC_LOAD_FILE;
        }
    }
    return RC_NONE;
}
Example #3
0
static int ctl_load_file(char *fileptr)
{
    StringTable st;
    int len, n;
    char **files;
    char buffer[BUFSIZ];
    char *basedir;

    init_string_table(&st);
    n = 0;
    basedir = fileptr;
    fileptr += strlen(fileptr) + 1;
    while(*fileptr)
    {
        snprintf(buffer, sizeof(buffer), "%s\\%s", basedir, fileptr);
        if(is_directory(buffer))
            directory_form(buffer);
        len = strlen(buffer);
        put_string_table(&st, buffer, len);
        n++;
        fileptr += strlen(fileptr) + 1;
    }

    if(n == 0)
    {
        put_string_table(&st, basedir, strlen(basedir));
        n++;
    }

    files = make_string_array(&st);
    n = w32g_add_playlist(n, files, 1,
                          ctl.flags & CTLF_AUTOUNIQ,
                          ctl.flags & CTLF_AUTOREFINE);
    free(files[0]);
    free(files);

    if(n > 0)
        ctl_panel_refresh();
    w32g_lock_open_file = 0;
    return RC_NONE;
}
Example #4
0
UINT MSI_OpenDatabaseW(LPCWSTR szDBPath, LPCWSTR szPersist, MSIDATABASE **pdb)
{
    IStorage *stg = NULL;
    HRESULT r;
    MSIDATABASE *db = NULL;
    UINT ret = ERROR_FUNCTION_FAILED;
    LPCWSTR szMode;
    STATSTG stat;

    TRACE("%s %s\n",debugstr_w(szDBPath),debugstr_w(szPersist) );

    if( !pdb )
        return ERROR_INVALID_PARAMETER;

    szMode = szPersist;
    if( HIWORD( szPersist ) )
    {
        /* UINT len = lstrlenW( szPerist ) + 1; */
        FIXME("don't support persist files yet\b");
        return ERROR_INVALID_PARAMETER;
        /* szMode = msi_alloc( len * sizeof (DWORD) ); */
    }
    else if( szPersist == MSIDBOPEN_READONLY )
    {
        r = StgOpenStorage( szDBPath, NULL,
              STGM_DIRECT|STGM_READ|STGM_SHARE_DENY_WRITE, NULL, 0, &stg);
    }
    else if( szPersist == MSIDBOPEN_CREATE || szPersist == MSIDBOPEN_CREATEDIRECT )
    {
        /* FIXME: MSIDBOPEN_CREATE should case STGM_TRANSACTED flag to be
         * used here: */
        r = StgCreateDocfile( szDBPath, 
              STGM_DIRECT|STGM_READWRITE|STGM_SHARE_EXCLUSIVE, 0, &stg);
        if( r == ERROR_SUCCESS )
        {
            IStorage_SetClass( stg, &CLSID_MsiDatabase );
            r = init_string_table( stg );
        }
    }
    else if( szPersist == MSIDBOPEN_TRANSACT )
    {
        /* FIXME: MSIDBOPEN_TRANSACT should case STGM_TRANSACTED flag to be
         * used here: */
        r = StgOpenStorage( szDBPath, NULL,
              STGM_DIRECT|STGM_READWRITE|STGM_SHARE_EXCLUSIVE, NULL, 0, &stg);
    }
    else if( szPersist == MSIDBOPEN_DIRECT )
    {
        r = StgOpenStorage( szDBPath, NULL,
              STGM_DIRECT|STGM_READWRITE|STGM_SHARE_EXCLUSIVE, NULL, 0, &stg);
    }
    else
    {
        ERR("unknown flag %p\n",szPersist);
        return ERROR_INVALID_PARAMETER;
    }

    if( FAILED( r ) )
    {
        FIXME("open failed r = %08lx!\n",r);
        return ERROR_FUNCTION_FAILED;
    }

    r = IStorage_Stat( stg, &stat, STATFLAG_NONAME );
    if( FAILED( r ) )
    {
        FIXME("Failed to stat storage\n");
        goto end;
    }

    if ( !IsEqualGUID( &stat.clsid, &CLSID_MsiDatabase ) &&
         !IsEqualGUID( &stat.clsid, &CLSID_MsiPatch ) ) 
    {
        ERR("storage GUID is not a MSI database GUID %s\n",
             debugstr_guid(&stat.clsid) );
        goto end;
    }

    db = alloc_msiobject( MSIHANDLETYPE_DATABASE, sizeof (MSIDATABASE),
                              MSI_CloseDatabase );
    if( !db )
    {
        FIXME("Failed to allocate a handle\n");
        goto end;
    }

    if( TRACE_ON( msi ) )
        enum_stream_names( stg );

    db->storage = stg;
    db->mode = szMode;
    list_init( &db->tables );
    list_init( &db->transforms );

    db->strings = load_string_table( stg );
    if( !db->strings )
        goto end;

    ret = ERROR_SUCCESS;

    msiobj_addref( &db->hdr );
    IStorage_AddRef( stg );
    *pdb = db;

end:
    if( db )
        msiobj_release( &db->hdr );
    if( stg )
        IStorage_Release( stg );

    return ret;
}