devfs fixes
[nestedvm.git] / src / org / ibex / nestedvm / Runtime.java
index 272e4e6..ff33ba9 100644 (file)
@@ -359,7 +359,8 @@ public abstract class Runtime implements UsermodeConstants,Registers,Cloneable {
                 if(page == null) throw new WriteFaultException(a<<2);
                 int index = a&pageWordMask;
                 int n = min(c,pageWords-index);
-                Arrays.fill(page,index,index+n,fourBytes);
+                /* Arrays.fill(page,index,index+n,fourBytes);*/
+                for(int i=index;i<index+n;i++) page[i] = fourBytes;
                 a += n; c -= n;
             }
             addr = a<<2; count&=3;
@@ -721,8 +722,7 @@ public abstract class Runtime implements UsermodeConstants,Registers,Cloneable {
         
         if((flags & (O_EXCL|O_CREAT)) == (O_EXCL|O_CREAT)) {
             try {
-                // NOTE: createNewFile is a Java2 function
-                if(!f.createNewFile()) throw new ErrnoException(EEXIST);
+                if(Platform.atomicCreateFile(f)) throw new ErrnoException(EEXIST);
             } catch(IOException e) {
                 throw new ErrnoException(EIO);
             }
@@ -942,7 +942,7 @@ public abstract class Runtime implements UsermodeConstants,Registers,Cloneable {
                 ret = callJavaCB.call(a,b,c,d);
             } catch(RuntimeException e) {
                 System.err.println("Error while executing callJavaCB");
-                    e.printStackTrace();
+                e.printStackTrace();
                 ret = 0;
             }
             state = RUNNING;
@@ -984,7 +984,7 @@ public abstract class Runtime implements UsermodeConstants,Registers,Cloneable {
                 for(i=arg;i<OPEN_MAX;i++) if(fds[i]==null) break;
                 if(i==OPEN_MAX) return -EMFILE;
                 fds[i] = fd.dup();
-                return 0;
+                return i;
             case F_GETFL:
                 return fd.flags();
             case F_SETFD:
@@ -1236,7 +1236,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