Subversion Repositories Kolibri OS

Rev

Rev 6929 | Rev 9715 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2. ;;                                                              ;;
  3. ;; Copyright (C) KolibriOS team 2004-2017. All rights reserved. ;;
  4. ;;  Distributed under terms of the GNU General Public License.  ;;
  5. ;;                                                              ;;
  6. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  7.  
  8. $Revision: 6917 $
  9.  
  10. ENOENT  =      2
  11. EBADF   =      9
  12. EFAULT  =     14
  13. ;EINVAL  =     22      11   defined in stack.inc
  14. ENFILE  =     23
  15. EMFILE  =     24
  16. EPIPE   =     32
  17.  
  18. FILEOP_CLOSE    =     0
  19. FILEOP_READ     =     1
  20. FILEOP_WRITE    =     2
  21.  
  22.  
  23. include "futex.inc"
  24.  
  25. iglobal
  26. align 4
  27. sys_futex_call:
  28.         dd sys_futex.destroy        ;1
  29.         dd sys_futex.wait           ;2
  30.         dd sys_futex.wake           ;3
  31.         dd sys_futex.requeue        ;4
  32.         dd sys_futex.cmp_requeue    ;5
  33.         dd sys_futex.wait_bitset    ;6
  34.         dd sys_futex.wake_bitset    ;7
  35. endg
  36.  
  37. include "pipe.inc"
  38.  
  39. iglobal
  40. align 4
  41. sys_posix_call:
  42.         dd sys_futex.init   ;0     futex_init
  43.         dd sys_futex        ;1     futex_destroy
  44.         dd sys_futex        ;2     futex_wait
  45.         dd sys_futex        ;3     futex_wake
  46.         dd sys_futex        ;4     reserved
  47.         dd sys_futex        ;5     reserved
  48.         dd sys_futex        ;6     reserved
  49.         dd sys_futex        ;7     reserved
  50.         dd sys_posix.fail   ;8     sys_open
  51.         dd sys_posix.fail   ;9     sys_close
  52.         dd sys_read         ;10    read()
  53.         dd sys_write        ;11    write()
  54.         dd sys_posix.fail   ;12    sys_dup3
  55.         dd sys_pipe2        ;13
  56. .end:
  57. endg
  58.  
  59. align 4
  60. sys_posix:
  61.         cmp     ebx, (sys_posix_call.end-sys_posix_call)/4
  62.         jae     .fail
  63.  
  64.         jmp     dword [sys_posix_call+ebx*4]
  65.  
  66. .fail:
  67.         mov     [esp+SYSCALL_STACK._eax], -EBADF
  68.         ret
  69.  
  70.  
  71. ;ssize_t read(int fd, void *buf, size_t count);
  72. ; ecx fd
  73. ; edx buf
  74. ; esi count
  75.  
  76. align 4
  77. sys_read:
  78.         cmp     ecx, STDERR_FILENO
  79.         jbe     .fail
  80.         cmp     ecx, (PROC.pdt_0 - PROC.htab)/4
  81.         jae     .fail
  82.  
  83.         mov     edi, [current_process]
  84.         mov     ebp, [edi+PROC.htab+ecx*4]
  85.  
  86.         cmp     [ebp+FILED.magic], 'PIPE'
  87.         jne     .fail
  88.         cmp     [ebp+FILED.handle], ecx
  89.         jne     .fail
  90.  
  91.         test    [ebp+FILED.mode], F_READ
  92.         jz      .fail
  93.  
  94.         mov     ebp, [ebp+FILED.file]
  95.         mov     eax, [ebp]
  96.         jmp     dword [eax+FILEOP_READ*4]
  97. .fail:
  98.         mov     [esp+SYSCALL_STACK._eax], -EBADF
  99.         ret
  100.  
  101. ;ssize_t write(int fd, const void *buf, size_t count);
  102. ; ecx fd
  103. ; edx buf
  104. ; esi count
  105.  
  106. align 4
  107. sys_write:
  108.         cmp     ecx, STDERR_FILENO
  109.         jbe     .fail
  110.         cmp     ecx, (PROC.pdt_0 - PROC.htab)/4
  111.         jae     .fail
  112.  
  113.         mov     edi, [current_process]
  114.         mov     ebp, [edi+PROC.htab+ecx*4]
  115.  
  116.         cmp     [ebp+FILED.magic], 'PIPE'
  117.         jne     .fail
  118.         cmp     [ebp+FILED.handle], ecx
  119.         jne     .fail
  120.         test    [ebp+FILED.mode], F_WRITE
  121.         jz      .fail
  122.  
  123.         mov     ebp, [ebp+FILED.file]
  124.         mov     eax, [ebp]
  125.         jmp     dword [eax+FILEOP_WRITE*4]
  126. .fail:
  127.         mov     [esp+SYSCALL_STACK._eax], -EBADF
  128.         ret
  129.  
  130.