Ticket #1506: filezilla3_beta2_sftp_utf8.patch
File filezilla3_beta2_sftp_utf8.patch, 6.2 KB (added by , 18 years ago) |
---|
-
engine/sftpcontrolsocket.cpp
diff -Nur src.orig/engine/sftpcontrolsocket.cpp src/engine/sftpcontrolsocket.cpp
old new 264 264 LogMessage(Status, _("Connecting to %s:%d..."), server.GetHost().c_str(), server.GetPort()); 265 265 SetWait(true); 266 266 267 if (server.GetEncodingType() == ENCODING_UTF8) 268 m_useUTF8 = true; 267 269 if (m_pCurrentServer) 268 270 delete m_pCurrentServer; 269 271 m_pCurrentServer = new CServer(server); … … 277 279 if (executable == _T("")) 278 280 executable = _T("fzsftp"); 279 281 280 m_pid = wxExecute(executable + _T(" -v") , wxEXEC_ASYNC, m_pProcess);282 m_pid = wxExecute(executable + _T(" -v") + (m_useUTF8 ? _T(" -utf8") : _T("")), wxEXEC_ASYNC, m_pProcess); 281 283 if (!m_pid) 282 284 { 283 285 delete m_pProcess; … … 481 483 482 484 cmd += _T("\n"); 483 485 484 const wxCharBuffer str = cmd.mb_str();486 const wxCharBuffer str = m_useUTF8 ? cmd.mb_str(wxConvUTF8) : cmd.mb_str(); 485 487 if (!m_pProcess) 486 488 return false; 487 489 … … 862 864 return FZ_REPLY_INTERNALERROR; 863 865 } 864 866 865 wxCharBuffer str = entry.mb_str();867 wxCharBuffer str = m_useUTF8 ? entry.mb_str(wxConvUTF8) : entry.mb_str(); 866 868 int len = strlen(str); 867 869 char* buffer = new char[len + 1]; 868 870 strcpy(buffer, str); -
putty/fzsftp.c
diff -Nur src.orig/putty/fzsftp.c src/putty/fzsftp.c
old new 1 1 #include "putty.h" 2 2 #include "misc.h" 3 3 4 int gnFzUseUTF8 = 0; // use UTF8 enooding or not 5 4 6 int fznotify(sftpEventTypes type) 5 7 { 6 8 fprintf(stdout, "%c", (int)type + '0'); -
putty/fzsftp.h
diff -Nur src.orig/putty/fzsftp.h src/putty/fzsftp.h
old new 25 25 sftpReqUnknown 26 26 }; 27 27 28 extern int gnFzUseUTF8; // use UTF8 encoding or not 29 28 30 int fznotify(sftpEventTypes type); 29 31 int fzprintf(sftpEventTypes type, const char* p, ...); 30 32 int fzprintf_raw(sftpEventTypes type, const char* p, ...); -
putty/psftp.c
diff -Nur src.orig/putty/psftp.c src/putty/psftp.c
old new 2907 2907 } else if (strcmp(argv[i], "--") == 0) { 2908 2908 i++; 2909 2909 break; 2910 } else if (strcmp(argv[i], "-utf8") == 0) { 2911 gnFzUseUTF8 = 1; 2910 2912 } else { 2911 2913 cmdline_error("unknown option \"%s\"", argv[i]); 2912 2914 } -
putty/windows/winsftp.c
diff -Nur src.orig/putty/windows/winsftp.c src/putty/windows/winsftp.c
old new 77 77 HANDLE h; 78 78 RFile *ret; 79 79 80 h = CreateFile(name, GENERIC_READ, FILE_SHARE_READ, NULL, 81 OPEN_EXISTING, 0, 0); 80 if (gnFzUseUTF8) { 81 int len; 82 83 // convert from UTF-8 to UNICODE 84 len = MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)name, -1, NULL, 0); 85 if (len != 0) 86 { 87 wchar_t *p1; 88 89 p1 = malloc(sizeof(wchar_t) * (len*2+1)); 90 MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)name, -1 , (LPWSTR)p1, len*2); 91 h = CreateFileW(p1, GENERIC_READ, FILE_SHARE_READ, NULL, 92 OPEN_EXISTING, 0, 0); 93 free(p1); 94 } 95 else { 96 h = CreateFile(name, GENERIC_READ, FILE_SHARE_READ, NULL, 97 OPEN_EXISTING, 0, 0); 98 } 99 } 100 else { 101 h = CreateFile(name, GENERIC_READ, FILE_SHARE_READ, NULL, 102 OPEN_EXISTING, 0, 0); 103 } 82 104 if (h == INVALID_HANDLE_VALUE) 83 105 return NULL; 84 106 … … 125 147 HANDLE h; 126 148 WFile *ret; 127 149 128 h = CreateFile(name, GENERIC_WRITE, 0, NULL, 129 CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0); 150 if (gnFzUseUTF8) { 151 int len; 152 153 // convert from UTF-8 to UNICODE 154 len = MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)name, -1, NULL, 0); 155 if (len != 0) 156 { 157 wchar_t *p1; 158 159 p1 = malloc(sizeof(wchar_t) * (len*2+1)); 160 MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)name, -1 , (LPWSTR)p1, len*2); 161 h = CreateFileW(p1, GENERIC_WRITE, 0, NULL, 162 CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0); 163 free(p1); 164 } 165 else { 166 h = CreateFile(name, GENERIC_WRITE, 0, NULL, 167 CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0); 168 } 169 } 170 else { 171 h = CreateFile(name, GENERIC_WRITE, 0, NULL, 172 CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0); 173 } 130 174 if (h == INVALID_HANDLE_VALUE) 131 175 return NULL; 132 176 … … 141 185 HANDLE h; 142 186 WFile *ret; 143 187 144 h = CreateFile(name, GENERIC_WRITE, FILE_SHARE_READ, NULL, 145 OPEN_EXISTING, 0, 0); 188 if (gnFzUseUTF8) { 189 int len; 190 191 // convert from UTF-8 to UNICODE 192 len = MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)name, -1, NULL, 0); 193 if (len != 0) 194 { 195 wchar_t *p1; 196 197 p1 = malloc(sizeof(wchar_t) * (len*2+1)); 198 MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)name, -1 , (LPWSTR)p1, len*2); 199 h = CreateFileW(p1, GENERIC_WRITE, FILE_SHARE_READ, NULL, 200 OPEN_EXISTING, 0, 0); 201 free(p1); 202 } 203 else { 204 h = CreateFile(name, GENERIC_WRITE, FILE_SHARE_READ, NULL, 205 OPEN_EXISTING, 0, 0); 206 } 207 } 208 else { 209 h = CreateFile(name, GENERIC_WRITE, FILE_SHARE_READ, NULL, 210 OPEN_EXISTING, 0, 0); 211 } 146 212 if (h == INVALID_HANDLE_VALUE) 147 213 return NULL; 148 214 … … 223 289 int file_type(char *name) 224 290 { 225 291 DWORD attr; 226 attr = GetFileAttributes(name); 292 if (gnFzUseUTF8) { 293 int len; 294 295 // convert from UTF-8 to UNICODE 296 len = MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)name, -1, NULL, 0); 297 if (len != 0) 298 { 299 wchar_t *p1; 300 301 p1 = malloc(sizeof(wchar_t) * (len*2+1)); 302 MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)name, -1 , (LPWSTR)p1, len*2); 303 attr = GetFileAttributesW(name); 304 free(p1); 305 } 306 else { 307 attr = GetFileAttributes(name); 308 } 309 } 310 else { 311 attr = GetFileAttributes(name); 312 } 227 313 /* We know of no `weird' files under Windows. */ 228 314 if (attr == (DWORD)-1) 229 315 return FILE_TYPE_NONEXISTENT;