This reverts commit 55050e54a9, which
rebuilds xdg-utils and hence a good part of the world (1838 packages).
Reported by mroh in #guix.
		
	
			
		
			
				
	
	
		
			583 lines
		
	
	
	
		
			16 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			583 lines
		
	
	
	
		
			16 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
Support compiling on the Hurd.
 | 
						||
 | 
						||
Taken from https://git.hadrons.org/cgit/debian/pkgs/inetutils.git/tree/debian/patches/0002-ifconfig-Improve-the-support-for-GNU-Hurd.patch
 | 
						||
 | 
						||
From 9a90d9b9119906df23cb2db1503cb0f099942dd9 Mon Sep 17 00:00:00 2001
 | 
						||
From: Mats Erik Andersson <gnu@gisladisker.se>
 | 
						||
Date: Sat, 18 Jul 2015 01:12:41 +0200
 | 
						||
Subject: [PATCH 02/35] ifconfig: Improve the support for GNU/Hurd.
 | 
						||
 | 
						||
Use system specific code instead of generic code.
 | 
						||
This provides abilities similar to other systems.
 | 
						||
---
 | 
						||
 ChangeLog                   |  17 +++
 | 
						||
 ifconfig/system.c           |  10 +-
 | 
						||
 ifconfig/system.h           |   2 +
 | 
						||
 ifconfig/system/Makefile.am |   4 +-
 | 
						||
 ifconfig/system/generic.c   |  14 +-
 | 
						||
 ifconfig/system/hurd.c      | 292 ++++++++++++++++++++++++++++++++++++
 | 
						||
 ifconfig/system/hurd.h      |  50 ++++++
 | 
						||
 7 files changed, 381 insertions(+), 8 deletions(-)
 | 
						||
 create mode 100644 ifconfig/system/hurd.c
 | 
						||
 create mode 100644 ifconfig/system/hurd.h
 | 
						||
 | 
						||
diff --git a/ifconfig/system.c b/ifconfig/system.c
 | 
						||
index 30677e41..e108dc2e 100644
 | 
						||
--- a/ifconfig/system.c
 | 
						||
+++ b/ifconfig/system.c
 | 
						||
@@ -25,10 +25,12 @@
 | 
						||
 # include "system/solaris.c"
 | 
						||
 #elif defined __QNX__
 | 
						||
 # include "system/qnx.c"
 | 
						||
-# elif defined __DragonFly__ || defined __FreeBSD__ || \
 | 
						||
-       defined __FreeBSD_kernel__ || \
 | 
						||
-       defined __NetBSD__ || defined __OpenBSD__
 | 
						||
-#  include "system/bsd.c"
 | 
						||
+#elif defined __DragonFly__ || defined __FreeBSD__ || \
 | 
						||
+      defined __FreeBSD_kernel__ || \
 | 
						||
+      defined __NetBSD__ || defined __OpenBSD__
 | 
						||
+# include "system/bsd.c"
 | 
						||
+#elif defined __GNU__
 | 
						||
+# include "system/hurd.c"
 | 
						||
 #else
 | 
						||
 # include "system/generic.c"
 | 
						||
 #endif
 | 
						||
diff --git a/ifconfig/system.h b/ifconfig/system.h
 | 
						||
index 8521ad95..66878d3a 100644
 | 
						||
--- a/ifconfig/system.h
 | 
						||
+++ b/ifconfig/system.h
 | 
						||
@@ -97,6 +97,8 @@ extern struct if_nameindex* (*system_if_nameindex) (void);
 | 
						||
        defined __FreeBSD_kernel__ || \
 | 
						||
        defined __NetBSD__ || defined __OpenBSD__
 | 
						||
 #  include "system/bsd.h"
 | 
						||
+# elif defined __GNU__
 | 
						||
+#  include "system/hurd.h"
 | 
						||
 # else
 | 
						||
 #  include "system/generic.h"
 | 
						||
 # endif
 | 
						||
diff --git a/ifconfig/system/Makefile.am b/ifconfig/system/Makefile.am
 | 
						||
index 954c6774..62a9f1c4 100644
 | 
						||
