Skip to content

Commit 760e734

Browse files
committed
Inline the IOException conversion at each I/O call site
1 parent cbba0fe commit 760e734

4 files changed

Lines changed: 37 additions & 19 deletions

File tree

java_runtime/src/classes/java/io.rs

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,3 @@ pub use self::{
3434
output_stream::OutputStream, print_stream::PrintStream, print_writer::PrintWriter, random_access_file::RandomAccessFile, reader::Reader,
3535
serializable::Serializable, string_writer::StringWriter, writer::Writer,
3636
};
37-
38-
pub(crate) async fn checked<T>(jvm: &jvm::Jvm, result: crate::IOResult<T>) -> jvm::Result<T> {
39-
match result {
40-
Ok(x) => Ok(x),
41-
Err(_) => Err(jvm.exception("java/io/IOException", "I/O error").await),
42-
}
43-
}

java_runtime/src/classes/java/io/file_input_stream.rs

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -79,8 +79,12 @@ impl FileInputStream {
7979
let rust_file = FileDescriptor::file(jvm, context, fd).await?;
8080

8181
// TODO get os buffer size
82-
let stat = super::checked(jvm, rust_file.metadata().await).await?;
83-
let tell = super::checked(jvm, rust_file.tell().await).await?;
82+
let Ok(stat) = rust_file.metadata().await else {
83+
return Err(jvm.exception("java/io/IOException", "I/O error").await);
84+
};
85+
let Ok(tell) = rust_file.tell().await else {
86+
return Err(jvm.exception("java/io/IOException", "I/O error").await);
87+
};
8488

8589
let available = stat.size - tell;
8690

@@ -101,7 +105,9 @@ impl FileInputStream {
101105
let mut rust_file = FileDescriptor::file(jvm, context, fd).await?;
102106

103107
let mut rust_buf = vec![0; length as _];
104-
let read = super::checked(jvm, rust_file.read(&mut rust_buf).await).await?;
108+
let Ok(read) = rust_file.read(&mut rust_buf).await else {
109+
return Err(jvm.exception("java/io/IOException", "I/O error").await);
110+
};
105111
if read == 0 {
106112
return Ok(-1);
107113
}
@@ -118,7 +124,9 @@ impl FileInputStream {
118124
let mut rust_file = FileDescriptor::file(jvm, context, fd).await?;
119125

120126
let mut buf = [0; 1];
121-
let read = super::checked(jvm, rust_file.read(&mut buf).await).await?;
127+
let Ok(read) = rust_file.read(&mut buf).await else {
128+
return Err(jvm.exception("java/io/IOException", "I/O error").await);
129+
};
122130
if read == 0 {
123131
return Ok(-1);
124132
}

java_runtime/src/classes/java/io/file_output_stream.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,9 @@ impl FileOutputStream {
8787
let mut buf = vec![0; length as _];
8888
jvm.array_raw_buffer(&buffer).await?.read(offset as _, &mut buf)?;
8989

90-
super::checked(jvm, file.write(cast_slice(&buf)).await).await?;
90+
if file.write(cast_slice(&buf)).await.is_err() {
91+
return Err(jvm.exception("java/io/IOException", "I/O error").await);
92+
}
9193

9294
Ok(())
9395
}
@@ -98,7 +100,9 @@ impl FileOutputStream {
98100
let fd = jvm.get_field(&this, "fd", "Ljava/io/FileDescriptor;").await?;
99101
let mut file = FileDescriptor::file(jvm, context, fd).await?;
100102

101-
super::checked(jvm, file.write(&[byte as u8]).await).await?;
103+
if file.write(&[byte as u8]).await.is_err() {
104+
return Err(jvm.exception("java/io/IOException", "I/O error").await);
105+
}
102106

103107
Ok(())
104108
}

java_runtime/src/classes/java/io/random_access_file.rs

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,9 @@ impl RandomAccessFile {
114114
let mut rust_file = FileDescriptor::file(jvm, context, fd).await?;
115115

116116
let mut rust_buf = vec![0; length as usize];
117-
let read = super::checked(jvm, rust_file.read(&mut rust_buf).await).await?;
117+
let Ok(read) = rust_file.read(&mut rust_buf).await else {
118+
return Err(jvm.exception("java/io/IOException", "I/O error").await);
119+
};
118120

119121
jvm.array_raw_buffer_mut(&mut buf).await?.write(offset as _, &rust_buf)?;
120122

@@ -145,7 +147,9 @@ impl RandomAccessFile {
145147

146148
let mut rust_buf = vec![0; length as usize];
147149
jvm.array_raw_buffer(&buf).await?.read(offset as _, &mut rust_buf)?;
148-
super::checked(jvm, rust_file.write(&cast_vec(rust_buf)).await).await?;
150+
if rust_file.write(&cast_vec(rust_buf)).await.is_err() {
151+
return Err(jvm.exception("java/io/IOException", "I/O error").await);
152+
}
149153

150154
Ok(())
151155
}
@@ -156,7 +160,9 @@ impl RandomAccessFile {
156160
let fd = jvm.get_field(&this, "fd", "Ljava/io/FileDescriptor;").await?;
157161
let mut rust_file = FileDescriptor::file(jvm, context, fd).await?;
158162

159-
super::checked(jvm, rust_file.seek(pos as _).await).await?;
163+
if rust_file.seek(pos as _).await.is_err() {
164+
return Err(jvm.exception("java/io/IOException", "I/O error").await);
165+
}
160166

161167
Ok(())
162168
}
@@ -167,7 +173,9 @@ impl RandomAccessFile {
167173
let fd = jvm.get_field(&this, "fd", "Ljava/io/FileDescriptor;").await?;
168174
let mut rust_file = FileDescriptor::file(jvm, context, fd).await?;
169175

170-
super::checked(jvm, rust_file.set_len(new_length as _).await).await?;
176+
if rust_file.set_len(new_length as _).await.is_err() {
177+
return Err(jvm.exception("java/io/IOException", "I/O error").await);
178+
}
171179

172180
Ok(())
173181
}
@@ -178,7 +186,10 @@ impl RandomAccessFile {
178186
let fd = jvm.get_field(&this, "fd", "Ljava/io/FileDescriptor;").await?;
179187
let rust_file = FileDescriptor::file(jvm, context, fd).await?;
180188

181-
let len = super::checked(jvm, rust_file.metadata().await).await?.size;
189+
let Ok(metadata) = rust_file.metadata().await else {
190+
return Err(jvm.exception("java/io/IOException", "I/O error").await);
191+
};
192+
let len = metadata.size;
182193

183194
Ok(len as i64)
184195
}
@@ -189,7 +200,9 @@ impl RandomAccessFile {
189200
let fd = jvm.get_field(&this, "fd", "Ljava/io/FileDescriptor;").await?;
190201
let rust_file = FileDescriptor::file(jvm, context, fd).await?;
191202

192-
let pos = super::checked(jvm, rust_file.tell().await).await?;
203+
let Ok(pos) = rust_file.tell().await else {
204+
return Err(jvm.exception("java/io/IOException", "I/O error").await);
205+
};
193206

194207
Ok(pos as i64)
195208
}

0 commit comments

Comments
 (0)