implement truncate and fstat better
[nestedvm.git] / src / org / ibex / nestedvm / UnixRuntime.java
index 24be4e8..24a5ece 100644 (file)
@@ -533,7 +533,7 @@ public abstract class UnixRuntime extends Runtime implements Cloneable {
         return n;
     }
     
-    // FIXME: UDP is totally broken
+    // FEATURE: UDP is totally broken
     
     static class SocketFD extends FD {
         public static final int TYPE_STREAM = 0;
@@ -986,7 +986,7 @@ public abstract class UnixRuntime extends Runtime implements Cloneable {
             }
         }
         
-        private static class MP implements Sort.Sortable {
+        private static class MP implements Sort.Comparable {
             public MP(String path, FS fs) { this.path = path; this.fs = fs; }
             public String path;
             public FS fs;
@@ -1051,6 +1051,7 @@ public abstract class UnixRuntime extends Runtime implements Cloneable {
             mps = newMPS;
         }
         
+        // FEATURE: We shouldn't need to special case the root dir, it should work in the MP array
         private Object fsop(int op, UnixRuntime r, String normalizedPath, int arg1, int arg2) throws ErrnoException {
             int pl = normalizedPath.length();
             if(pl != 0) {
@@ -1059,13 +1060,14 @@ public abstract class UnixRuntime extends Runtime implements Cloneable {
                 for(int i=0;i<list.length;i++) {
                     MP mp = list[i];
                     int mpl = mp.path.length();
-                    if(normalizedPath.startsWith(mp.path) && (pl == mpl || (pl < mpl && normalizedPath.charAt(mpl) == '/')))
+                    if(normalizedPath.startsWith(mp.path) && (pl == mpl || normalizedPath.charAt(mpl) == '/'))
                         return dispatch(mp.fs,op,r,pl == mpl ? "" : normalizedPath.substring(mpl+1),arg1,arg2);
                 }
             }
             return dispatch(root,op,r,normalizedPath,arg1,arg2);
         }
         
+        // FEATURE: move this into FS so some filesystem can override it directly (devfs)
         private static Object dispatch(FS fs, int op, UnixRuntime r, String path, int arg1, int arg2) throws ErrnoException {
             switch(op) {
                 case OPEN: return fs.open(r,path,arg1,arg2);
@@ -1092,7 +1094,7 @@ public abstract class UnixRuntime extends Runtime implements Cloneable {
         }
 
         public synchronized Object exec(UnixRuntime r, String path) throws ErrnoException {
-            // FIXME: Hideous hack to make a standalone busybox possible
+            // HACK: Hideous hack to make a standalone busybox possible
             if(path.equals("bin/busybox") && Boolean.valueOf(getSystemProperty("nestedvm.busyboxhack")).booleanValue())
                 return r.getClass();
             FStat fstat = stat(r,path);
@@ -1517,7 +1519,7 @@ public abstract class UnixRuntime extends Runtime implements Cloneable {
             if(path.startsWith("fd/")) {
                 int n;
                 try {
-                    n = Integer.parseInt(path.substring(4));
+                    n = Integer.parseInt(path.substring(3));
                 } catch(NumberFormatException e) {
                     return null;
                 }