Subversion Repositories Kolibri OS

Rev

Rev 6927 | Rev 7136 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

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