Skip to content

Commit 5fb915e

Browse files
committed
Reach an usable version of libuv
1 parent 06c8943 commit 5fb915e

File tree

6 files changed

+470
-468
lines changed

6 files changed

+470
-468
lines changed
Lines changed: 37 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,40 @@
1-
import scala.scalanative._
1+
import scalanative._
2+
import scalanative.native._, stdlib._, stdio._
3+
24

35
object Hello extends App {
4-
val time = native.stackalloc[native.CDouble]
5-
val result = uv.uv_uptime(time)
6-
//println("time: " + time + " result: " + result)
7-
println("Return " + result + " uptime: " + !time)
6+
val time = stackalloc[CDouble]
7+
uv.uv_uptime(time)
8+
println("uptime: " + !time)
9+
10+
11+
def on_new_connection(server: Ptr[uv.uv_stream_t], status: CInt): Unit = {
12+
println(s"it works ! Stauts: $status")
13+
exit(0)
14+
}
15+
16+
val callback = CFunctionPtr.fromFunction2(on_new_connection)
17+
18+
native.Zone { z =>
19+
20+
val loop = uv.uv_default_loop()
21+
22+
val addr = malloc(sizeof[in.struct_sockaddr_in]).cast[Ptr[in.struct_sockaddr_in]]
23+
uv.uv_ip4_addr(toCString("127.0.0.1")(z), 8080, addr)
24+
25+
val server = malloc(sizeof[uv.uv_tcp_t]).cast[Ptr[uv.uv_tcp_t]]
26+
27+
val flags: Int = 0;
28+
29+
30+
uv.uv_tcp_init(loop, server)
31+
uv.uv_tcp_bind(server, addr.cast[Ptr[in.struct_sockaddr]], flags.toUInt)
32+
uv.uv_listen(server.asInstanceOf[Ptr[uv.uv_stream_t]], 128, callback)
33+
uv.uv_run(loop, uvEnums.enum_uv_run_mode_UV_RUN_DEFAULT)
34+
35+
36+
}
37+
38+
39+
840
}
Lines changed: 17 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -1,72 +1,13 @@
11
import scala.scalanative._
22
import scala.scalanative.native.Nat._
33

