aboutsummaryrefslogtreecommitdiff
path: root/shadows/framework/src/main/java/org/robolectric/shadows/ShadowLinux.java
diff options
context:
space:
mode:
Diffstat (limited to 'shadows/framework/src/main/java/org/robolectric/shadows/ShadowLinux.java')
-rw-r--r--shadows/framework/src/main/java/org/robolectric/shadows/ShadowLinux.java17
1 files changed, 17 insertions, 0 deletions
diff --git a/shadows/framework/src/main/java/org/robolectric/shadows/ShadowLinux.java b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowLinux.java
index 3053314c5..41a109c7e 100644
--- a/shadows/framework/src/main/java/org/robolectric/shadows/ShadowLinux.java
+++ b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowLinux.java
@@ -9,7 +9,9 @@ import android.system.StructStat;
import android.util.Log;
import java.io.File;
import java.io.FileDescriptor;
+import java.io.FileInputStream;
import java.io.IOException;
+import java.io.InterruptedIOException;
import java.io.RandomAccessFile;
import java.time.Duration;
import libcore.io.Linux;
@@ -18,6 +20,7 @@ import org.robolectric.annotation.Implements;
@Implements(value = Linux.class, minSdk = Build.VERSION_CODES.O, isInAndroidSdk = false)
public class ShadowLinux {
+
@Implementation
public void mkdir(String path, int mode) throws ErrnoException {
new File(path).mkdirs();
@@ -76,6 +79,20 @@ public class ShadowLinux {
}
}
+ @Implementation
+ protected int pread(FileDescriptor fd, byte[] bytes, int byteOffset, int byteCount, long offset)
+ throws ErrnoException, InterruptedIOException {
+
+ try (FileInputStream fis = new FileInputStream(fd)) {
+ for (long n = offset; n > 0; ) {
+ n -= fis.skip(n);
+ }
+ return fis.read(bytes, byteOffset, byteCount);
+ } catch (IOException e) {
+ return -1;
+ }
+ }
+
private static String modeToString(int mode) {
if (mode == OsConstants.O_RDONLY) {
return "r";