1
0
mirror of https://git.FreeBSD.org/ports.git synced 2024-11-15 23:50:44 +00:00
freebsd-ports/lang/modula-3-lib/files/patch-av
John Polstra d5a92ea924 Split the Modula-3 port into two pieces, creating a new port
"modula-3-lib".  It installs only the shared libraries needed for
executing Modula-3 programs.  This saves a lot of disk space for
people who need to run Modula-3 programs but don't need to build
them.  The original "modula-3" port now depends on this one, and
uses it to install the compiler and the rest of the development
system.

Also, everything is now built with optimization.  I have been
testing this for at least a month, and haven't seen any problems
from it.  It makes the libraries and executables substantially
smaller.

This new port also includes some hooks that will make SOCKS support
possible in the near future.
1996-10-29 23:01:55 +00:00

419 lines
15 KiB
Plaintext

Fix many incorrect things in the Usocket interface for FreeBSD.
Also make provisions for using SOCKS.
Index: m3/m3core/src/unix/freebsd-2/Usocket.i3
--- Usocket.i3.orig Sat Jan 7 14:22:22 1995
+++ Usocket.i3 Thu Oct 24 16:04:43 1996
@@ -30,28 +30,30 @@
(*
* Option flags per-socket.
*)
- SO_DEBUG = 1; (* turn on debugging info recording *)
- SO_REUSEADDR = 2; (* allow local address reuse *)
- SO_TYPE = 3; (* get socket type *)
- SO_ERROR = 4; (* get error status and clear *)
- SO_DONTROUTE = 5; (* just use interface addresses *)
- SO_BROADCAST = 6; (* permit sending of broadcast msgs *)
- SO_SNDBUF = 7; (* send buffer size *)
- SO_RCVBUF = 8; (* receive buffer size *)
- SO_KEEPALIVE = 9; (* keep connections alive *)
- SO_OOBINLINE = 10; (* leave received OOB data in line *)
- SO_NO_CHECK = 11;
- SO_PRIORITY = 12;
- SO_LINGER = 13; (* linger on close if data present *)
+ SO_DEBUG = 16_0001; (* turn on debugging info recording *)
+ SO_ACCEPTCONN = 16_0002; (* socket has had listen() *)
+ SO_REUSEADDR = 16_0004; (* allow local address reuse *)
+ SO_KEEPALIVE = 16_0008; (* keep connections alive *)
+ SO_DONTROUTE = 16_0010; (* just use interface addresses *)
+ SO_BROADCAST = 16_0020; (* permit sending of broadcast msgs *)
+ SO_USELOOPBACK = 16_0040; (* bypass hardware when possible *)
+ SO_LINGER = 16_0080; (* linger on close if data present *)
+ SO_OOBINLINE = 16_0100; (* leave received OOB data in line *)
+ SO_REUSEPORT = 16_0200; (* allow local address & port reuse *)
+ SO_TIMESTAMP = 16_0400; (* timestamp received dgram traffic *)
(*
* Additional options, not kept in so_options.
*)
- (* these constants may not be implemented - be careful *)
- SO_SNDLOWAT = 16_1003; (* send low-water mark *)
- SO_RCVLOWAT = 16_1004; (* receive low-water mark *)
- SO_SNDTIMEO = 16_1005; (* send timeout *)
- SO_RCVTIMEO = 16_1006; (* receive timeout *)
+ SO_SNDBUF = 16_1001; (* send buffer size *)
+ SO_RCVBUF = 16_1002; (* receive buffer size *)
+ SO_SNDLOWAT = 16_1003; (* send low-water mark *)
+ SO_RCVLOWAT = 16_1004; (* receive low-water mark *)
+ SO_SNDTIMEO = 16_1005; (* send timeout *)
+ SO_RCVTIMEO = 16_1006; (* receive timeout *)
+ SO_ERROR = 16_1007; (* get error status and clear *)
+ SO_TYPE = 16_1008; (* get socket type *)
+ SO_PRIVSTATE = 16_1009; (* get/deny privileged state *)
(*
* Structure used for manipulating linger option.
@@ -67,38 +69,45 @@
* Level number for (get/set)sockopt() to apply to socket itself.
*)
CONST
- SOL_SOCKET = 1; (* options for socket level *)
+ SOL_SOCKET = 16_ffff; (* options for socket level *)
(*
* Address families.
*)
- AF_UNSPEC = 0; (* unspecified *)
- AF_UNIX = 1; (* local to host (pipes, portals) *)
- AF_INET = 2; (* internetwork: UDP, TCP, etc. *)
- AF_AX25 = 3;
- AF_IPX = 4;
-
- AF_MAX = 5;
-
-(*****
- AF_IMPLINK = 3; (* arpanet imp addresses *)
- AF_PUP = 4; (* pup protocols: e.g. BSP *)
- AF_CHAOS = 5; (* mit CHAOS protocols *)
- AF_NS = 6; (* XEROX NS protocols *)
- AF_NBS = 7; (* nbs protocols *)
- AF_ECMA = 8; (* european computer manufacturers *)
- AF_DATAKIT = 9; (* datakit protocols *)
- AF_CCITT = 10; (* CCITT protocols, X.25 etc *)
- AF_SNA = 11; (* IBM SNA *)
- AF_DECnet = 12; (* DECnet *)
- AF_DLI = 13; (* Direct data link interface *)
- AF_LAT = 14; (* LAT *)
- AF_HYLINK = 15; (* NSC Hyperchannel *)
- AF_APPLETALK = 16; (* Apple talk *)
- AF_BSC = 17; (* BISYNC 2780/3780 *)
- AF_DSS = 18; (* Distributed system services *)
-*******)
+ AF_UNSPEC = 0; (* unspecified *)
+ AF_LOCAL = 1; (* local to host (pipes, portals) *)
+ AF_UNIX = AF_LOCAL; (* backward compatibility *)
+ AF_INET = 2; (* internetwork: UDP, TCP, etc. *)
+ AF_IMPLINK = 3; (* arpanet imp addresses *)
+ AF_PUP = 4; (* pup protocols: e.g. BSP *)
+ AF_CHAOS = 5; (* mit CHAOS protocols *)
+ AF_NS = 6; (* XEROX NS protocols *)
+ AF_ISO = 7; (* ISO protocols *)
+ AF_OSI = AF_ISO;
+ AF_ECMA = 8; (* European computer manufacturers *)
+ AF_DATAKIT = 9; (* datakit protocols *)
+ AF_CCITT = 10; (* CCITT protocols, X.25 etc *)
+ AF_SNA = 11; (* IBM SNA *)
+ AF_DECnet = 12; (* DECnet *)
+ AF_DLI = 13; (* DEC Direct data link interface *)
+ AF_LAT = 14; (* LAT *)
+ AF_HYLINK = 15; (* NSC Hyperchannel *)
+ AF_APPLETALK = 16; (* Apple Talk *)
+ AF_ROUTE = 17; (* Internal Routing Protocol *)
+ AF_LINK = 18; (* Link layer interface *)
+ pseudo_AF_XTP = 19; (* eXpress Transfer Protocol (no AF) *)
+ AF_COIP = 20; (* connection-oriented IP, aka ST II *)
+ AF_CNT = 21; (* Computer Network Technology *)
+ pseudo_AF_RTIP = 22; (* Help Identify RTIP packets *)
+ AF_IPX = 23; (* Novell Internet Protocol *)
+ AF_SIP = 24; (* Simple Internet Protocol *)
+ pseudo_AF_PIP = 25; (* Help Identify PIP packets *)
+ AF_ISDN = 26; (* Integrated Services Digital Network*)
+ AF_E164 = AF_ISDN; (* CCITT E.164 recommendation *)
+ pseudo_AF_KEY = 27; (* Internal key-management function *)
+
+ AF_MAX = 28;
(*
* Structure used by kernel to store most
@@ -106,9 +115,9 @@
*)
TYPE
struct_sockaddr = RECORD
- sa_family: Ctypes.unsigned_short; (* address family *)
- sa_data: ARRAY [0..13] OF Ctypes.char;
- (* up to 14 bytes of direct address *)
+ sa_len: Ctypes.unsigned_char; (* total length *)
+ sa_family: Ctypes.unsigned_char; (* address family *)
+ sa_data: ARRAY [0..13] OF Ctypes.char; (* address; actually longer *)
END;
@@ -116,7 +125,6 @@
* Structure used by kernel to pass protocol
* information in raw sockets.
*)
- (* Can't find this one either .. be careful *)
struct_sockproto = RECORD
sp_family: Ctypes.unsigned_short; (* address family *)
sp_protocol: Ctypes.unsigned_short; (* protocol *)
@@ -126,75 +134,101 @@
* Protocol families, same as address families for now.
*)
CONST
+ PF_UNSPEC = AF_UNSPEC;
+ PF_LOCAL = AF_LOCAL;
+ PF_UNIX = PF_LOCAL; (* backward compatibility *)
+ PF_INET = AF_INET;
+ PF_IMPLINK = AF_IMPLINK;
+ PF_PUP = AF_PUP;
+ PF_CHAOS = AF_CHAOS;
+ PF_NS = AF_NS;
+ PF_ISO = AF_ISO;
+ PF_OSI = AF_ISO;
+ PF_ECMA = AF_ECMA;
+ PF_DATAKIT = AF_DATAKIT;
+ PF_CCITT = AF_CCITT;
+ PF_SNA = AF_SNA;
+ PF_DECnet = AF_DECnet;
+ PF_DLI = AF_DLI;
+ PF_LAT = AF_LAT;
+ PF_HYLINK = AF_HYLINK;
+ PF_APPLETALK = AF_APPLETALK;
+ PF_ROUTE = AF_ROUTE;
+ PF_LINK = AF_LINK;
+ PF_XTP = pseudo_AF_XTP; (* really just proto family, no AF *)
+ PF_COIP = AF_COIP;
+ PF_CNT = AF_CNT;
+ PF_SIP = AF_SIP;
+ PF_IPX = AF_IPX; (* same format as AF_NS *)
+ PF_RTIP = pseudo_AF_RTIP; (* same format as AF_INET *)
+ PF_PIP = pseudo_AF_PIP;
+ PF_ISDN = AF_ISDN;
+ PF_KEY = pseudo_AF_KEY;
- PF_UNSPEC = AF_UNSPEC;
- PF_UNIX = AF_UNIX;
- PF_INET = AF_INET;
- PF_AX25 = AF_AX25;
- PF_IPX = AF_IPX;
-
- (* NO supported on Linux:
- PF_IMPLINK = AF_IMPLINK;
- PF_PUP = AF_PUP;
- PF_CHAOS = AF_CHAOS;
- PF_NS = AF_NS;
- PF_NBS = AF_NBS;
- PF_ECMA = AF_ECMA;
- PF_DATAKIT = AF_DATAKIT;
- PF_CCITT = AF_CCITT;
- PF_SNA = AF_SNA;
- PF_DECnet = AF_DECnet;
- PF_DLI = AF_DLI;
- PF_LAT = AF_LAT;
- PF_HYLINK = AF_HYLINK;
- PF_APPLETALK = AF_APPLETALK;
- PF_BSC = AF_BSC;
- PF_DSS = AF_DSS;
- ************)
-
- PF_MAX = AF_MAX;
+ PF_MAX = AF_MAX;
(*
* Maximum queue length specifiable by listen.
*)
- (* Not defined under Linux - be careful *)
- SOMAXCONN = 5;
+ SOMAXCONN = 128;
(*
* Message header for recvmsg and sendmsg calls.
*)
TYPE
- (* Again, I haven't checked this structure *)
struct_msghdr = RECORD
- msg_name: Utypes.caddr_t; (* optional address *)
- msg_namelen: Ctypes.int; (* size of address *)
- msg_iov: Uuio.struct_iovec_star; (* scatter/gather array *)
- msg_iovlen: Ctypes.int; (* # elements in msg_iov *)
- msg_accrights: Utypes.caddr_t; (* access rights sent/received *)
- msg_accrightslen: Ctypes.int;
+ msg_name: Utypes.caddr_t; (* optional address *)
+ msg_namelen: Ctypes.unsigned_int; (* size of address *)
+ msg_iov: Uuio.struct_iovec_star; (* scatter/gather array *)
+ msg_iovlen: Ctypes.unsigned_int; (* # elements in msg_iov *)
+ msg_control: Utypes.caddr_t; (* ancillary data, see below *)
+ msg_controllen: Ctypes.unsigned_int; (* ancillary data buffer len *)
+ msg_flags: Ctypes.int; (* flags on received message *)
END;
CONST
- MSG_OOB = 16_1; (* process out-of-band data *)
- MSG_PEEK = 16_2; (* peek at incoming message *)
-(* The following aren't defined in /usr/include/linux/socket.h *)
-(**
- MSG_DONTROUTE = 16_4; (* send without using routing tables *)
+ MSG_OOB = 16_1; (* process out-of-band data *)
+ MSG_PEEK = 16_2; (* peek at incoming message *)
+ MSG_DONTROUTE = 16_4; (* send without using routing tables *)
+ MSG_EOR = 16_8; (* data completes record *)
+ MSG_TRUNC = 16_10; (* data discarded before delivery *)
+ MSG_CTRUNC = 16_20; (* control data lost before delivery *)
+ MSG_WAITALL = 16_40; (* wait for full request or error *)
+ MSG_DONTWAIT = 16_80; (* this message should be nonblocking *)
+ MSG_EOF = 16_100; (* data completes connection *)
+ MSG_COMPAT = 16_8000; (* used in sendit() *)
+
+(*
+ * Header for ancillary data objects in msg_control buffer.
+ * Used for additional information with/about a datagram
+ * not expressible by flags. The format is a sequence
+ * of message elements headed by cmsghdr structures.
+ *)
+TYPE
+ struct_cmsghdr = RECORD
+ cmsg_len: Ctypes.unsigned_int; (* data byte count, including hdr *)
+ cmsg_level: Ctypes.int; (* originating protocol *)
+ cmsg_type: Ctypes.int; (* protocol-specific type *)
+ (* followed by u_char cmsg_data[]; *)
+ END;
- MSG_MAXIOVLEN = 16;
-***)
+(* "Socket"-level control message types: *)
+CONST
+ SCM_RIGHTS = 16_01; (* access rights (array of int) *)
+ SCM_TIMESTAMP = 16_02; (* timestamp (struct timeval) *)
(*
* Definitions for UNIX IPC domain.
*)
TYPE
struct_sockaddr_un = RECORD
- sun_family: Ctypes.unsigned_short; (* AF_UNIX *)
- sun_path: ARRAY [0..107] OF Ctypes.char; (* path name (gag) *)
+ sun_len: Ctypes.unsigned_char; (* sockaddr len including null *)
+ sun_family: Ctypes.unsigned_char; (* AF_UNIX *)
+ sun_path: ARRAY [0..103] OF Ctypes.char; (* path name (gag) *)
END;
-<*EXTERNAL*>
+<*EXTERNAL "m3_accept"*>
PROCEDURE accept(
s: Ctypes.int;
addr: UNTRACED REF struct_sockaddr;
@@ -202,7 +236,7 @@
: Ctypes.int
RAISES {};
-<*EXTERNAL*>
+<*EXTERNAL "m3_bind"*>
PROCEDURE bind(
s: Ctypes.int;
name: UNTRACED REF struct_sockaddr;
@@ -210,7 +244,7 @@
: Ctypes.int
RAISES {};
-<*EXTERNAL*>
+<*EXTERNAL "m3_connect"*>
PROCEDURE connect(
s: Ctypes.int;
name: UNTRACED REF struct_sockaddr;
@@ -218,7 +252,7 @@
: Ctypes.int
RAISES {};
-<*EXTERNAL*>
+<*EXTERNAL "m3_getpeername"*>
PROCEDURE getpeername(
s: Ctypes.int;
name: UNTRACED REF struct_sockaddr;
@@ -226,7 +260,7 @@
: Ctypes.int
RAISES {};
-<*EXTERNAL*>
+<*EXTERNAL "m3_getsockname"*>
PROCEDURE getsockname(
s: Ctypes.int;
name: UNTRACED REF struct_sockaddr;
@@ -237,52 +271,70 @@
<*EXTERNAL*>
PROCEDURE getsockopt(
s, level, optname: Ctypes.int;
- optval: Ctypes.char_star;
+ optval: Ctypes.void_star;
optlen: Ctypes.int_star)
: Ctypes.int
RAISES {};
-<*EXTERNAL*>
+<*EXTERNAL "m3_listen"*>
PROCEDURE listen(s, backlog: Ctypes.int): Ctypes.int RAISES {};
-<*EXTERNAL*>
-PROCEDURE recv(s: Ctypes.int; buf: Ctypes.char_star; len, flags: Ctypes.int): Ctypes.int RAISES {};
+<*EXTERNAL "m3_recv"*>
+PROCEDURE recv(
+ s: Ctypes.int;
+ buf: Ctypes.void_star;
+ len: Utypes.size_t;
+ flags: Ctypes.int)
+ : Ctypes.int
+ RAISES {};
-<*EXTERNAL*>
+<*EXTERNAL "m3_recvfrom"*>
PROCEDURE recvfrom(
s: Ctypes.int;
- buf: Ctypes.char_star;
- len, flags: Ctypes.int;
+ buf: Ctypes.void_star;
+ len: Utypes.size_t;
+ flags: Ctypes.int;
from: UNTRACED REF struct_sockaddr;
fromlen: Ctypes.int_star)
: Ctypes.int
RAISES {};
-<*EXTERNAL*>
-PROCEDURE send(s: Ctypes.int; msg: Ctypes.char_star; len, flags: Ctypes.int): Ctypes.int RAISES {};
+(* FIXME - recvmsg *)
-<*EXTERNAL*>
+<*EXTERNAL "m3_send"*>
+PROCEDURE send(
+ s: Ctypes.int;
+ msg: Ctypes.const_void_star;
+ len: Utypes.size_t;
+ flags: Ctypes.int)
+ : Ctypes.int
+ RAISES {};
+
+<*EXTERNAL "m3_sendto"*>
PROCEDURE sendto(
s: Ctypes.int;
- msg: Ctypes.char_star;
- len, flags: Ctypes.int;
+ msg: Ctypes.const_void_star;
+ len: Utypes.size_t;
+ flags: Ctypes.int;
to: UNTRACED REF struct_sockaddr;
tolen: Ctypes.int)
: Ctypes.int
RAISES {};
+(* FIXME - sendmsg *)
+
<*EXTERNAL*>
PROCEDURE setsockopt(
s, level, optname: Ctypes.int;
- optval: Ctypes.char_star;
+ optval: Ctypes.const_void_star;
optlen: Ctypes.int)
: Ctypes.int
RAISES {};
-<*EXTERNAL*>
+<*EXTERNAL "m3_shutdown"*>
PROCEDURE shutdown(s, how: Ctypes.int): Ctypes.int RAISES {};
-<*EXTERNAL*>
+<*EXTERNAL "m3_socket" *>
PROCEDURE socket(af, type, protocol: Ctypes.int): Ctypes.int RAISES {};
<*EXTERNAL*>