--- a/ifconfig/system/Makefile.am
 | 
						||
+++ b/ifconfig/system/Makefile.am
 | 
						||
@@ -26,8 +26,10 @@ noinst_HEADERS = \
 | 
						||
 	linux.h \
 | 
						||
 	solaris.h \
 | 
						||
 	qnx.h \
 | 
						||
+	hurd.h \
 | 
						||
 	bsd.c \
 | 
						||
 	generic.c \
 | 
						||
 	linux.c \
 | 
						||
 	solaris.c \
 | 
						||
-	qnx.c
 | 
						||
+	qnx.c \
 | 
						||
+	hurd.c
 | 
						||
diff --git a/ifconfig/system/generic.c b/ifconfig/system/generic.c
 | 
						||
index 9a2bda55..20a78bde 100644
 | 
						||
--- a/ifconfig/system/generic.c
 | 
						||
+++ b/ifconfig/system/generic.c
 | 
						||
@@ -22,6 +22,8 @@
 | 
						||
 #include <config.h>
 | 
						||
 
 | 
						||
 #include "../ifconfig.h"
 | 
						||
+
 | 
						||
+#include <unused-parameter.h>
 | 
						||
 
 | 
						||
 
 | 
						||
 /* Output format stuff.  */
 | 
						||
@@ -36,19 +38,25 @@ const char *system_help;
 | 
						||
 struct argp_child system_argp_child;
 | 
						||
 
 | 
						||
 int
 | 
						||
-system_parse_opt (struct ifconfig **ifp, char option, char *optarg)
 | 
						||
+system_parse_opt (struct ifconfig **ifp _GL_UNUSED_PARAMETER,
 | 
						||
+		  char option _GL_UNUSED_PARAMETER,
 | 
						||
+		  char *optarg _GL_UNUSED_PARAMETER)
 | 
						||
 {
 | 
						||
   return 0;
 | 
						||
 }
 | 
						||
 
 | 
						||
 int
 | 
						||
-system_parse_opt_rest (struct ifconfig **ifp, int argc, char *argv[])
 | 
						||
+system_parse_opt_rest (struct ifconfig **ifp _GL_UNUSED_PARAMETER,
 | 
						||
+		       int argc _GL_UNUSED_PARAMETER,
 | 
						||
+		       char *argv[] _GL_UNUSED_PARAMETER)
 | 
						||
 {
 | 
						||
   return 0;
 | 
						||
 }
 | 
						||
 
 | 
						||
 int
 | 
						||
-system_configure (int sfd, struct ifreq *ifr, struct system_ifconfig *ifs)
 | 
						||
+system_configure (int sfd _GL_UNUSED_PARAMETER,
 | 
						||
+		  struct ifreq *ifr _GL_UNUSED_PARAMETER,
 | 
						||
+		  struct system_ifconfig *ifs _GL_UNUSED_PARAMETER)
 | 
						||
 {
 | 
						||
   return 0;
 | 
						||
 }
 | 
						||
diff --git a/ifconfig/system/hurd.c b/ifconfig/system/hurd.c
 | 
						||
new file mode 100644
 | 
						||
index 00000000..3bd19775
 | 
						||
--- /dev/null
 | 
						||
+++ b/ifconfig/system/hurd.c
 | 
						||
@@ -0,0 +1,292 @@
 | 
						||
+/* hurd.c -- Code for ifconfig specific to GNU/Hurd.
 | 
						||
+  Copyright (C) 2015 Free Software Foundation, Inc.
 | 
						||
+
 | 
						||
+  This file is part of GNU Inetutils.
 | 
						||
+
 | 
						||
+  GNU Inetutils is free software: you can redistribute it and/or modify
 | 
						||
+  it under the terms of the GNU General Public License as published by
 | 
						||
+  the Free Software Foundation, either version 3 of the License, or (at
 | 
						||
+  your option) any later version.
 | 
						||
+
 | 
						||
+  GNU Inetutils is distributed in the hope that it will be useful, but
 | 
						||
+  WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
						||
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | 
						||
+  General Public License for more details.
 | 
						||
+
 | 
						||
+  You should have received a copy of the GNU General Public License
 | 
						||
+  along with this program.  If not, see `http://www.gnu.org/licenses/'. */
 | 
						||
