Mercurial > emacs
comparison src/process.c @ 52525:fd2be6cea0e7
(Fnetwork_interface_list, Fnetwork_interface_info):
Require HAVE_NET_IF_H and HAVE_SYS_IOCTL_H to include these fns.
(Fnetwork_interface_info): Check that ifreq struct has required
fields before accessing them; this requires that those fields are
defined as macros, which may be too restrictive on some platforms,
but it is better than failing on other platforms.
(syms_of_process): Only defsubr above fns when included.
author | Kim F. Storm <storm@cua.dk> |
---|---|
date | Wed, 17 Sep 2003 21:31:53 +0000 |
parents | 0ca23eb697b9 |
children | 3ea59ac8dfa5 |
comparison
equal
deleted
inserted
replaced
52524:84470539e96f | 52525:fd2be6cea0e7 |
---|---|
3334 return proc; | 3334 return proc; |
3335 } | 3335 } |
3336 #endif /* HAVE_SOCKETS */ | 3336 #endif /* HAVE_SOCKETS */ |
3337 | 3337 |
3338 | 3338 |
3339 #ifdef HAVE_SOCKETS | 3339 #if defined(HAVE_SOCKETS) && defined(HAVE_NET_IF_H) && defined(HAVE_SYS_IOCTL_H) |
3340 | 3340 |
3341 #ifdef SIOCGIFCONF | 3341 #ifdef SIOCGIFCONF |
3342 DEFUN ("network-interface-list", Fnetwork_interface_list, Snetwork_interface_list, 0, 0, 0, | 3342 DEFUN ("network-interface-list", Fnetwork_interface_list, Snetwork_interface_list, 0, 0, 0, |
3343 doc: /* Return an alist of all network interfaces and their network address. | 3343 doc: /* Return an alist of all network interfaces and their network address. |
3344 Each element is a cons, the car of which is a string containing the | 3344 Each element is a cons, the car of which is a string containing the |
3395 res); | 3395 res); |
3396 } | 3396 } |
3397 | 3397 |
3398 return res; | 3398 return res; |
3399 } | 3399 } |
3400 #endif | 3400 #endif /* SIOCGIFCONF */ |
3401 | 3401 |
3402 #if defined(SIOCGIFADDR) || defined(SIOCGIFHWADDR) || defined(SIOCGIFFLAGS) | 3402 #if defined(SIOCGIFADDR) || defined(SIOCGIFHWADDR) || defined(SIOCGIFFLAGS) |
3403 | 3403 |
3404 struct ifflag_def { | 3404 struct ifflag_def { |
3405 int flag_bit; | 3405 int flag_bit; |
3481 s = socket (AF_INET, SOCK_STREAM, 0); | 3481 s = socket (AF_INET, SOCK_STREAM, 0); |
3482 if (s < 0) | 3482 if (s < 0) |
3483 return Qnil; | 3483 return Qnil; |
3484 | 3484 |
3485 elt = Qnil; | 3485 elt = Qnil; |
3486 #ifdef SIOCGIFFLAGS | 3486 #if defined(SIOCGIFFLAGS) && defined(ifr_flags) |
3487 if (ioctl (s, SIOCGIFFLAGS, &rq) == 0) | 3487 if (ioctl (s, SIOCGIFFLAGS, &rq) == 0) |
3488 { | 3488 { |
3489 int flags = rq.ifr_flags; | 3489 int flags = rq.ifr_flags; |
3490 struct ifflag_def *fp; | 3490 struct ifflag_def *fp; |
3491 int fnum; | 3491 int fnum; |
3509 } | 3509 } |
3510 #endif | 3510 #endif |
3511 res = Fcons (elt, res); | 3511 res = Fcons (elt, res); |
3512 | 3512 |
3513 elt = Qnil; | 3513 elt = Qnil; |
3514 #ifdef SIOCGIFHWADDR | 3514 #if defined(SIOCGIFHWADDR) && defined(ifr_hwaddr) |
3515 if (ioctl (s, SIOCGIFHWADDR, &rq) == 0) | 3515 if (ioctl (s, SIOCGIFHWADDR, &rq) == 0) |
3516 { | 3516 { |
3517 Lisp_Object hwaddr = Fmake_vector (6, Qnil); | 3517 Lisp_Object hwaddr = Fmake_vector (make_number (6), Qnil); |
3518 register struct Lisp_Vector *p = XVECTOR (hwaddr); | 3518 register struct Lisp_Vector *p = XVECTOR (hwaddr); |
3519 int n; | 3519 int n; |
3520 | 3520 |
3521 any++; | 3521 any++; |
3522 for (n = 0; n < 6; n++) | 3522 for (n = 0; n < 6; n++) |
3525 } | 3525 } |
3526 #endif | 3526 #endif |
3527 res = Fcons (elt, res); | 3527 res = Fcons (elt, res); |
3528 | 3528 |
3529 elt = Qnil; | 3529 elt = Qnil; |
3530 #ifdef SIOCGIFNETMASK | 3530 #if defined(SIOCGIFNETMASK) && defined(ifr_netmask) |
3531 if (ioctl (s, SIOCGIFNETMASK, &rq) == 0) | 3531 if (ioctl (s, SIOCGIFNETMASK, &rq) == 0) |
3532 { | 3532 { |
3533 any++; | 3533 any++; |
3534 elt = conv_sockaddr_to_lisp (&rq.ifr_netmask, sizeof (rq.ifr_netmask)); | 3534 elt = conv_sockaddr_to_lisp (&rq.ifr_netmask, sizeof (rq.ifr_netmask)); |
3535 } | 3535 } |
3536 #endif | 3536 #endif |
3537 res = Fcons (elt, res); | 3537 res = Fcons (elt, res); |
3538 | 3538 |
3539 elt = Qnil; | 3539 elt = Qnil; |
3540 #ifdef SIOCGIFBRDADDR | 3540 #if defined(SIOCGIFBRDADDR) && defined(ifr_broadaddr) |
3541 if (ioctl (s, SIOCGIFBRDADDR, &rq) == 0) | 3541 if (ioctl (s, SIOCGIFBRDADDR, &rq) == 0) |
3542 { | 3542 { |
3543 any++; | 3543 any++; |
3544 elt = conv_sockaddr_to_lisp (&rq.ifr_broadaddr, sizeof (rq.ifr_broadaddr)); | 3544 elt = conv_sockaddr_to_lisp (&rq.ifr_broadaddr, sizeof (rq.ifr_broadaddr)); |
3545 } | 3545 } |
3546 #endif | 3546 #endif |
3547 res = Fcons (elt, res); | 3547 res = Fcons (elt, res); |
3548 | 3548 |
3549 elt = Qnil; | 3549 elt = Qnil; |
3550 #ifdef SIOCGIFADDR | 3550 #if defined(SIOCGIFADDR) && defined(ifr_addr) |
3551 if (ioctl (s, SIOCGIFADDR, &rq) == 0) | 3551 if (ioctl (s, SIOCGIFADDR, &rq) == 0) |
3552 { | 3552 { |
3553 any++; | 3553 any++; |
3554 elt = conv_sockaddr_to_lisp (&rq.ifr_addr, sizeof (rq.ifr_addr)); | 3554 elt = conv_sockaddr_to_lisp (&rq.ifr_addr, sizeof (rq.ifr_addr)); |
3555 } | 3555 } |
6654 defsubr (&Sstart_process); | 6654 defsubr (&Sstart_process); |
6655 #ifdef HAVE_SOCKETS | 6655 #ifdef HAVE_SOCKETS |
6656 defsubr (&Sset_network_process_option); | 6656 defsubr (&Sset_network_process_option); |
6657 defsubr (&Smake_network_process); | 6657 defsubr (&Smake_network_process); |
6658 defsubr (&Sformat_network_address); | 6658 defsubr (&Sformat_network_address); |
6659 #endif /* HAVE_SOCKETS */ | |
6660 #if defined(HAVE_SOCKETS) && defined(HAVE_NET_IF_H) && defined(HAVE_SYS_IOCTL_H) | |
6659 #ifdef SIOCGIFCONF | 6661 #ifdef SIOCGIFCONF |
6660 defsubr (&Snetwork_interface_list); | 6662 defsubr (&Snetwork_interface_list); |
6661 #endif | 6663 #endif |
6662 #if defined(SIOCGIFADDR) || defined(SIOCGIFHWADDR) || defined(SIOCGIFFLAGS) | 6664 #if defined(SIOCGIFADDR) || defined(SIOCGIFHWADDR) || defined(SIOCGIFFLAGS) |
6663 defsubr (&Snetwork_interface_info); | 6665 defsubr (&Snetwork_interface_info); |
6664 #endif | 6666 #endif |
6665 #endif /* HAVE_SOCKETS */ | 6667 #endif /* HAVE_SOCKETS ... */ |
6666 #ifdef DATAGRAM_SOCKETS | 6668 #ifdef DATAGRAM_SOCKETS |
6667 defsubr (&Sprocess_datagram_address); | 6669 defsubr (&Sprocess_datagram_address); |
6668 defsubr (&Sset_process_datagram_address); | 6670 defsubr (&Sset_process_datagram_address); |
6669 #endif | 6671 #endif |
6670 defsubr (&Saccept_process_output); | 6672 defsubr (&Saccept_process_output); |