You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by li...@apache.org on 2007/02/12 05:18:40 UTC
svn commit: r506271 - in /harmony/enhanced/classlib/trunk/modules/luni/src:
main/java/java/io/ main/native/luni/shared/ main/native/luni/unix/
test/java/tests/api/java/io/
Author: liangyx
Date: Sun Feb 11 20:18:39 2007
New Revision: 506271
URL: http://svn.apache.org/viewvc?view=rev&rev=506271
Log:
Apply patch for HARMONY-1494([classlib][luni] FileDescriptor.sync() throws unexpected SyncFailedException when the descriptor is read-only)
Modified:
harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/io/FileDescriptor.java
harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/io/FileInputStream.java
harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/io/RandomAccessFile.java
harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/shared/filedesc.c
harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/unix/exports.txt
harmony/enhanced/classlib/trunk/modules/luni/src/test/java/tests/api/java/io/FileDescriptorTest.java
Modified: harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/io/FileDescriptor.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/io/FileDescriptor.java?view=diff&rev=506271&r1=506270&r2=506271
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/io/FileDescriptor.java (original)
+++ harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/io/FileDescriptor.java Sun Feb 11 20:18:39 2007
@@ -49,6 +49,8 @@
* A value of -1 indicates that this FileDescriptor is invalid.
*/
long descriptor = -1;
+
+ boolean readOnly = false;
private static native void oneTimeInitialization();
@@ -76,7 +78,14 @@
* @throws SyncFailedException
* when the operation fails
*/
- public native void sync() throws SyncFailedException;
+ public void sync() throws SyncFailedException {
+ // if the descriptor is a read-only one, do nothing
+ if (!readOnly) {
+ syncImpl();
+ }
+ }
+
+ private native void syncImpl() throws SyncFailedException;
/**
* Answers a boolean indicating whether or not this FileDescriptor is valid.
Modified: harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/io/FileInputStream.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/io/FileInputStream.java?view=diff&rev=506271&r1=506270&r2=506271
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/io/FileInputStream.java (original)
+++ harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/io/FileInputStream.java Sun Feb 11 20:18:39 2007
@@ -72,6 +72,7 @@
security.checkRead(filePath);
}
fd = new FileDescriptor();
+ fd.readOnly = true;
fd.descriptor = fileSystem.open(file.properPath(true),
IFileSystem.O_RDONLY);
innerFD = true;
Modified: harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/io/RandomAccessFile.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/io/RandomAccessFile.java?view=diff&rev=506271&r1=506270&r2=506271
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/io/RandomAccessFile.java (original)
+++ harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/io/RandomAccessFile.java Sun Feb 11 20:18:39 2007
@@ -76,9 +76,12 @@
super();
int options = 0;
-
+
+ fd = new FileDescriptor();
+
if (mode.equals("r")) { //$NON-NLS-1$
isReadOnly = true;
+ fd.readOnly = true;
options = IFileSystem.O_RDONLY;
} else if (mode.equals("rw") || mode.equals("rws") || mode.equals("rwd")) { //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
isReadOnly = false;
@@ -102,8 +105,7 @@
security.checkWrite(file.getPath());
}
}
-
- fd = new FileDescriptor();
+
fd.descriptor = fileSystem.open(file.properPath(true), options);
channel = FileChannelFactory.getFileChannel(this, fd.descriptor,
options);
Modified: harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/shared/filedesc.c
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/shared/filedesc.c?view=diff&rev=506271&r1=506270&r2=506271
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/shared/filedesc.c (original)
+++ harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/shared/filedesc.c Sun Feb 11 20:18:39 2007
@@ -31,7 +31,7 @@
}
JNIEXPORT void JNICALL
-Java_java_io_FileDescriptor_sync (JNIEnv * env, jobject recv)
+Java_java_io_FileDescriptor_syncImpl (JNIEnv * env, jobject recv)
{
/* Cause all unwritten data to be written out to the OS */
IDATA descriptor;
Modified: harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/unix/exports.txt
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/unix/exports.txt?view=diff&rev=506271&r1=506270&r2=506271
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/unix/exports.txt (original)
+++ harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/unix/exports.txt Sun Feb 11 20:18:39 2007
@@ -44,7 +44,7 @@
Java_java_io_File_setLastModifiedImpl
Java_java_io_File_setReadOnlyImpl
Java_java_io_FileDescriptor_oneTimeInitialization
-Java_java_io_FileDescriptor_sync
+Java_java_io_FileDescriptor_syncImpl
Java_java_io_FileDescriptor_valid
Java_java_io_FileInputStream_available
Java_java_io_FileInputStream_closeImpl
Modified: harmony/enhanced/classlib/trunk/modules/luni/src/test/java/tests/api/java/io/FileDescriptorTest.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/src/test/java/tests/api/java/io/FileDescriptorTest.java?view=diff&rev=506271&r1=506270&r2=506271
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/luni/src/test/java/tests/api/java/io/FileDescriptorTest.java (original)
+++ harmony/enhanced/classlib/trunk/modules/luni/src/test/java/tests/api/java/io/FileDescriptorTest.java Sun Feb 11 20:18:39 2007
@@ -22,6 +22,7 @@
import java.io.FileDescriptor;
import java.io.FileInputStream;
import java.io.FileOutputStream;
+import java.io.RandomAccessFile;
public class FileDescriptorTest extends junit.framework.TestCase {
@@ -49,23 +50,29 @@
/**
* @tests java.io.FileDescriptor#sync()
*/
- public void test_sync() {
+ public void test_sync() throws Exception {
// Test for method void java.io.FileDescriptor.sync()
-
- try {
- f = new File(System.getProperty("user.dir"), "fd" + platformId
- + ".tst");
- f.delete();
- fos = new FileOutputStream(f.getPath());
- fos.write("Test String".getBytes());
- fis = new FileInputStream(f.getPath());
- FileDescriptor fd = fos.getFD();
- fd.sync();
- assertTrue("Bytes were not written after sync",
- fis.available() == "Test String".length());
- } catch (Exception e) {
- fail("Exception during test : " + e.getMessage());
- }
+ f = new File(System.getProperty("user.dir"), "fd" + platformId + ".tst");
+ f.delete();
+ fos = new FileOutputStream(f.getPath());
+ fos.write("Test String".getBytes());
+ fis = new FileInputStream(f.getPath());
+ FileDescriptor fd = fos.getFD();
+ fd.sync();
+ int length = "Test String".length();
+ assertEquals("Bytes were not written after sync", length, fis
+ .available());
+
+ // Regression test for Harmony-1494
+ fd = fis.getFD();
+ fd.sync();
+ assertEquals("Bytes were not written after sync", length, fis
+ .available());
+
+ RandomAccessFile raf = new RandomAccessFile(f, "r");
+ fd = raf.getFD();
+ fd.sync();
+ raf.close();
}
/**