mlibc: Mescc-tools support: chmod.
authorJan Nieuwenhuizen <janneke@gnu.org>
Sun, 26 Nov 2017 17:45:10 +0000 (18:45 +0100)
committerJan Nieuwenhuizen <janneke@gnu.org>
Sun, 26 Nov 2017 17:45:10 +0000 (18:45 +0100)
* stage0/x86.M1 (SYS_chmod): New define.
* lib/libc-gcc.c (chmod): New function.
* lib/libc-mes.c (chmod): New function.

lib/libc-gcc.c
lib/libc-mes.c
stage0/x86.M1

index 303d4e3e1ddc7c22e0cab2005b855bdffbc5f757..f951433c53978c199b958c0c3d48d3d626199678 100644 (file)
@@ -140,6 +140,26 @@ open (char const *s, int flags, ...)
 #endif
 }
 
+int
+chmod (char const *s, int mode)
+{
+#if !__TINYC__
+  int r;
+  //syscall (SYS_chmod, mode));
+  asm (
+       "mov    %1,%%ebx\n\t"
+       "mov    %2,%%ecx\n\t"
+       "mov    $0x0f,%%eax\n\t"
+       "int    $0x80\n\t"
+       "mov    %%eax,%0\n\t"
+       : "=r" (r)
+       : "" (s), "" (mode)
+       : "eax", "ebx", "ecx"
+       );
+  return r;
+#endif
+}
+
 int
 access (char const *s, int mode)
 {
index 3fbd68be58fbafbe128839b7ce6b28ab336085f1..670eaca4b926a92cc2b34e2ca60cbe632303bdf0 100644 (file)
@@ -68,6 +68,16 @@ open ()
   asm ("int____$0x80");                           // int    $0x80
 }
 
+void
+chmod ()
+{
+  asm ("mov____0x8(%ebp),%ebx !8");               // mov    0x8(%ebp),%ebx
+  asm ("mov____0x8(%ebp),%ecx !12");              // mov    0x8(%ebp),%ecx
+
+  asm ("mov____$i32,%eax SYS_chmod");             // mov    $0x0f,%eax
+  asm ("int____$0x80");                           // int    $0x80
+}
+
 void
 access ()
 {
index cbac03e288fcfd6901a97f3cbc6be69f84784c21..f1554a2297f08b800af07eb39ed3161aa0d36e45 100644 (file)
@@ -195,6 +195,7 @@ DEFINE SYS_write  04000000
 DEFINE SYS_open   05000000
 DEFINE SYS_close  06000000
 DEFINE SYS_unlink 0a000000
+DEFINE SYS_chmod  0f000000
 DEFINE SYS_lseek  13000000
 DEFINE SYS_access 21000000
 DEFINE SYS_brk    2d000000