Subversion Repositories Kolibri OS

Rev

Rev 8130 | Rev 9831 | Go to most recent revision | 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: 9715 $
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:
9715 Doczom 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
 
9715 Doczom 86
        cmp     [ebp + FILED.magic], 'PIPE'
6926 serge 87
        jne     .fail
9715 Doczom 88
        cmp     [ebp + FILED.handle], ecx
6926 serge 89
        jne     .fail
90
 
9715 Doczom 91
        test    [ebp + FILED.mode], F_READ
6929 serge 92
        jz      .fail
93
 
9715 Doczom 94
        mov     ebp, [ebp + FILED.file]
6926 serge 95
        mov     eax, [ebp]
9715 Doczom 96
        jmp     dword [eax + FILEOP_READ*4]
6926 serge 97
.fail:
9715 Doczom 98
        mov     [esp + SYSCALL_STACK._eax], -EBADF
6926 serge 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]
9715 Doczom 114
        mov     ebp, [edi + PROC.htab+ecx*4]
6927 serge 115
 
9715 Doczom 116
        cmp     [ebp + FILED.magic], 'PIPE'
6927 serge 117
        jne     .fail
9715 Doczom 118
        cmp     [ebp + FILED.handle], ecx
6927 serge 119
        jne     .fail
9715 Doczom 120
        test    [ebp + FILED.mode], F_WRITE
6929 serge 121
        jz      .fail
6927 serge 122
 
9715 Doczom 123
        mov     ebp, [ebp + FILED.file]
6927 serge 124
        mov     eax, [ebp]
9715 Doczom 125
        jmp     dword [eax + FILEOP_WRITE*4]
6927 serge 126
.fail:
9715 Doczom 127
        mov     [esp + SYSCALL_STACK._eax], -EBADF
6927 serge 128
        ret
129