4+
import types._
5+
6+
@native.link("netdb")
47
@native.extern
58
object dirent {
6-
type __u_char = native.CUnsignedChar
7-
type __u_short = native.CUnsignedShort
8-
type __u_int = native.CUnsignedInt
9-
type __u_long = native.CUnsignedLong
10-
type __int8_t = native.CSignedChar
11-
type __uint8_t = native.CUnsignedChar
12-
type __int16_t = native.CShort
13-
type __uint16_t = native.CUnsignedShort
14-
type __int32_t = native.CInt
15-
type __uint32_t = native.CUnsignedInt
16-
type __int64_t = native.CLong
17-
type __uint64_t = native.CUnsignedLong
18-
type __quad_t = native.CLong
19-
type __u_quad_t = native.CUnsignedLong
20-
type __dev_t = native.CUnsignedLong
21-
type __uid_t = native.CUnsignedInt
22-
type __gid_t = native.CUnsignedInt
23-
type __ino_t = native.CUnsignedLong
24-
type __ino64_t = native.CUnsignedLong
25-
type __mode_t = native.CUnsignedInt
26-
type __nlink_t = native.CUnsignedLong
27-
type __off_t = native.CLong
28-
type __off64_t = native.CLong
29-
type __pid_t = native.CInt
30-
type struct___fsid_t = native.CStruct1[native.CArray[native.CInt, _2]]
31-
type __fsid_t = struct___fsid_t
32-
type __clock_t = native.CLong
33-
type __rlim_t = native.CUnsignedLong
34-
type __rlim64_t = native.CUnsignedLong
35-
type __id_t = native.CUnsignedInt
36-
type __time_t = native.CLong
37-
type __useconds_t = native.CUnsignedInt
38-
type __suseconds_t = native.CLong
39-
type __daddr_t = native.CInt
40-
type __key_t = native.CInt
41-
type __clockid_t = native.CInt
42-
type __timer_t = native.Ptr[Byte]
43-
type __blksize_t = native.CLong
44-
type __blkcnt_t = native.CLong
45-
type __blkcnt64_t = native.CLong
46-
type __fsblkcnt_t = native.CUnsignedLong
47-
type __fsblkcnt64_t = native.CUnsignedLong
48-
type __fsfilcnt_t = native.CUnsignedLong
49-
type __fsfilcnt64_t = native.CUnsignedLong
50-
type __fsword_t = native.CLong
51-
type __ssize_t = native.CLong
52-
type __syscall_slong_t = native.CLong
53-
type __syscall_ulong_t = native.CUnsignedLong
54-
type __loff_t = __off64_t
55-
type __qaddr_t = native.Ptr[__quad_t]
56-
type __caddr_t = native.Ptr[native.CChar]
57-
type __intptr_t = native.CLong
58-
type __socklen_t = native.CUnsignedInt
599
type struct_dirent = native.CStruct5[__ino_t,__off_t,native.CUnsignedShort,native.CUnsignedChar,native.CArray[native.CChar, Digit[_2, Digit[_5, _6]]]]
60-
val enum_DT_UNKNOWN = 0
61-
val enum_DT_FIFO = 1
62-
val enum_DT_CHR = 2
63-
val enum_DT_DIR = 3
64-
val enum_DT_BLK = 4
65-
val enum_DT_REG = 5
66-
val enum_DT_LNK = 6
67-
val enum_DT_SOCK = 7
68-
val enum_DT_WHT = 8
69-
type DIR = struct___dirstream
10+
type DIR = native.CArray[Byte, Digit[_3, Digit[_2, _0]]]
7011
def opendir(__name: native.Ptr[native.CChar]): native.Ptr[DIR] = native.extern
7112
def fdopendir(__fd: native.CInt): native.Ptr[DIR] = native.extern
7213
def closedir(__dirp: native.Ptr[DIR]): native.CInt = native.extern
@@ -77,7 +18,19 @@ object dirent {
7718
def telldir(__dirp: native.Ptr[DIR]): native.CLong = native.extern
7819
def dirfd(__dirp: native.Ptr[DIR]): native.CInt = native.extern
7920
type size_t = native.CUnsignedLong
80-
def scandir(__dir: native.Ptr[native.CChar], __namelist: native.Ptr[native.Ptr[native.Ptr[struct_dirent]]], __selector: native.CFunctionPtr1[native.CInt,native.Ptr[struct_dirent]], __cmp: native.CFunctionPtr2[native.CInt,native.Ptr[native.Ptr[struct_dirent]],native.Ptr[native.Ptr[struct_dirent]]]): native.CInt = native.extern
21+
def scandir(__dir: native.Ptr[native.CChar], __namelist: native.Ptr[native.Ptr[native.Ptr[struct_dirent]]], __selector: native.CFunctionPtr1[native.Ptr[struct_dirent],native.CInt], __cmp: native.CFunctionPtr2[native.Ptr[native.Ptr[struct_dirent]],native.Ptr[native.Ptr[struct_dirent]],native.CInt]): native.CInt = native.extern
8122
def alphasort(__e1: native.Ptr[native.Ptr[struct_dirent]], __e2: native.Ptr[native.Ptr[struct_dirent]]): native.CInt = native.extern
8223
def getdirentries(__fd: native.CInt, __buf: native.Ptr[native.CChar], __nbytes: native.CSize, __basep: native.Ptr[__off_t]): __ssize_t = native.extern
8324
}
25+
26+
object direntEnums {
27+
final val enum_DT_UNKNOWN = 0
28+
final val enum_DT_FIFO = 1
29+
final val enum_DT_CHR = 2
30+
final val enum_DT_DIR = 3
31+
final val enum_DT_BLK = 4
32+
final val enum_DT_REG = 5
33+
final val enum_DT_LNK = 6
34+
final val enum_DT_SOCK = 7
35+
final val enum_DT_WHT = 8
36+
}

tests/native/scala-uv/src/main/scala/in.scala

Lines changed: 95 additions & 91 deletions
Original file line numberDiff line numberDiff line change
@@ -12,46 +12,14 @@ object in {
1212
def pwritev(__fd: native.CInt, __iovec: native.Ptr[struct_iovec], __count: native.CInt, __offset: __off_t): ssize_t = native.extern
1313
type socklen_t = __socklen_t
1414
type enum___socket_type = native.CInt
15-
val enum___socket_type_SOCK_STREAM = 0
16-
val enum___socket_type_SOCK_DGRAM = 1
17-
val enum___socket_type_SOCK_RAW = 2
18-
val enum___socket_type_SOCK_RDM = 3
19-
val enum___socket_type_SOCK_SEQPACKET = 4
20-
val enum___socket_type_SOCK_DCCP = 5
21-
val enum___socket_type_SOCK_PACKET = 6
22-
val enum___socket_type_SOCK_CLOEXEC = 7
23-
val enum___socket_type_SOCK_NONBLOCK = 8
2415
type sa_family_t = native.CUnsignedShort
2516
type struct_sockaddr = native.CStruct2[sa_family_t,native.CArray[native.CChar, Digit[_1, _4]]]
2617
type struct_sockaddr_storage = native.CStruct3[sa_family_t,native.CArray[native.CChar, Digit[_1, Digit[_1, _8]]],native.CUnsignedLong]
27-
val enum_MSG_OOB = 0
28-
val enum_MSG_PEEK = 1
29-
val enum_MSG_DONTROUTE = 2
30-
val enum_MSG_CTRUNC = 3
31-
val enum_MSG_PROXY = 4
32-
val enum_MSG_TRUNC = 5
33-
val enum_MSG_DONTWAIT = 6
34-
val enum_MSG_EOR = 7
35-
val enum_MSG_WAITALL = 8
36-
val enum_MSG_FIN = 9
37-
val enum_MSG_SYN = 10
38-
val enum_MSG_CONFIRM = 11
39-
val enum_MSG_RST = 12
40-
val enum_MSG_ERRQUEUE = 13
41-
val enum_MSG_NOSIGNAL = 14
42-
val enum_MSG_MORE = 15
43-
val enum_MSG_WAITFORONE = 16
44-
val enum_MSG_FASTOPEN = 17
45-
val enum_MSG_CMSG_CLOEXEC = 18
4618
type struct_msghdr = native.CStruct7[native.Ptr[Byte],socklen_t,native.Ptr[struct_iovec],native.CSize,native.Ptr[Byte],native.CSize,native.CInt]
4719
type struct_cmsghdr = native.CStruct4[native.CSize,native.CInt,native.CInt, native.Ptr[native.CChar]]
4820
def __cmsg_nxthdr(__mhdr: native.Ptr[struct_msghdr], __cmsg: native.Ptr[struct_cmsghdr]): native.Ptr[struct_cmsghdr] = native.extern
49-
val enum_SCM_RIGHTS = 0
5021
type struct_linger = native.CStruct2[native.CInt,native.CInt]
5122
type struct_osockaddr = native.CStruct2[native.CUnsignedShort,native.CArray[native.CUnsignedChar, Digit[_1, _4]]]
52-
val enum_SHUT_RD = 0
53-
val enum_SHUT_WR = 1
54-
val enum_SHUT_RDWR = 2
5523
def socket(__domain: native.CInt, __type: native.CInt, __protocol: native.CInt): native.CInt = native.extern
5624
def socketpair(__domain: native.CInt, __type: native.CInt, __protocol: native.CInt, __fds: native.Ptr[native.CInt]): native.CInt = native.extern
5725
def bind(__fd: native.CInt, __addr: native.Ptr[struct_sockaddr], __len: socklen_t): native.CInt = native.extern
@@ -76,66 +44,7 @@ object in {
7644
type struct_ip_opts = native.CStruct2[struct_in_addr,native.CArray[native.CChar, Digit[_4, _0]]]
7745
type struct_ip_mreqn = native.CStruct3[struct_in_addr,struct_in_addr,native.CInt]
7846
type struct_in_pktinfo = native.CStruct3[native.CInt,struct_in_addr,struct_in_addr]
79-
val enum_IPPROTO_IP = 0
80-
val enum_IPPROTO_ICMP = 1
81-
val enum_IPPROTO_IGMP = 2
82-
val enum_IPPROTO_IPIP = 3
83-
val enum_IPPROTO_TCP = 4
84-
val enum_IPPROTO_EGP = 5
85-
val enum_IPPROTO_PUP = 6
86-
val enum_IPPROTO_UDP = 7
87-
val enum_IPPROTO_IDP = 8
88-
val enum_IPPROTO_TP = 9
89-
val enum_IPPROTO_DCCP = 10
90-
val enum_IPPROTO_IPV6 = 11
91-
val enum_IPPROTO_RSVP = 12
92-
val enum_IPPROTO_GRE = 13
93-
val enum_IPPROTO_ESP = 14
94-
val enum_IPPROTO_AH = 15
95-
val enum_IPPROTO_MTP = 16
96-
val enum_IPPROTO_BEETPH = 17
97-
val enum_IPPROTO_ENCAP = 18
98-
val enum_IPPROTO_PIM = 19
99-
val enum_IPPROTO_COMP = 20
100-
val enum_IPPROTO_SCTP = 21
101-
val enum_IPPROTO_UDPLITE = 22
102-
val enum_IPPROTO_MPLS = 23
103-
val enum_IPPROTO_RAW = 24
104-
val enum_IPPROTO_MAX = 25
105-
val enum_IPPROTO_HOPOPTS = 0
106-
val enum_IPPROTO_ROUTING = 1
107-
val enum_IPPROTO_FRAGMENT = 2
108-
val enum_IPPROTO_ICMPV6 = 3
109-
val enum_IPPROTO_NONE = 4
110-
val enum_IPPROTO_DSTOPTS = 5
111-
val enum_IPPROTO_MH = 6
11247
type in_port_t = uint16_t
113-
val enum_IPPORT_ECHO = 0
114-
val enum_IPPORT_DISCARD = 1
115-
val enum_IPPORT_SYSTAT = 2
116-
val enum_IPPORT_DAYTIME = 3
117-
val enum_IPPORT_NETSTAT = 4
118-
val enum_IPPORT_FTP = 5
119-
val enum_IPPORT_TELNET = 6
120-
val enum_IPPORT_SMTP = 7
121-
val enum_IPPORT_TIMESERVER = 8
122-
val enum_IPPORT_NAMESERVER = 9
123-
val enum_IPPORT_WHOIS = 10
124-
val enum_IPPORT_MTP = 11
125-
val enum_IPPORT_TFTP = 12
126-
val enum_IPPORT_RJE = 13
127-
val enum_IPPORT_FINGER = 14
128-
val enum_IPPORT_TTYLINK = 15
129-
val enum_IPPORT_SUPDUP = 16
130-
val enum_IPPORT_EXECSERVER = 17
131-
val enum_IPPORT_LOGINSERVER = 18
132-
val enum_IPPORT_CMDSERVER = 19
133-
val enum_IPPORT_EFSSERVER = 20
134-
val enum_IPPORT_BIFFUDP = 21
135-
val enum_IPPORT_WHOSERVER = 22
136-
val enum_IPPORT_ROUTESERVER = 23
137-
val enum_IPPORT_RESERVED = 24
138-
val enum_IPPORT_USERRESERVED = 25
13948
type struct_in6_addr = native.CStruct1[native.CArray[Byte, Digit[_1, Digit[_2, _8]]]]
14049
type struct_sockaddr_in = native.CStruct4[sa_family_t,in_port_t,struct_in_addr,native.CArray[native.CUnsignedChar, _8]]
14150
type struct_sockaddr_in6 = native.CStruct5[sa_family_t,in_port_t,uint32_t,struct_in6_addr,uint32_t]
@@ -153,3 +62,98 @@ object in {
15362
def bindresvport(__sockfd: native.CInt, __sock_in: native.Ptr[struct_sockaddr_in]): native.CInt = native.extern
15463
def bindresvport6(__sockfd: native.CInt, __sock_in: native.Ptr[struct_sockaddr_in6]): native.CInt = native.extern
15564
}
65+
66+
67+
object inEnums {
68+
final val enum___socket_type_SOCK_STREAM = 0
69+
final val enum___socket_type_SOCK_DGRAM = 1
70+
final val enum___socket_type_SOCK_RAW = 2
71+
final val enum___socket_type_SOCK_RDM = 3
72+
final val enum___socket_type_SOCK_SEQPACKET = 4
73+
final val enum___socket_type_SOCK_DCCP = 5
74+
final val enum___socket_type_SOCK_PACKET = 6
75+
final val enum___socket_type_SOCK_CLOEXEC = 7
76+
final val enum___socket_type_SOCK_NONBLOCK = 8
77+
final val enum_MSG_OOB = 0
78+
final val enum_MSG_PEEK = 1
79+
final val enum_MSG_DONTROUTE = 2
80+
final val enum_MSG_CTRUNC = 3
81+
final val enum_MSG_PROXY = 4
82+
final val enum_MSG_TRUNC = 5
83+
final val enum_MSG_DONTWAIT = 6
84+
final val enum_MSG_EOR = 7
85+
final val enum_MSG_WAITALL = 8
86+
final val enum_MSG_FIN = 9
87+
final val enum_MSG_SYN = 10
88+
final val enum_MSG_CONFIRM = 11
89+
final val enum_MSG_RST = 12
90+
final val enum_MSG_ERRQUEUE = 13
91+
final val enum_MSG_NOSIGNAL = 14
92+
final val enum_MSG_MORE = 15
93+
final val enum_MSG_WAITFORONE = 16
94+
final val enum_MSG_FASTOPEN = 17
95+
final val enum_MSG_CMSG_CLOEXEC = 18
96+
final val enum_SCM_RIGHTS = 0
97+
final val enum_SHUT_RD = 0
98+
final val enum_SHUT_WR = 1
99+
final val enum_SHUT_RDWR = 2
100+
final val enum_IPPROTO_IP = 0
101+
final val enum_IPPROTO_ICMP = 1
102+
final val enum_IPPROTO_IGMP = 2
103+
final val enum_IPPROTO_IPIP = 3
104+
final val enum_IPPROTO_TCP = 4
105+
final val enum_IPPROTO_EGP = 5
106+
final val enum_IPPROTO_PUP = 6
107+
final val enum_IPPROTO_UDP = 7
108+
final val enum_IPPROTO_IDP = 8
109+
final val enum_IPPROTO_TP = 9
110+
final val enum_IPPROTO_DCCP = 10
111+
final val enum_IPPROTO_IPV6 = 11
112+
final val enum_IPPROTO_RSVP = 12
113+
final val enum_IPPROTO_GRE = 13
114+
final val enum_IPPROTO_ESP = 14
115+
final val enum_IPPROTO_AH = 15
116+
final val enum_IPPROTO_MTP = 16
117+
final val enum_IPPROTO_BEETPH = 17
118+
final val enum_IPPROTO_ENCAP = 18
119+
final val enum_IPPROTO_PIM = 19
120+
final val enum_IPPROTO_COMP = 20
121+
final val enum_IPPROTO_SCTP = 21
122+
final val enum_IPPROTO_UDPLITE = 22
123+
final val enum_IPPROTO_MPLS = 23
124+
final val enum_IPPROTO_RAW = 24
125+
final val enum_IPPROTO_MAX = 25
126+
final val enum_IPPROTO_HOPOPTS = 0
127+
final val enum_IPPROTO_ROUTING = 1
128+
final val enum_IPPROTO_FRAGMENT = 2
129+
final val enum_IPPROTO_ICMPV6 = 3
130+
final val enum_IPPROTO_NONE = 4
131+
final val enum_IPPROTO_DSTOPTS = 5
132+
final val enum_IPPROTO_MH = 6
133+
final val enum_IPPORT_ECHO = 0
134+
final val enum_IPPORT_DISCARD = 1
135+
final val enum_IPPORT_SYSTAT = 2
136+
final val enum_IPPORT_DAYTIME = 3
137+
final val enum_IPPORT_NETSTAT = 4
138+
final val enum_IPPORT_FTP = 5
139+
final val enum_IPPORT_TELNET = 6
140+
final val enum_IPPORT_SMTP = 7
141+
final val enum_IPPORT_TIMESERVER = 8
142+
final val enum_IPPORT_NAMESERVER = 9
143+
final val enum_IPPORT_WHOIS = 10
144+
final val enum_IPPORT_MTP = 11
145+
final val enum_IPPORT_TFTP = 12
146+
final val enum_IPPORT_RJE = 13
147+
final val enum_IPPORT_FINGER = 14
148+
final val enum_IPPORT_TTYLINK = 15
149+
final val enum_IPPORT_SUPDUP = 16
150+
final val enum_IPPORT_EXECSERVER = 17
151+
final val enum_IPPORT_LOGINSERVER = 18
152+
final val enum_IPPORT_CMDSERVER = 19
153+
final val enum_IPPORT_EFSSERVER = 20
154+
final val enum_IPPORT_BIFFUDP = 21
155+
final val enum_IPPORT_WHOSERVER = 22
156+
final val enum_IPPORT_ROUTESERVER = 23
157+
final val enum_IPPORT_RESERVED = 24
158+
final val enum_IPPORT_USERRESERVED = 25
159+
}

tests/native/scala-uv/src/main/scala/netdb.scala

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,10 +71,9 @@ object netdb {
7171
def iruserok_af(__raddr: native.Ptr[Byte], __suser: native.CInt, __remuser: native.Ptr[native.CChar], __locuser: native.Ptr[native.CChar], __af: sa_family_t): native.CInt = native.extern
7272
def rresvport(__alport: native.Ptr[native.CInt]): native.CInt = native.extern
7373
def rresvport_af(__alport: native.Ptr[native.CInt], __af: sa_family_t): native.CInt = native.extern
74-
type struct_addrinfo = native.CStruct8[native.CInt,native.CInt,native.CInt,native.CInt,socklen_t,native.Ptr[struct_sockaddr],native.Ptr[native.CChar],native.Ptr[struct_addrinfo]]
74+
type struct_addrinfo = native.CStruct8[native.CInt,native.CInt,native.CInt,native.CInt,socklen_t,native.Ptr[struct_sockaddr],native.Ptr[native.CChar],native.Ptr[native.CArray[Byte, Digit[_3, Digit[_8, _4]]]]]
7575
def getaddrinfo(__name: native.Ptr[native.CChar], __service: native.Ptr[native.CChar], __req: native.Ptr[struct_addrinfo], __pai: native.Ptr[native.Ptr[struct_addrinfo]]): native.CInt = native.extern
7676
def freeaddrinfo(__ai: native.Ptr[struct_addrinfo]): Unit = native.extern
7777
def gai_strerror(__ecode: native.CInt): native.Ptr[native.CChar] = native.extern
7878
def getnameinfo(__sa: native.Ptr[struct_sockaddr], __salen: socklen_t, __host: native.Ptr[native.CChar], __hostlen: socklen_t, __serv: native.Ptr[native.CChar], __servlen: socklen_t, __flags: native.CInt): native.CInt = native.extern
7979
}
80-

tests/native/scala-uv/src/main/scala/types.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import scala.scalanative._
22
import scala.scalanative.native.Nat._
33

4+
@native.link("types")
45
@native.extern
56
object types {
67
type __u_char = native.CUnsignedChar
@@ -117,7 +118,7 @@ object types {
117118
type pthread_t = native.CUnsignedLong
118119
type union_pthread_attr_t = native.CArray[Byte, Digit[_4, Digit[_4, _8]]]
119120
type pthread_attr_t = union_pthread_attr_t
120-
type struct___pthread_internal_list = native.CStruct2[native.Ptr[struct___pthread_internal_list],native.Ptr[struct___pthread_internal_list]]
121+
type struct___pthread_internal_list = native.CStruct2[native.Ptr[native.CArray[Byte, Digit[_1, Digit[_2, _8]]]], native.Ptr[native.CArray[Byte, Digit[_1, Digit[_2, _8]]]]]
121122
type __pthread_list_t = struct___pthread_internal_list
122123
type union_pthread_mutex_t = native.CArray[Byte, Digit[_3, Digit[_2, _0]]]
123124
type struct___pthread_mutex_s = native.CStruct8[native.CInt,native.CUnsignedInt,native.CInt,native.CUnsignedInt,native.CInt,native.CShort,native.CShort,__pthread_list_t]

0 commit comments

Comments
 (0)