Subversion Repositories Kolibri OS

Rev

Rev 6926 | Rev 6929 | 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  equ      2
  11. EBADF   equ      9
  12. EFAULT  equ     14
  13. ;EINVAL  equ     22      11   defined in stack.inc
  14. ENFILE  equ     23
  15. EMFILE  equ     24
  16. EPIPE   equ     32
  17.  
  18. FILEOP_CLOSE    equ     0
  19. FILEOP_READ     equ     1
  20. FILEOP_WRITE    equ     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.         mov     ebp, [ebp+FILED.file]
  92.         mov     eax, [ebp]
  93.         jmp     dword [eax+FILEOP_READ*4]
  94. .fail:
  95.         mov     [esp+SYSCALL_STACK._eax], -EBADF
  96.         ret
  97.  
  98. ;ssize_t write(int fd, const void *buf, size_t count);
  99. ; ecx fd
  100. ; edx buf
  101. ; esi count
  102.  
  103. align 4
  104. sys_write:
  105.         cmp     ecx, STDERR_FILENO
  106.         jbe     .fail
  107.         cmp     ecx, (PROC.pdt_0 - PROC.htab)/4
  108.         jae     .fail
  109.  
  110.         mov     edi, [current_process]
  111.         mov     ebp, [edi+PROC.htab+ecx*4]
  112.  
  113.         cmp     [ebp+FILED.magic], 'PIPE'
  114.         jne     .fail
  115.         cmp     [ebp+FILED.handle], ecx
  116.         jne     .fail
  117.  
  118.         mov     ebp, [ebp+FILED.file]
  119.         mov     eax, [ebp]
  120.         jmp     dword [eax+FILEOP_WRITE*4]
  121. .fail:
  122.         mov     [esp+SYSCALL_STACK._eax], -EBADF
  123.         ret
  124.  
  125.