+
 | 
						||
+/* Mostly written by Marcus Brinkmann.
 | 
						||
+   Adaptions to GNU/Hurd by Mats Erik Andersson.  */
 | 
						||
+
 | 
						||
+#include <config.h>
 | 
						||
+
 | 
						||
+#include <stdlib.h>
 | 
						||
+#include <sys/ioctl.h>
 | 
						||
+#include <net/if_arp.h>
 | 
						||
+#include "../ifconfig.h"
 | 
						||
+
 | 
						||
+#include <unused-parameter.h>
 | 
						||
+
 | 
						||
+
 | 
						||
+/* Output format stuff.  */
 | 
						||
+
 | 
						||
+const char *system_default_format = "gnu";
 | 
						||
+
 | 
						||
+
 | 
						||
+/* Argument parsing stuff.  */
 | 
						||
+
 | 
						||
+const char *system_help = "NAME [ADDR]\
 | 
						||
+ [broadcast BRDADDR] [netmask MASK]\
 | 
						||
+ [mtu N] [up|down] [FLAGS]";
 | 
						||
+
 | 
						||
+struct argp_child system_argp_child;
 | 
						||
+
 | 
						||
+int
 | 
						||
+system_parse_opt (struct ifconfig **ifp _GL_UNUSED_PARAMETER,
 | 
						||
+		  char option _GL_UNUSED_PARAMETER,
 | 
						||
+		  char *optarg _GL_UNUSED_PARAMETER)
 | 
						||
+{
 | 
						||
+  return 0;
 | 
						||
+}
 | 
						||
+
 | 
						||
+int
 | 
						||
+system_parse_opt_rest (struct ifconfig **ifp, int argc, char *argv[])
 | 
						||
