Subversion Repositories Kolibri OS

Rev

Rev 6929 | Rev 9715 | 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
 
7136 dunkaist 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
6926 serge 17
 
7136 dunkaist 18
FILEOP_CLOSE    =     0
19
FILEOP_READ     =     1
20
FILEOP_WRITE    =     2
6926 serge 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
 
6929 serge 91
        test    [ebp+FILED.mode], F_READ
92
        jz      .fail
93
 
6926 serge 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
 
6927 serge 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
6929 serge 120
        test    [ebp+FILED.mode], F_WRITE
121
        jz      .fail
6927 serge 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