Changeset f0f9014510bebfe8ea372ce5e6dc01f62ea2df4e

Show
Ignore:
Timestamp:
14/02/06 21:41:27 (3 years ago)
Author:
Rémi Denis-Courmont <rem@videolan.org>
git-committer:
Rémi Denis-Courmont <rem@videolan.org> 1139949687 +0000
git-parent:

[5243d4df8a0208851a6c244824290faf86a5169c]

git-author:
Rémi Denis-Courmont <rem@videolan.org> 1139949687 +0000
Message:

(Win32) Support stat() for file names outside ANSI Code Page

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • src/misc/unicode.c

    r5243d4d rf0f9014  
    298298    return NULL; 
    299299#else 
    300     wchar_t wpath[MAX_PATH]; 
    301     wchar_t wmode[4]; 
    302  
    303     if( !MultiByteToWideChar( CP_UTF8, 0, filename, -1, wpath, MAX_PATH - 1) 
    304      || !MultiByteToWideChar( CP_ACP, 0, mode, -1, wmode, 3 ) ) 
     300    wchar_t wpath[MAX_PATH + 1]; 
     301    size_t len = strlen( mode ) + 1; 
     302    wchar_t wmode[len]; 
     303 
     304    if( !MultiByteToWideChar( CP_UTF8, 0, filename, -1, wpath, MAX_PATH ) 
     305     || !MultiByteToWideChar( CP_ACP, 0, mode, len, wmode, len ) ) 
    305306    { 
    306307        errno = ENOENT; 
    307308        return NULL; 
    308309    } 
     310    wpath[MAX_PATH] = L'\0'; 
    309311 
    310312    return _wfopen( wpath, wmode ); 
     
    318320{ 
    319321#if defined (UNDER_CE) || defined (WIN32) 
    320     wchar_t wname[MAX_PATH]; 
    321     char mod[MAX_PATH]; 
     322    wchar_t wname[MAX_PATH + 1]; 
     323    char mod[MAX_PATH + 1]; 
    322324    int i; 
    323325 
     
    342344        return -1; 
    343345    } 
     346    wname[MAX_PATH] = L'\0'; 
    344347 
    345348    if( CreateDirectoryW( wname, NULL ) == 0 ) 
     
    398401                        vlc_bool_t deref ) 
    399402{ 
    400 #ifdef HAVE_SYS_STAT_H 
     403#if !(defined (WIN32) || defined (UNDER_CE)) 
     404# ifdef HAVE_SYS_STAT_H 
    401405    const char *local_name = ToLocale( filename ); 
    402406 
     
    409413    } 
    410414    errno = ENOENT; 
    411 #endif 
     415# endif 
    412416    return -1; 
     417#else 
     418    wchar_t wpath[MAX_PATH + 1]; 
     419 
     420    if( !MultiByteToWideChar( CP_UTF8, 0, filename, -1, wpath, MAX_PATH ) ) 
     421    { 
     422        errno = ENOENT; 
     423        return -1; 
     424    } 
     425    wpath[MAX_PATH] = L'\0'; 
     426 
     427    /* struct _stat is just a silly Microsoft alias for struct stat */ 
     428    return _wstat( wpath, (struct _stat *)buf ); 
     429#endif 
    413430} 
    414431