Ignore:
Timestamp:
Jan 9, 2017, 11:09:38 AM (2 years ago)
Author:
jrpelegrina
Message:

Update new version: 3.15.02

File:
1 edited

Legend:

Unmodified
Added
Removed
  • filezilla/trunk/fuentes/src/putty/windows/winmisc.c

    r130 r3185  
    1010#endif
    1111#include <security.h>
     12#include <wchar.h>
    1213
    1314OSVERSIONINFO osVersion;
     
    539540                        GET_32BIT_MSB_FIRST(end + 8));
    540541}
     542
     543
     544FILE *f_open(const struct Filename *filename, char const *mode, int is_private)
     545{
     546    FILE* f;
     547    wchar_t *wname, *wmode;
     548
     549    (void)is_private;
     550
     551    if (!filename || !filename->path || !mode) {
     552        return NULL;
     553    }
     554
     555    // The filename is in UTF-8, not expressible in system char, need to use wchar_t. Thus we need to use CreateFileW and convert the HANDLE to a FILE*
     556    wname = utf8_to_wide(filename->path);
     557    wmode = utf8_to_wide(mode);
     558    if (!wname || !wmode) {
     559        sfree(wname);
     560        sfree(wmode);
     561        return NULL;
     562    }
     563
     564    f = _wfopen(wname, wmode);
     565
     566    sfree(wname);
     567    sfree(wmode);
     568
     569    return f;
     570}
     571
     572wchar_t* utf8_to_wide(const char* utf8)
     573{
     574    wchar_t *w;
     575
     576    int len = MultiByteToWideChar(CP_UTF8, 0, utf8, -1, 0, 0);
     577    if (len <= 0)
     578        return NULL;
     579
     580    w = snewn(len, wchar_t);
     581
     582    if (!w)
     583        return NULL;
     584
     585    if (MultiByteToWideChar(CP_UTF8, 0, utf8, -1, w, len) <= 0)
     586    {
     587        sfree(w);
     588        return NULL;
     589    }
     590
     591    return w;
     592}
     593
     594char* wide_to_utf8(const wchar_t* w)
     595{
     596    char* utf8;
     597
     598    int len = WideCharToMultiByte(CP_UTF8, 0, w, -1, 0, 0, 0, 0);
     599    if (len <= 0)
     600        return NULL;
     601
     602    utf8 = snewn(len, char);
     603
     604    if (!utf8)
     605        return NULL;
     606
     607    if (WideCharToMultiByte(CP_UTF8, 0, w, -1, utf8, len, 0, 0) <= 0)
     608    {
     609        sfree(utf8);
     610        return NULL;
     611    }
     612   
     613    return utf8;
     614}
Note: See TracChangeset for help on using the changeset viewer.