Subversion Repositories Kolibri OS

Rev

Rev 9831 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
6926 serge 1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2
;;                                                              ;;
9715 Doczom 3
;; Copyright (C) KolibriOS team 2004-2022. All rights reserved. ;;
6926 serge 4
;;  Distributed under terms of the GNU General Public License.  ;;
5
;;                                                              ;;
6
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
7
 
8130 dunkaist 8
$Revision: 9884 $
6926 serge 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:
9715 Doczom 61
        cmp     ebx, (sys_posix_call.end - sys_posix_call)/4
6926 serge 62
        jae     .fail
63
 
9715 Doczom 64
        jmp     dword [sys_posix_call + ebx*4]
6926 serge 65
 
66
.fail:
9831 dunkaist 67
        mov     [esp + SYSCALL_STACK.eax], -EBADF
6926 serge 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]
9715 Doczom 84
        mov     ebp, [edi + PROC.htab + ecx*4]
6926 serge 85
 
9884 Doczom 86
        stdcall is_region_userspace, ebp, 4
87
        jz      .fail
88
 
9715 Doczom 89
        cmp     [ebp + FILED.magic], 'PIPE'
6926 serge 90
        jne     .fail
9715 Doczom 91
        cmp     [ebp + FILED.handle], ecx
6926 serge 92
        jne     .fail
93
 
9715 Doczom 94
        test    [ebp + FILED.mode], F_READ
6929 serge 95
        jz      .fail
96
 
9715 Doczom 97
        mov     ebp, [ebp + FILED.file]
6926 serge 98
        mov     eax, [ebp]
9715 Doczom 99
        jmp     dword [eax + FILEOP_READ*4]
6926 serge 100
.fail:
9831 dunkaist 101
        mov     [esp + SYSCALL_STACK.eax], -EBADF
6926 serge 102
        ret
103
 
6927 serge 104
;ssize_t write(int fd, const void *buf, size_t count);
105
; ecx fd
106
; edx buf
107
; esi count
108
 
109
align 4
110
sys_write:
111
        cmp     ecx, STDERR_FILENO
112
        jbe     .fail
113
        cmp     ecx, (PROC.pdt_0 - PROC.htab)/4
114
        jae     .fail
115
 
116
        mov     edi, [current_process]
9715 Doczom 117
        mov     ebp, [edi + PROC.htab+ecx*4]
6927 serge 118
 
9884 Doczom 119
        stdcall is_region_userspace, ebp, 4
120
        jz      .fail
121
 
9715 Doczom 122
        cmp     [ebp + FILED.magic], 'PIPE'
6927 serge 123
        jne     .fail
9715 Doczom 124
        cmp     [ebp + FILED.handle], ecx
6927 serge 125
        jne     .fail
9715 Doczom 126
        test    [ebp + FILED.mode], F_WRITE
6929 serge 127
        jz      .fail
6927 serge 128
 
9715 Doczom 129
        mov     ebp, [ebp + FILED.file]
6927 serge 130
        mov     eax, [ebp]
9715 Doczom 131
        jmp     dword [eax + FILEOP_WRITE*4]
6927 serge 132
.fail:
9831 dunkaist 133
        mov     [esp + SYSCALL_STACK.eax], -EBADF
6927 serge 134
        ret
135