You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by py...@apache.org on 2007/04/27 13:31:07 UTC
svn commit: r533069 - in /harmony/enhanced/classlib/trunk/modules:
luni/src/main/java/java/io/File.java
luni/src/test/java/tests/api/java/io/FileTest.java
portlib/src/main/native/port/windows/hyfile.c
Author: pyang
Date: Fri Apr 27 04:31:06 2007
New Revision: 533069
URL: http://svn.apache.org/viewvc?view=rev&rev=533069
Log:
Revert the patch for HARMONY-3656(classlib][luni] File.mkdir does not support unicode), which causes HARMONY-3783([classlib][luni] java cannot find class in a directory started with dot)
Modified:
harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/io/File.java
harmony/enhanced/classlib/trunk/modules/luni/src/test/java/tests/api/java/io/FileTest.java
harmony/enhanced/classlib/trunk/modules/portlib/src/main/native/port/windows/hyfile.c
Modified: harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/io/File.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/io/File.java?view=diff&rev=533069&r1=533068&r2=533069
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/io/File.java (original)
+++ harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/io/File.java Fri Apr 27 04:31:06 2007
@@ -394,7 +394,7 @@
security.checkDelete(path);
}
- DeleteOnExit.addFile(Util.toUTF8String(properPath(true)));
+ DeleteOnExit.addFile(Util.toString(properPath(true)));
}
/**
@@ -450,7 +450,7 @@
*/
public String getAbsolutePath() {
byte[] absolute = properPath(false);
- return Util.toUTF8String(absolute);
+ return Util.toString(absolute);
}
/**
@@ -575,7 +575,7 @@
newResult[newLength] = 0;
newResult = getCanonImpl(newResult);
newLength = newResult.length;
- return Util.toUTF8String(newResult, 0, newLength);
+ return Util.toString(newResult, 0, newLength);
}
/**
@@ -1175,7 +1175,7 @@
if (properPath != null) {
return properPath;
}
- byte[] pathBytes = Util.getUTF8Bytes(path);
+ byte[] pathBytes = Util.getBytes(path);
if (isAbsoluteImpl(pathBytes)) {
return properPath = pathBytes;
}
@@ -1191,32 +1191,23 @@
return properPath;
}
if (path.length() == 0) {
- return properPath = Util.getUTF8Bytes(userdir);
+ return properPath = Util.getBytes(userdir);
}
int length = userdir.length();
-
- // Handle windows-like path
if (path.charAt(0) == '\\') {
if (length > 1 && userdir.charAt(1) == ':') {
- return properPath = Util.getUTF8Bytes(userdir.substring(0, 2)
+ return properPath = Util.getBytes(userdir.substring(0, 2)
+ path);
- } else {
- path = path.substring(1);
}
- }
-
- // Handle separator
- String result = userdir;
- if (userdir.charAt(length - 1) != separatorChar) {
- if (path.charAt(0) != separatorChar) {
- result += separator;
+ if (length > 0 && userdir.charAt(length - 1) == separatorChar) {
+ return properPath = Util.getBytes(userdir + path.substring(1));
}
- } else if (path.charAt(0) == separatorChar) {
- result = result.substring(0, length - 2);
-
+ return properPath = Util.getBytes(userdir + path);
+ }
+ if (length > 0 && userdir.charAt(length - 1) == separatorChar) {
+ return properPath = Util.getBytes(userdir + path);
}
- result += path;
- return properPath = Util.getUTF8Bytes(result);
+ return properPath = Util.getBytes(userdir + separator + path);
}
private static native byte[] properPathImpl(byte[] path);
Modified: harmony/enhanced/classlib/trunk/modules/luni/src/test/java/tests/api/java/io/FileTest.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/src/test/java/tests/api/java/io/FileTest.java?view=diff&rev=533069&r1=533068&r2=533069
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/luni/src/test/java/tests/api/java/io/FileTest.java (original)
+++ harmony/enhanced/classlib/trunk/modules/luni/src/test/java/tests/api/java/io/FileTest.java Fri Apr 27 04:31:06 2007
@@ -1812,7 +1812,6 @@
dir.deleteOnExit();
String longDirName = "abcdefghijklmnopqrstuvwx";// 24 chars
- String newbase = new String(dir + File.separator);
StringBuilder sb = new StringBuilder(dir + File.separator);
StringBuilder sb2 = new StringBuilder(dir + File.separator);
@@ -1831,7 +1830,7 @@
dir.mkdir() && dir.exists());
dir.deleteOnExit();
}
- dir = new File(sb2.toString());
+
// Test make many paths
while (dir.getCanonicalPath().length() < 256) {
sb2.append(0);
@@ -1840,25 +1839,6 @@
dir.mkdir() && dir.exists());
dir.deleteOnExit();
}
-
- // Regression test for HARMONY-3656
- String []ss = {
- "dir\u3400",
- "abc",
- "abc@123",
- "!@#$%^&",
- "~\u4E00!\u4E8C@\u4E09$",
- "\u56DB\u4E94\u516D",
- "\u4E03\u516B\u4E5D"
- };
- for (int i=0; i<ss.length; i++)
- {
- dir = new File(newbase, ss[i]);
- assertTrue("mkdir " + dir.getCanonicalPath() + " failed",
- dir.mkdir() && dir.exists()
- && dir.getCanonicalPath().equals(newbase + ss[i]));
- dir.deleteOnExit();
- }
}
/**
Modified: harmony/enhanced/classlib/trunk/modules/portlib/src/main/native/port/windows/hyfile.c
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/portlib/src/main/native/port/windows/hyfile.c?view=diff&rev=533069&r1=533068&r2=533069
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/portlib/src/main/native/port/windows/hyfile.c (original)
+++ harmony/enhanced/classlib/trunk/modules/portlib/src/main/native/port/windows/hyfile.c Fri Apr 27 04:31:06 2007
@@ -35,8 +35,6 @@
#define CDEV_CURRENT_FUNCTION _prototypes_private
static I_32 findError (I_32 errorCode);
-void convert_path_to_unicode(struct HyPortLibrary * portLibrary, const char *path,
- wchar_t **pathW);
#undef CDEV_CURRENT_FUNCTION
@@ -89,10 +87,7 @@
hyfile_attr (struct HyPortLibrary * portLibrary, const char *path)
{
DWORD result;
- wchar_t *pathW;
- convert_path_to_unicode(portLibrary, path, &pathW);
- result = GetFileAttributesW ((LPCWSTR) pathW);
- portLibrary->mem_free_memory(portLibrary, pathW);
+ result = GetFileAttributes ((LPCTSTR) path);
if (result == 0xFFFFFFFF)
{
result = GetLastError ();
@@ -332,21 +327,32 @@
#undef CDEV_CURRENT_FUNCTION
-#define CDEV_CURRENT_FUNCTION convert_path_to_unicode
-
-void
-convert_path_to_unicode(struct HyPortLibrary * portLibrary, const char *path,
- wchar_t **pathW)
+#define CDEV_CURRENT_FUNCTION hyfile_mkdir
+/**
+ * Create a directory.
+ *
+ * @param[in] portLibrary The port library
+ * @param[in] path Directory to be created.
+ *
+ * @return 0 on success, -1 on failure.
+ * @note Assumes all components of path up to the last directory already exist.
+ * @internal @todo return negative portable return code on failure.
+ */
+I_32 VMCALL
+hyfile_mkdir (struct HyPortLibrary * portLibrary, const char *path)
{
+ int returnVar=0;
int len = strlen(path);
- int wlen;
+ //If the length is longer than 248, unicode format should be used to CreateDirectroy.
+ //"." and ".." need be processed in the unicode format.
+ if(len >= 248){
char *canonicalpath;
int srcArrayCount=0;
int destArrayCount=0;
int slashCount=0; //record how many slashes it met.
int dotsCount=0; //record how many dots following a separator.
int *slashStack; //record position of every separator.
- slashStack = portLibrary->mem_allocate_memory(portLibrary, len*sizeof(int));
+ slashStack = portLibrary->mem_allocate_memory(portLibrary, len);
canonicalpath = portLibrary->mem_allocate_memory(portLibrary, len+5);
strcpy(canonicalpath,"\\\\?\\");
@@ -382,34 +388,13 @@
}
canonicalpath[destArrayCount]='\0';
- wlen = MultiByteToWideChar(CP_UTF8, 0, canonicalpath, -1, *pathW, 0);
- *pathW = portLibrary->mem_allocate_memory(portLibrary, wlen*sizeof(wchar_t));
- MultiByteToWideChar(CP_UTF8, 0, canonicalpath, -1, *pathW, wlen);
+ returnVar = CreateDirectory (canonicalpath, 0);
+
portLibrary->mem_free_memory(portLibrary, canonicalpath);
portLibrary->mem_free_memory(portLibrary, slashStack);
-}
-
-#undef CDEV_CURRENT_FUNCTION
-
-#define CDEV_CURRENT_FUNCTION hyfile_mkdir
-/**
- * Create a directory.
- *
- * @param[in] portLibrary The port library
- * @param[in] path Directory to be created.
- *
- * @return 0 on success, -1 on failure.
- * @note Assumes all components of path up to the last directory already exist.
- * @internal @todo return negative portable return code on failure.
- */
-I_32 VMCALL
-hyfile_mkdir (struct HyPortLibrary * portLibrary, const char *path)
-{
- int returnVar=0;
- wchar_t *pathW;
- convert_path_to_unicode(portLibrary, path, &pathW);
- returnVar = CreateDirectoryW (pathW, 0);
- portLibrary->mem_free_memory(portLibrary, pathW);
+ }else{
+ returnVar = CreateDirectory (path, 0);
+ }
if (returnVar)
{
@@ -774,25 +759,20 @@
I_32 VMCALL
hyfile_unlinkdir (struct HyPortLibrary * portLibrary, const char *path)
{
- wchar_t *pathW;
- convert_path_to_unicode(portLibrary, path, &pathW);
-
/* should be able to delete read-only dirs, so we set the file attribute back to normal */
- if (0 == SetFileAttributesW (pathW, FILE_ATTRIBUTE_NORMAL))
+ if (0 == SetFileAttributes (path, FILE_ATTRIBUTE_NORMAL))
{
I_32 error = GetLastError ();
portLibrary->error_set_last_error (portLibrary, error, findError (error)); /* continue */
}
- if (RemoveDirectoryW (pathW))
+ if (RemoveDirectory (path))
{
- portLibrary->mem_free_memory(portLibrary, pathW);
return 0;
}
else
{
I_32 error = GetLastError ();
- portLibrary->mem_free_memory(portLibrary, pathW);
portLibrary->error_set_last_error (portLibrary, error,
findError (error));
return -1;