drw@boole.mit.edu (Dale R. Worley) (02/23/90)
Having been unable to contact a particular machine because our
/etc/hosts file had an incorrect address, I finally hacked up the code
to allow Emacs to accept absolute addresses for network connections.
The following patch (for 18.54) allows open-network-stream to accept
numeric addresses, in the format "[18.87.0.12]", as well as proper
host names.
Dale drw@math.mit.edu
*** /usr/local/emacs/src/process.c Tue Apr 18 13:00:19 1989
--- process.c Wed Feb 21 21:37:06 1990
***************
*** 1119,1124 ****
--- 1119,1126 ----
int s, outch, inch;
char errstring[80];
int port;
+ struct hostent host_info_fixed;
+ char addr_fixed[4];
CHECK_STRING (name, 0);
CHECK_STRING (host, 0);
***************
*** 1133,1141 ****
port = svc_info->s_port;
}
! host_info = gethostbyname (XSTRING (host)->data);
if (host_info == 0)
! error ("Unknown host \"%s\"", XSTRING(host)->data);
bzero (&address, sizeof address);
bcopy (host_info->h_addr, (char *) &address.sin_addr, host_info->h_length);
--- 1135,1169 ----
port = svc_info->s_port;
}
! host_info = 0;
! if (XSTRING (host)->data[0] != '[')
! {
! host_info = gethostbyname (XSTRING (host)->data);
! }
! else
! {
! int a1, a2, a3, a4;
! char c;
!
! if (sscanf(XSTRING (host)->data, "[%d.%d.%d.%d%c",
! &a1, &a2, &a3, &a4, &c) == 5 &&
! c == ']')
! {
! addr_fixed[0] = a1;
! addr_fixed[1] = a2;
! addr_fixed[2] = a3;
! addr_fixed[3] = a4;
! host_info = &host_info_fixed;
! host_info->h_addr = addr_fixed;
! host_info->h_length = 4;
! host_info->h_addrtype = AF_INET;
! }
! }
! /* Report error. */
if (host_info == 0)
! {
! error ("Unknown host \"%s\"", XSTRING(host)->data);
! }
bzero (&address, sizeof address);
bcopy (host_info->h_addr, (char *) &address.sin_addr, host_info->h_length);