1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
package ElymasLinux;
use strict;
use warnings;
use Elymas;
use POSIX ();
our $linux = {
'open' => [sub {
my ($data, $scope) = @_;
my $mode = popInt($data);
my $flags = popInt($data);
my $pathname = popString($data);
my $fd = POSIX::open($pathname, $flags, $mode);
$fd = -1 unless defined $fd;
push @$data, [$fd, 'int'];
}, ['func', 'linux .open'], 'active'],
'close' => [sub {
my ($data, $scope) = @_;
my $fd = popInt($data);
my $ret = POSIX::close($fd);
$ret = -1 unless defined $ret;
push @$data, [$ret, 'int'];
}, ['func', 'linux .close'], 'active'],
# 'read' => [sub {
# my ($data, $scope) = @_;
#
# my $count = popInt($data);
# my $buf = popArray($data);
# my $fd = popInt($data);
#
# my $ret = POSIX::close($fd);
# $ret = -1 unless defined $ret;
#
# push @$data, [$ret, 'int'];
# }, ['func', 'linux .read'], 'active'],
};
map { installIntConstant($_) } qw(O_RDONLY O_RDWR O_WRONLY);
sub installIntConstant {
my ($name) = @_;
my $elymasName = $name;
$elymasName =~ s/_//g;
$linux->{$elymasName} = [${$POSIX::{$name}}, 'int', 'passive'];
}
1;
|