+{
 | 
						||
+  int i = 0, mask, rev;
 | 
						||
+  enum {
 | 
						||
+    EXPECT_NOTHING,
 | 
						||
+    EXPECT_AF,
 | 
						||
+    EXPECT_BROADCAST,
 | 
						||
+    EXPECT_NETMASK,
 | 
						||
+    EXPECT_METRIC,
 | 
						||
+    EXPECT_MTU
 | 
						||
+  } expect = EXPECT_AF;
 | 
						||
+
 | 
						||
+  *ifp = parse_opt_new_ifs (argv[0]);
 | 
						||
+
 | 
						||
+  while (++i < argc)
 | 
						||
+    {
 | 
						||
+      switch (expect)
 | 
						||
+	{
 | 
						||
+	case EXPECT_BROADCAST:
 | 
						||
+	  parse_opt_set_brdaddr (*ifp, argv[i]);
 | 
						||
+	  break;
 | 
						||
+
 | 
						||
+	case EXPECT_NETMASK:
 | 
						||
+	  parse_opt_set_netmask (*ifp, argv[i]);
 | 
						||
+	  break;
 | 
						||
+
 | 
						||
+	case EXPECT_MTU:
 | 
						||
+	  parse_opt_set_mtu (*ifp, argv[i]);
 | 
						||
+	  break;
 | 
						||
+
 | 
						||
+	/* XXX: 2015-07-18, GNU/Hurd does not yet support
 | 
						||
+		ioctl(SIOCSIFMETRIC), but we let the code
 | 
						||
+		handle this standard ability anyway!
 | 
						||
+	 */
 | 
						||
+	case EXPECT_METRIC:
 | 
						||
+	  parse_opt_set_metric (*ifp, argv[i]);
 | 
						||
+	  break;
 | 
						||
+
 | 
						||
+	case EXPECT_AF:
 | 
						||
+	  expect = EXPECT_NOTHING;
 | 
						||
+	  if (!strcmp (argv[i], "inet"))
 | 
						||
+	    continue;
 | 
						||
+	  else if (!strcmp (argv[i], "inet6"))
 | 
						||
+	    {
 | 
						||
+	      error (0, 0, "%s is not a supported address family", argv[i]);
 | 
						||
+	      return 0;
 | 
						||
+	    }
 | 
						||
+	  break;
 | 
						||
+
 | 
						||
+	case EXPECT_NOTHING:
 | 
						||
+	  break;
 | 
						||
+	}
 | 
						||
+
 | 
						||
+      if (expect != EXPECT_NOTHING)
 | 
						||
+	expect = EXPECT_NOTHING;
 | 
						||
+      else if (!strcmp (argv[i], "broadcast"))
 | 
						||
+	expect = EXPECT_BROADCAST;
 | 
						||
+      else if (!strcmp (argv[i], "netmask"))
 | 
						||
+	expect = EXPECT_NETMASK;
 | 
						||
+      else if (!strcmp (argv[i], "metric"))
 | 
						||
+	expect = EXPECT_METRIC;
 | 
						||
+      else if (!strcmp (argv[i], "mtu"))
 | 
						||
+	expect = EXPECT_MTU;
 | 
						||
+      else if (!strcmp (argv[i], "up"))
 | 
						||
+	parse_opt_set_flag (*ifp, IFF_UP | IFF_RUNNING, 0);
 | 
						||
+      else if (!strcmp (argv[i], "down"))
 | 
						||
+	parse_opt_set_flag (*ifp, IFF_UP, 1);
 | 
						||
+      else if (((mask = if_nameztoflag (argv[i], &rev))
 | 
						||
+		& ~IU_IFF_CANTCHANGE) != 0)
 | 
						||
+	parse_opt_set_flag (*ifp, mask, rev);
 | 
						||
+      else
 | 
						||
+	{
 | 
						||
+	  if (!((*ifp)->valid & IF_VALID_ADDR))
 | 
						||
+	    parse_opt_set_address (*ifp, argv[i]);
 | 
						||
+	  else if (!((*ifp)->valid & IF_VALID_DSTADDR))
 | 
						||
+	    parse_opt_set_dstaddr (*ifp, argv[i]);
 | 
						||
+	}
 | 
						||
+    }
 | 
						||
+
 | 
						||
+  switch (expect)
 | 
						||
+    {
 | 
						||
+    case EXPECT_BROADCAST:
 | 
						||
+      error (0, 0, "option `broadcast' requires an argument");
 | 
						||
+      break;
 | 
						||
+
 | 
						||
+    case EXPECT_NETMASK:
 | 
						||
+      error (0, 0, "option `netmask' requires an argument");
 | 
						||
+      break;
 | 
						||
+
 | 
						||
+    case EXPECT_METRIC:
 | 
						||
+      error (0, 0, "option `metric' requires an argument");
 | 
						||
+      break;
 | 
						||
+
 | 
						||
+    case EXPECT_MTU:
 | 
						||
+      error (0, 0, "option `mtu' requires an argument");
 | 
						||
+      break;
 | 
						||
+
 | 
						||
+    case EXPECT_AF:
 | 
						||
+    case EXPECT_NOTHING:
 | 
						||
+      return 1;
 | 
						||
+    }
 | 
						||
+
 | 
						||
+  return 0;
 | 
						||
+}
 | 
						||
+
 | 
						||
+int
 | 
						||
+system_configure (int sfd _GL_UNUSED_PARAMETER,
 | 
						||
+		  struct ifreq *ifr _GL_UNUSED_PARAMETER,
 | 
						||
+		  struct system_ifconfig *ifs _GL_UNUSED_PARAMETER)
 | 
						||
+{
 | 
						||
+  return 0;
 | 
						||
+}
 | 
						||
+
 | 
						||
+struct if_nameindex* (*system_if_nameindex) (void) = if_nameindex;
 | 
						||
+
 | 
						||
+static void
 | 
						||
+print_hwaddr_ether (format_data_t form _GL_UNUSED_PARAMETER,
 | 
						||
+		    unsigned char *data)
 | 
						||
