Author: mturk
Date: Thu Aug 13 13:14:08 2009
New Revision: 803874
URL: http://svn.apache.org/viewvc?rev=803874&view=rev
Log:
Use costant size for maximum non UCS file name length
Modified:
commons/sandbox/runtime/trunk/src/main/native/include/arch/windows/acr_arch.h
commons/sandbox/runtime/trunk/src/main/native/os/win32/dirent.c
commons/sandbox/runtime/trunk/src/main/native/os/win32/wutil.c
Modified:
commons/sandbox/runtime/trunk/src/main/native/include/arch/windows/acr_arch.h
URL:
http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/include/arch/windows/acr_arch.h?rev=803874&r1=803873&r2=803874&view=diff
==============================================================================
---
commons/sandbox/runtime/trunk/src/main/native/include/arch/windows/acr_arch.h
(original)
+++
commons/sandbox/runtime/trunk/src/main/native/include/arch/windows/acr_arch.h
Thu Aug 13 13:14:08 2009
@@ -349,7 +349,7 @@
* Utility functions
*/
wchar_t *res_name_from_filenamew(int, wchar_t *, const wchar_t *);
-int utf8_to_unicode_path(wchar_t *, size_t, const char *, size_t);
+int utf8_to_unicode_path(wchar_t *, size_t, const char *);
int unicode_to_utf8_path(char *, size_t, const wchar_t *);
Modified: commons/sandbox/runtime/trunk/src/main/native/os/win32/dirent.c
URL:
http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/win32/dirent.c?rev=803874&r1=803873&r2=803874&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/win32/dirent.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/win32/dirent.c Thu Aug 13
13:14:08 2009
@@ -46,7 +46,7 @@
ACR_SET_OS_ERROR(ACR_ENOTDIR);
return NULL;
}
- if (utf8_to_unicode_path(wpath, ACR_HBUFF_LEN - 2, path, ACR_HBUFF_LEN -
2))
+ if (utf8_to_unicode_path(wpath, ACR_HBUFF_LEN - 2, path))
return NULL;
if ((rc = GetFileAttributesW(wpath)) == INVALID_FILE_ATTRIBUTES)
@@ -175,7 +175,7 @@
*/
mblen = WideCharToMultiByte(CP_UTF8, 0, wfind.cFileName, -1,
entry->d_name, 1023, NULL, 0);
- if (!mblen)
+ if (mblen == 0 || mblen > 1023)
return GetLastError();
entry->d_ino = 0;
entry->d_type = 0;
Modified: commons/sandbox/runtime/trunk/src/main/native/os/win32/wutil.c
URL:
http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/win32/wutil.c?rev=803874&r1=803873&r2=803874&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/win32/wutil.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/win32/wutil.c Thu Aug 13
13:14:08 2009
@@ -40,6 +40,8 @@
NULL
};
+#define NON_UNC_PATH_LENGTH 248
+
wchar_t *res_name_from_filenamew(int type, wchar_t *rname,
const wchar_t *fname)
{
@@ -57,7 +59,7 @@
}
int utf8_to_unicode_path(wchar_t* retstr, size_t retlen,
- const char* srcstr, size_t unc)
+ const char* srcstr)
{
/* TODO: The computations could preconvert the string to determine
* the true size of the retstr, but that's a memory over speed
@@ -87,7 +89,7 @@
* Note that a utf-8 name can never result in more wide chars
* than the original number of utf-8 narrow chars.
*/
- if (srcremains > unc) {
+ if (srcremains > NON_UNC_PATH_LENGTH) {
if (srcstr[1] == ':' && (srcstr[2] == '/' || srcstr[2] == '\\')) {
wcscpy (retstr, L"\\\\?\\");
retlen -= 4;
@@ -96,7 +98,7 @@
else if ((srcstr[0] == '/' || srcstr[0] == '\\')
&& (srcstr[1] == '/' || srcstr[1] == '\\')
&& (srcstr[2] != '?')) {
- /* Skip the slashes */
+ /* Skip the slashes and ? */
srcstr += 2;
srcremains -= 2;
wcscpy (retstr, L"\\\\?\\UNC\\");