X-Git-Url: http://git.megacz.com/?p=nestedvm.git;a=blobdiff_plain;f=src%2Forg%2Fibex%2Fnestedvm%2FRuntime.java;h=5a1a895652bed4c8810a4a2b653bb2fdfe34b4f8;hp=d6db76d7b4e39f73b70dffb3e9c58f3773019aa7;hb=103c9465744d35d6ade7c0520a5faa2c6375e7b2;hpb=56fb6d1d8da7faf3cc7e73130b11961af7529d13 diff --git a/src/org/ibex/nestedvm/Runtime.java b/src/org/ibex/nestedvm/Runtime.java index d6db76d..5a1a895 100644 --- a/src/org/ibex/nestedvm/Runtime.java +++ b/src/org/ibex/nestedvm/Runtime.java @@ -732,10 +732,9 @@ public abstract class Runtime implements UsermodeConstants,Registers,Cloneable { return hostFSDirFD(f,data); } - // FIXME: Truncate final Seekable.File sf; try { - sf = new Seekable.File(f,write); + sf = new Seekable.File(f,write,(flags & O_TRUNC) != 0); } catch(FileNotFoundException e) { if(e.getMessage() != null && e.getMessage().indexOf("Permission denied") >= 0) throw new ErrnoException(EACCES); return null; @@ -810,12 +809,11 @@ public abstract class Runtime implements UsermodeConstants,Registers,Cloneable { } /** The stat/fstat syscall helper */ - // FIXME: Populate uid/gid/nlink int stat(FStat fs, int addr) throws FaultException { memWrite(addr+0,(fs.dev()<<16)|(fs.inode()&0xffff)); // st_dev (top 16), // st_ino (bottom 16) memWrite(addr+4,((fs.type()&0xf000))|(fs.mode()&0xfff)); // st_mode - memWrite(addr+8,1<<16); // st_nlink (top 16) // st_uid (bottom 16) - memWrite(addr+12,0); // st_gid (top 16) // st_rdev (bottom 16) + memWrite(addr+8,fs.nlink()<<16|fs.uid()&0xffff); // st_nlink (top 16) // st_uid (bottom 16) + memWrite(addr+12,fs.gid()<<16|0); // st_gid (top 16) // st_rdev (bottom 16) memWrite(addr+16,fs.size()); // st_size memWrite(addr+20,fs.atime()); // st_atime // memWrite(addr+24,0) // st_spare1 @@ -1236,7 +1234,7 @@ public abstract class Runtime implements UsermodeConstants,Registers,Cloneable { public TerminalFD(OutputStream os) { this(null,os); } public TerminalFD(InputStream is, OutputStream os) { super(is,os); } public void _close() { /* noop */ } - public FStat _fstat() { return new FStat() { public int type() { return S_IFCHR; } }; } + public FStat _fstat() { return new FStat() { public int type() { return S_IFCHR; } public int mode() { return 0600; } }; } } // FEATURE: TextInputStream: This is pretty inefficient but it is only used for reading from the console on win32