+{
 | 
						||
+  *column += printf ("%02X:%02X:%02X:%02X:%02X:%02X",
 | 
						||
+		     data[0], data[1], data[2], data[3], data[4], data[5]);
 | 
						||
+  had_output = 1;
 | 
						||
+}
 | 
						||
+
 | 
						||
+struct arphrd_symbol
 | 
						||
+{
 | 
						||
+  const char *name;
 | 
						||
+  const char *title;
 | 
						||
+  int value;
 | 
						||
+  void (*print_hwaddr) (format_data_t form, unsigned char *data);
 | 
						||
+} arphrd_symbols[] =
 | 
						||
+  {
 | 
						||
+#ifdef ARPHRD_ETHER		/* Ethernet 10/100Mbps.  */
 | 
						||
+    { "ETHER", "Ethernet", ARPHRD_ETHER, print_hwaddr_ether},
 | 
						||
+#endif
 | 
						||
+#ifdef ARPHRD_LOOPBACK		/* Loopback device.  */
 | 
						||
+    { "LOOPBACK", "Local Loopback", ARPHRD_LOOPBACK, NULL},
 | 
						||
+#endif
 | 
						||
+    /* XXX: The image debian-hurd-20150424 returns the value 4
 | 
						||
+	    instead of expected ARPHRD_LOOPBACK.  This has been
 | 
						||
+	    discussed in the list debian-hurd, where I was asked
 | 
						||
+	    to resist the temptation of a work around!
 | 
						||
+     */
 | 
						||
+    { NULL, NULL, 0, NULL}
 | 
						||
+  };
 | 
						||
+
 | 
						||
+struct arphrd_symbol *
 | 
						||
+arphrd_findvalue (int value)
 | 
						||
+{
 | 
						||
+  struct arphrd_symbol *arp = arphrd_symbols;
 | 
						||
+  while (arp->name != NULL)
 | 
						||
+    {
 | 
						||
+      if (arp->value == value)
 | 
						||
+	break;
 | 
						||
+      arp++;
 | 
						||
+    }
 | 
						||
+  if (arp->name)
 | 
						||
+    return arp;
 | 
						||
+  else
 | 
						||
+    return NULL;
 | 
						||
+}
 | 
						||
+
 | 
						||
+void
 | 
						||
+system_fh_hwaddr_query (format_data_t form, int argc, char *argv[])
 | 
						||
+{
 | 
						||
+#ifdef SIOCGIFHWADDR
 | 
						||
+  struct arphrd_symbol *arp;
 | 
						||
+
 | 
						||
+  if (ioctl (form->sfd, SIOCGIFHWADDR, form->ifr) < 0)
 | 
						||
+    select_arg (form, argc, argv, 1);
 | 
						||
+
 | 
						||
+  arp = arphrd_findvalue (form->ifr->ifr_hwaddr.sa_family);
 | 
						||
+  select_arg (form, argc, argv, (arp && arp->print_hwaddr) ? 0 : 1);
 | 
						||
+#else
 | 
						||
+  select_arg (form, argc, argv, 1);
 | 
						||
+#endif
 | 
						||
+}
 | 
						||
+
 | 
						||
+void
 | 
						||
+system_fh_hwaddr (format_data_t form, int argc _GL_UNUSED_PARAMETER,
 | 
						||
+		  char *argv[] _GL_UNUSED_PARAMETER)
 | 
						||
+{
 | 
						||
+#ifdef SIOCGIFHWADDR
 | 
						||
+  if (ioctl (form->sfd, SIOCGIFHWADDR, form->ifr) < 0)
 | 
						||
+    error (EXIT_FAILURE, errno,
 | 
						||
+	   "SIOCGIFHWADDR failed for interface `%s'",
 | 
						||
+	   form->ifr->ifr_name);
 | 
						||
+  else
 | 
						||
+    {
 | 
						||
+      struct arphrd_symbol *arp;
 | 
						||
+
 | 
						||
+      arp = arphrd_findvalue (form->ifr->ifr_hwaddr.sa_family);
 | 
						||
+      if (arp && arp->print_hwaddr)
 | 
						||
+	arp->print_hwaddr (form,
 | 
						||
+			   (unsigned char *) form->ifr->ifr_hwaddr.sa_data);
 | 
						||
+      else
 | 
						||
+	put_string (form, "(hwaddr unknown)");
 | 
						||
+    }
 | 
						||
+#else
 | 
						||
+  *column += printf ("(not available)");
 | 
						||
+  had_output = 1;
 | 
						||
+#endif
 | 
						||
+}
 | 
						||
