diff 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
line wrap: on
line diff
--- a/src/process.c	Wed Sep 17 18:33:38 2003 +0000
+++ b/src/process.c	Wed Sep 17 21:31:53 2003 +0000
@@ -3336,7 +3336,7 @@
 #endif	/* HAVE_SOCKETS */
 
 
-#ifdef HAVE_SOCKETS
+#if defined(HAVE_SOCKETS) && defined(HAVE_NET_IF_H) && defined(HAVE_SYS_IOCTL_H)
 
 #ifdef SIOCGIFCONF
 DEFUN ("network-interface-list", Fnetwork_interface_list, Snetwork_interface_list, 0, 0, 0,
@@ -3397,7 +3397,7 @@
 
   return res;
 }
-#endif
+#endif /* SIOCGIFCONF */
 
 #if defined(SIOCGIFADDR) || defined(SIOCGIFHWADDR) || defined(SIOCGIFFLAGS)
 
@@ -3483,7 +3483,7 @@
     return Qnil;
 
   elt = Qnil;
-#ifdef SIOCGIFFLAGS
+#if defined(SIOCGIFFLAGS) && defined(ifr_flags)
   if (ioctl (s, SIOCGIFFLAGS, &rq) == 0)
     {
       int flags = rq.ifr_flags;
@@ -3511,10 +3511,10 @@
   res = Fcons (elt, res);
 
   elt = Qnil;
-#ifdef SIOCGIFHWADDR
+#if defined(SIOCGIFHWADDR) && defined(ifr_hwaddr)
   if (ioctl (s, SIOCGIFHWADDR, &rq) == 0)
     {
-      Lisp_Object hwaddr = Fmake_vector (6, Qnil);
+      Lisp_Object hwaddr = Fmake_vector (make_number (6), Qnil);
       register struct Lisp_Vector *p = XVECTOR (hwaddr);
       int n;
 
@@ -3527,7 +3527,7 @@
   res = Fcons (elt, res);
 
   elt = Qnil;
-#ifdef SIOCGIFNETMASK
+#if defined(SIOCGIFNETMASK) && defined(ifr_netmask)
   if (ioctl (s, SIOCGIFNETMASK, &rq) == 0)
     {
       any++;
@@ -3537,7 +3537,7 @@
   res = Fcons (elt, res);
 
   elt = Qnil;
-#ifdef SIOCGIFBRDADDR
+#if defined(SIOCGIFBRDADDR) && defined(ifr_broadaddr)
   if (ioctl (s, SIOCGIFBRDADDR, &rq) == 0)
     {
       any++;
@@ -3547,7 +3547,7 @@
   res = Fcons (elt, res);
 
   elt = Qnil;
-#ifdef SIOCGIFADDR
+#if defined(SIOCGIFADDR) && defined(ifr_addr)
   if (ioctl (s, SIOCGIFADDR, &rq) == 0)
     {
       any++;
@@ -6656,13 +6656,15 @@
   defsubr (&Sset_network_process_option);
   defsubr (&Smake_network_process);
   defsubr (&Sformat_network_address);
+#endif /* HAVE_SOCKETS */
+#if defined(HAVE_SOCKETS) && defined(HAVE_NET_IF_H) && defined(HAVE_SYS_IOCTL_H)
 #ifdef SIOCGIFCONF
   defsubr (&Snetwork_interface_list);
 #endif
 #if defined(SIOCGIFADDR) || defined(SIOCGIFHWADDR) || defined(SIOCGIFFLAGS)
   defsubr (&Snetwork_interface_info);
 #endif
-#endif /* HAVE_SOCKETS */
+#endif /* HAVE_SOCKETS ... */
 #ifdef DATAGRAM_SOCKETS
   defsubr (&Sprocess_datagram_address);
   defsubr (&Sset_process_datagram_address);