Subversion Repositories Kolibri OS

Rev

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

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