+2003-09-17 Kim F. Storm <storm@cua.dk>
+
+ * process.c (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.
+
2003-09-17 Dave Love <fx@gnu.org>
* unexalpha.c: Don't include varargs.h.
#endif /* HAVE_SOCKETS */
\f
-#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,
return res;
}
-#endif
+#endif /* SIOCGIFCONF */
#if defined(SIOCGIFADDR) || defined(SIOCGIFHWADDR) || defined(SIOCGIFFLAGS)
return Qnil;
elt = Qnil;
-#ifdef SIOCGIFFLAGS
+#if defined(SIOCGIFFLAGS) && defined(ifr_flags)
if (ioctl (s, SIOCGIFFLAGS, &rq) == 0)
{
int flags = rq.ifr_flags;
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;
res = Fcons (elt, res);
elt = Qnil;
-#ifdef SIOCGIFNETMASK
+#if defined(SIOCGIFNETMASK) && defined(ifr_netmask)
if (ioctl (s, SIOCGIFNETMASK, &rq) == 0)
{
any++;
res = Fcons (elt, res);
elt = Qnil;
-#ifdef SIOCGIFBRDADDR
+#if defined(SIOCGIFBRDADDR) && defined(ifr_broadaddr)
if (ioctl (s, SIOCGIFBRDADDR, &rq) == 0)
{
any++;
res = Fcons (elt, res);
elt = Qnil;
-#ifdef SIOCGIFADDR
+#if defined(SIOCGIFADDR) && defined(ifr_addr)
if (ioctl (s, SIOCGIFADDR, &rq) == 0)
{
any++;
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);