+
 | 
						||
+void
 | 
						||
+system_fh_hwtype_query (format_data_t form, int argc, char *argv[])
 | 
						||
+{
 | 
						||
+#ifdef SIOCGIFHWADDR
 | 
						||
+  if (ioctl (form->sfd, SIOCGIFHWADDR, form->ifr) >= 0)
 | 
						||
+    select_arg (form, argc, argv, 0);
 | 
						||
+  else
 | 
						||
+#endif
 | 
						||
+    select_arg (form, argc, argv, 1);
 | 
						||
+}
 | 
						||
+
 | 
						||
+void
 | 
						||
+system_fh_hwtype (format_data_t form, int argc _GL_UNUSED_PARAMETER,
 | 
						||
+		  char *argv[] _GL_UNUSED_PARAMETER)
 | 
						||
+{
 | 
						||
+#ifdef SIOCGIFHWADDR
 | 
						||
+  if (ioctl (form->sfd, SIOCGIFHWADDR, form->ifr) < 0)
 | 
						||
+    error (EXIT_FAILURE, errno,
 | 
						||
+	   "SIOCGIFHWADDR failed for interface `%s'",
 | 
						||
+	   form->ifr->ifr_name);
 | 
						||
+  else
 | 
						||
+    {
 | 
						||
+      struct arphrd_symbol *arp;
 | 
						||
+
 | 
						||
+      arp = arphrd_findvalue (form->ifr->ifr_hwaddr.sa_family);
 | 
						||
+      if (arp)
 | 
						||
+	put_string (form, arp->title);
 | 
						||
+      else
 | 
						||
+	put_string (form, "(hwtype unknown)");
 | 
						||
+    }
 | 
						||
+#else
 | 
						||
+  *column += printf ("(not available)");
 | 
						||
+  had_output = 1;
 | 
						||
+#endif
 | 
						||
+}
 | 
						||
diff --git a/ifconfig/system/hurd.h b/ifconfig/system/hurd.h
 | 
						||
new file mode 100644
 | 
						||
index 00000000..bab14565
 | 
						||
--- /dev/null
 | 
						||
+++ b/ifconfig/system/hurd.h
 | 
						||
@@ -0,0 +1,50 @@
 | 
						||
+/*
 | 
						||
+  Copyright (C) 2015 Free Software Foundation, Inc.
 | 
						||
+
 | 
						||
+  This file is part of GNU Inetutils.
 | 
						||
+
 | 
						||
+  GNU Inetutils is free software: you can redistribute it and/or modify
 | 
						||
+  it under the terms of the GNU General Public License as published by
 | 
						||
+  the Free Software Foundation, either version 3 of the License, or (at
 | 
						||
+  your option) any later version.
 | 
						||
+
 | 
						||
+  GNU Inetutils is distributed in the hope that it will be useful, but
 | 
						||
+  WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
						||
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | 
						||
+  General Public License for more details.
 | 
						||
+
 | 
						||
+  You should have received a copy of the GNU General Public License
 | 
						||
+  along with this program.  If not, see `http://www.gnu.org/licenses/'. */
 | 
						||
+
 | 
						||
+/* Written by Mats Erik Andersson.  */
 | 
						||
+
 | 
						||
+#ifndef IFCONFIG_SYSTEM_HURD_H
 | 
						||
+# define IFCONFIG_SYSTEM_HURD_H
 | 
						||
+
 | 
						||
+# include "../printif.h"
 | 
						||
+# include "../options.h"
 | 
						||
+
 | 
						||
+
 | 
						||
+/* Option support.  */
 | 
						||
+
 | 
						||
+struct system_ifconfig
 | 
						||
+{
 | 
						||
+  int valid;
 | 
						||
+};
 | 
						||
