Fix gcc inline assembler operand constraints for syscall -- as pushl modifies %esp...
[pintos-anon] / src / lib / user / syscall.c
index 2485530fc08f053bfd15935480b3474cc0528bf6..c8385bc3364b1eabc57e68bae885fe458537b42a 100644 (file)
@@ -38,8 +38,8 @@
              "pushl %[number]; int $0x30; addl $12, %%esp"      \
                : "=a" (retval)                                  \
                : [number] "i" (NUMBER),                         \
-                 [arg0] "g" (ARG0),                             \
-                 [arg1] "g" (ARG1)                              \
+                 [arg0] "r" (ARG0),                             \
+                 [arg1] "r" (ARG1)                              \
                : "memory");                                     \
           retval;                                               \
         })
@@ -54,9 +54,9 @@
              "pushl %[number]; int $0x30; addl $16, %%esp"      \
                : "=a" (retval)                                  \
                : [number] "i" (NUMBER),                         \
-                 [arg0] "g" (ARG0),                             \
-                 [arg1] "g" (ARG1),                             \
-                 [arg2] "g" (ARG2)                              \
+                 [arg0] "r" (ARG0),                             \
+                 [arg1] "r" (ARG1),                             \
+                 [arg2] "r" (ARG2)                              \
                : "memory");                                     \
           retval;                                               \
         })
@@ -165,9 +165,20 @@ mkdir (const char *dir)
   return syscall1 (SYS_MKDIR, dir);
 }
 
-void
-lsdir (void)
+bool
+readdir (int fd, char name[READDIR_MAX_LEN + 1]) 
 {
-  syscall0 (SYS_LSDIR);
+  return syscall2 (SYS_READDIR, fd, name);
 }
 
+bool
+isdir (int fd) 
+{
+  return syscall1 (SYS_ISDIR, fd);
+}
+
+int
+inumber (int fd) 
+{
+  return syscall1 (SYS_INUMBER, fd);
+}