X-Git-Url: http://git.megacz.com/?p=nestedvm.git;a=blobdiff_plain;f=src%2Forg%2Fibex%2Fnestedvm%2FRuntime.java;h=8e6b5f019572dd2e0c8ed0fa3c7c5f70c56e0f00;hp=201fde94894bf6023e5296dd9fa2b14a81036d77;hb=17cbaf0d981ab9c6f1b0b42fc40b20d00f91e417;hpb=69dfc6bbb44081ab04fbdcfe027f04e607c784d6 diff --git a/src/org/ibex/nestedvm/Runtime.java b/src/org/ibex/nestedvm/Runtime.java index 201fde9..8e6b5f0 100644 --- a/src/org/ibex/nestedvm/Runtime.java +++ b/src/org/ibex/nestedvm/Runtime.java @@ -767,10 +767,10 @@ public abstract class Runtime implements UsermodeConstants,Registers,Cloneable { return null; } catch(IOException e) { throw new ErrnoException(EIO); } - return new SeekableFD(sf,flags) { protected FStat _fstat() { return hostFStat(f,data); } }; + return new SeekableFD(sf,flags) { protected FStat _fstat() { return hostFStat(f,sf,data); } }; } - FStat hostFStat(File f, Object data) { return new HostFStat(f); } + FStat hostFStat(File f, Seekable.File sf, Object data) { return new HostFStat(f,sf); } FD hostFSDirFD(File f, Object data) { return null; } @@ -1413,10 +1413,13 @@ public abstract class Runtime implements UsermodeConstants,Registers,Cloneable { static class HostFStat extends FStat { private final File f; + private final Seekable.File sf; private final boolean executable; - public HostFStat(File f) { this(f,false); } - public HostFStat(File f, boolean executable) { + public HostFStat(File f, Seekable.File sf) { this(f,sf,false); } + public HostFStat(File f, boolean executable) {this(f,null,executable);} + public HostFStat(File f, Seekable.File sf, boolean executable) { this.f = f; + this.sf = sf; this.executable = executable; } public int dev() { return 1; } @@ -1431,7 +1434,13 @@ public abstract class Runtime implements UsermodeConstants,Registers,Cloneable { if(f.canWrite()) mode |= 0222; return mode; } - public int size() { return (int) f.length(); } + public int size() { + try { + return sf != null ? (int)sf.length() : (int)f.length(); + } catch (Exception x) { + return (int)f.length(); + } + } public int mtime() { return (int)(f.lastModified()/1000); } }