+
 | 
						||
+
 | 
						||
+/* Output format support.  */
 | 
						||
+
 | 
						||
+# define SYSTEM_FORMAT_HANDLER \
 | 
						||
+  { "hurd", fh_nothing}, \
 | 
						||
+  { "hwaddr?", system_fh_hwaddr_query}, \
 | 
						||
+  { "hwaddr", system_fh_hwaddr}, \
 | 
						||
+  { "hwtype?", system_fh_hwtype_query}, \
 | 
						||
+  { "hwtype", system_fh_hwtype},
 | 
						||
+
 | 
						||
+void system_fh_hwaddr_query (format_data_t form, int argc, char *argv[]);
 | 
						||
+void system_fh_hwaddr (format_data_t form, int argc, char *argv[]);
 | 
						||
+void system_fh_hwtype_query (format_data_t form, int argc, char *argv[]);
 | 
						||
+void system_fh_hwtype (format_data_t form, int argc, char *argv[]);
 | 
						||
+
 | 
						||
+#endif /* !IFCONFIG_SYSTEM_HURD_H */
 | 
						||
-- 
 | 
						||
2.23.0.rc1.170.gbd704faa3e
 | 
						||
 | 
						||
From 589dab9c7d3119da82837dabae34c8a3d16cbe49 Mon Sep 17 00:00:00 2001
 | 
						||
From: Mats Erik Andersson <gnu@gisladisker.se>
 | 
						||
Date: Thu, 30 Jul 2015 01:06:42 +0200
 | 
						||
Subject: [PATCH 07/35] ifconfig: Hardware detection in GNU/Hurd.
 | 
						||
 | 
						||
A work-around needed to distinguish hardware type.
 | 
						||
---
 | 
						||
 ChangeLog              | 10 ++++++++++
 | 
						||
 ifconfig/system/hurd.c | 19 ++++++++++++-------
 | 
						||
 2 files changed, 22 insertions(+), 7 deletions(-)
 | 
						||
 | 
						||
diff --git a/ifconfig/system/hurd.c b/ifconfig/system/hurd.c
 | 
						||
index 3bd19775..b6261a00 100644
 | 
						||
--- a/ifconfig/system/hurd.c
 | 
						||
+++ b/ifconfig/system/hurd.c
 | 
						||
@@ -175,6 +175,16 @@ print_hwaddr_ether (format_data_t form _GL_UNUSED_PARAMETER,
 | 
						||
   had_output = 1;
 | 
						||
 }
 | 
						||
 
 | 
						||
+/* GNU/Hurd and Mach are using a mixture of BSD definitions
 | 
						||
+ * and GNU/Linux interface headers, which in this situation
 | 
						||
+ * means that sa_family_t is an unsigned char, from BSD, while
 | 
						||
+ * all ARPHRD_* come from GNU/Linux and are thus 16 bits wide.
 | 
						||
+ * We must account for this.  The following bitmask will
 | 
						||
+ * adapt to any future change!
 | 
						||
+ */
 | 
						||
+
 | 
						||
+#define _ARP_MASK ((sizeof (sa_family_t) == 1) ? 0xff : 0xffff)
 | 
						||
+
 | 
						||
 struct arphrd_symbol
 | 
						||
 {
 | 
						||
   const char *name;
 | 
						||
@@ -184,16 +194,11 @@ struct arphrd_symbol
 | 
						||
 } arphrd_symbols[] =
 | 
						||
   {
 | 
						||
 #ifdef ARPHRD_ETHER		/* Ethernet 10/100Mbps.  */
 | 
						||
-    { "ETHER", "Ethernet", ARPHRD_ETHER, print_hwaddr_ether},
 | 
						||
+    { "ETHER", "Ethernet", ARPHRD_ETHER & _ARP_MASK, print_hwaddr_ether},
 | 
						||
 #endif
 | 
						||
 #ifdef ARPHRD_LOOPBACK		/* Loopback device.  */
 | 
						||
-    { "LOOPBACK", "Local Loopback", ARPHRD_LOOPBACK, NULL},
 | 
						||
+    { "LOOPBACK", "Local Loopback", ARPHRD_LOOPBACK & _ARP_MASK, NULL},
 | 
						||
 #endif
 | 
						||
-    /* XXX: The image debian-hurd-20150424 returns the value 4
 | 
						||
-	    instead of expected ARPHRD_LOOPBACK.  This has been
 | 
						||
-	    discussed in the list debian-hurd, where I was asked
 | 
						||
-	    to resist the temptation of a work around!
 | 
						||
-     */
 | 
						||
     { NULL, NULL, 0, NULL}
 | 
						||
   };
 | 
						||
 
 | 
						||
