1 (* Copyright (C
) 2002-2006 Henry Cejtin
, Matthew Fluet
, Suresh
2 * Jagannathan
, and Stephen Weeks
.
4 * MLton is released under a BSD
-style license
.
5 * See the file MLton
-LICENSE for details
.
8 structure NetServDB
: NET_SERV_DB
=
10 structure Prim
= PrimitiveFFI
.NetServDB
12 datatype entry
= T
of {name
: string,
18 fun make
s (T r
) = s r
21 val aliases
= make #aliases
22 val port
= C_Int
.toInt
o (make #port
)
23 val protocol
= make #protocol
27 fun get (i
: C_Int
.t
): entry option
=
30 val name
= CUtil
.C_String
.toString (Prim
.getEntryName ())
31 val numAliases
= Prim
.getEntryAliasesNum ()
32 fun fill (n
, aliases
) =
33 if C_Int
.< (n
, numAliases
)
35 val alias
= CUtil
.C_String
.toString (Prim
.getEntryAliasesN n
)
37 fill (C_Int
.+ (n
, 1), alias
::aliases
)
40 val aliases
= fill (0, [])
41 val port
= Net
.C_Int
.ntoh (Prim
.getEntryPort ())
42 val protocol
= CUtil
.C_String
.toString (Prim
.getEntryProto ())
51 fun getByName (name
, proto
) =
53 SOME proto
=> get (Prim
.getByName (NullString
.nullTerm name
,
54 NullString
.nullTerm proto
))
55 | NONE
=> get (Prim
.getByNameNull (NullString
.nullTerm name
))
56 fun getByPort (port
, proto
) =
58 val port
= Net
.C_Int
.hton (C_Int
.fromInt port
)
61 NONE
=> get (Prim
.getByPortNull port
)
63 get (Prim
.getByPort (port
, NullString
.nullTerm proto
))