diff options
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.java | 17 |
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"; |