Subversion Repositories Kolibri OS

Rev

Rev 6926 | Rev 6929 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
6926 serge 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
6927 serge 16
EPIPE   equ     32
6926 serge 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
6927 serge 52
        dd sys_read         ;10    read()
53
        dd sys_write        ;11    write()
6926 serge 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
 
6927 serge 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