new filesystem stuff
[nestedvm.git] / src / org / ibex / nestedvm / Runtime.java
index 1065693..74b3a12 100644 (file)
@@ -1,3 +1,7 @@
+// Copyright 2000-2005 the Contributors, as shown in the revision logs.
+// Licensed under the Apache Public Source License 2.0 ("the License").
+// You may not use this file except in compliance with the License.
+
 // Copyright 2003 Brian Alliet
 // Based on org.xwt.imp.MIPS by Adam Megacz
 // Portions Copyright 2003 Adam Megacz
@@ -727,7 +731,6 @@ public abstract class Runtime implements UsermodeConstants,Registers,Cloneable {
         if((flags & ~(3|O_CREAT|O_EXCL|O_APPEND|O_TRUNC)) != 0) {
             if(STDERR_DIAG)
                 System.err.println("WARNING: Unsupported flags passed to open(\"" + f + "\"): " + toHex(flags & ~(3|O_CREAT|O_EXCL|O_APPEND|O_TRUNC)));
-           
             throw new ErrnoException(ENOTSUP);
         }
         boolean write = (flags&3) != RD_ONLY;
@@ -736,7 +739,7 @@ public abstract class Runtime implements UsermodeConstants,Registers,Cloneable {
         
         if((flags & (O_EXCL|O_CREAT)) == (O_EXCL|O_CREAT)) {
             try {
-                if(Platform.atomicCreateFile(f)) throw new ErrnoException(EEXIST);
+                if(!Platform.atomicCreateFile(f)) throw new ErrnoException(EEXIST);
             } catch(IOException e) {
                 throw new ErrnoException(EIO);
             }
@@ -1019,7 +1022,7 @@ public abstract class Runtime implements UsermodeConstants,Registers,Cloneable {
                 return -ENOSYS;
         }
     }
-            
+          
     /** The syscall dispatcher.
         The should be called by subclasses when the syscall instruction is invoked.
         <i>syscall</i> should be the contents of V0 and <i>a</i>, <i>b</i>, <i>c</i>, and <i>d</i> should be 
@@ -1028,9 +1031,11 @@ public abstract class Runtime implements UsermodeConstants,Registers,Cloneable {
     protected final int syscall(int syscall, int a, int b, int c, int d, int e, int f) {
         try {
             int n = _syscall(syscall,a,b,c,d,e,f);
-            //if(n < 0) System.err.println("syscall: " + syscall + " returned " + n);
+            //if(n<0) throw new ErrnoException(-n);
             return n;
         } catch(ErrnoException ex) {
+            //System.err.println("While executing syscall: " + syscall + ":");
+            //if(syscall == SYS_open) try { System.err.println("Failed to open " + cstring(a) + " errno " + ex.errno); } catch(Exception e2) { }
             //ex.printStackTrace();
             return -ex.errno;
         } catch(FaultException ex) {