-- 
 | 
						||
2.23.0.rc1.170.gbd704faa3e
 | 
						||
 | 
						||
From d379784b4461d17b2536effd1b52bae21cd28a32 Mon Sep 17 00:00:00 2001
 | 
						||
From: Guillem Jover <guillem@hadrons.org>
 | 
						||
Date: Fri, 16 Aug 2019 00:34:03 +0200
 | 
						||
Subject: [PATCH 35/35] telnet: Several ioctls have been disabled in the Hurd's
 | 
						||
 glibc
 | 
						||
 | 
						||
But not the related option macros. inetutils uses those macros to decide
 | 
						||
whether the ioctls are available, so it is FTBFS now. The Hurd's glibc
 | 
						||
is being fixed, but we'll use this for now to get the builds going.
 | 
						||
---
 | 
						||
 telnet/sys_bsd.c | 7 ++++++-
 | 
						||
 1 file changed, 6 insertions(+), 1 deletion(-)
 | 
						||
 | 
						||
diff --git a/telnet/sys_bsd.c b/telnet/sys_bsd.c
 | 
						||
index 662536ab..5eb35cb5 100644
 | 
						||
--- a/telnet/sys_bsd.c
 | 
						||
+++ b/telnet/sys_bsd.c
 | 
						||
@@ -63,6 +63,7 @@
 | 
						||
 #include <errno.h>
 | 
						||
 #include <arpa/telnet.h>
 | 
						||
 #include <sys/select.h>
 | 
						||
+#include <sys/ioctl.h>
 | 
						||
 #include <unused-parameter.h>
 | 
						||
 
 | 
						||
 #include "ring.h"
 | 
						||
@@ -157,7 +158,7 @@ TerminalRead (char *buf, int n)
 | 
						||
 int
 | 
						||
 TerminalAutoFlush (void)
 | 
						||
 {
 | 
						||
-#if defined LNOFLSH
 | 
						||
+#if defined TIOCLGET && defined LNOFLSH
 | 
						||
   int flush;
 | 
						||
 
 | 
						||
   ioctl (0, TIOCLGET, (char *) &flush);
 | 
						||
@@ -260,7 +261,9 @@ TerminalSaveState (void)
 | 
						||
   ioctl (0, TIOCGETP, (char *) &ottyb);
 | 
						||
   ioctl (0, TIOCGETC, (char *) &otc);
 | 
						||
   ioctl (0, TIOCGLTC, (char *) &oltc);
 | 
						||
+#ifdef TIOCLGET
 | 
						||
   ioctl (0, TIOCLGET, (char *) &olmode);
 | 
						||
+#endif
 | 
						||
 
 | 
						||
   ntc = otc;
 | 
						||
   nltc = oltc;
 | 
						||
@@ -755,7 +758,9 @@ TerminalNewMode (register int f)
 | 
						||
 #endif
 | 
						||
     }
 | 
						||
 #ifndef USE_TERMIO
 | 
						||
+#ifdef TIOCLSET
 | 
						||
   ioctl (tin, TIOCLSET, (char *) &lmode);
 | 
						||
+#endif
 | 
						||
   ioctl (tin, TIOCSLTC, (char *) <c);
 | 
						||
   ioctl (tin, TIOCSETC, (char *) &tc);
 | 
						||
   ioctl (tin, TIOCSETN, (char *) &sb);
 | 
						||
-- 
 | 
						||
2.23.0.rc1.170.gbd704faa3e
 | 
						||
 |