summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog10
-rw-r--r--libio/iofopncook.c7
-rw-r--r--localedata/charmaps/UTF820
-rw-r--r--localedata/repertoiremaps/mnemonic.ds2
-rw-r--r--sunrpc/pmap_clnt.c77
5 files changed, 91 insertions, 25 deletions
diff --git a/ChangeLog b/ChangeLog
index 200c811dda..0ac46ab466 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,15 @@
 1999-04-28  Ulrich Drepper  <drepper@cygnus.com>
 
+	* libio/iofopncook.c (_IO_cookie_seek): Correct return value.
+	Patch by Peter Miller <millerp@canb.auug.org.au>.
+
+1999-04-27  Thorsten Kukuk  <kukuk@suse.de>
+
+	* sunrpc/pmap_clnt.c: Add own get_myaddress function, which
+	  prefers loopback device.
+
+1999-04-28  Ulrich Drepper  <drepper@cygnus.com>
+
 	* posix/fnmatch.c (internal_fnmatch): Finish incomplete
 	no_leading_period change.
 
diff --git a/libio/iofopncook.c b/libio/iofopncook.c
index 4f28ec20a8..7820fa325a 100644
--- a/libio/iofopncook.c
+++ b/libio/iofopncook.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1993, 1995, 1997 Free Software Foundation, Inc.
+/* Copyright (C) 1993, 1995, 1997, 1999 Free Software Foundation, Inc.
    This file is part of the GNU IO Library.
 
    This library is free software; you can redistribute it and/or
@@ -81,10 +81,7 @@ _IO_cookie_seek (fp, offset, dir)
   pos = _IO_pos_0;
   _IO_pos_adjust (pos, offset);
 
-  if (cfile->io_functions.seek (cfile->cookie, pos, dir))
-    return _IO_pos_BAD;
-
-  return pos;
+  return cfile->io_functions.seek (cfile->cookie, pos, dir);
 }
 
 static int
diff --git a/localedata/charmaps/UTF8 b/localedata/charmaps/UTF8
index cb2a7a72fd..632e66bdaa 100644
--- a/localedata/charmaps/UTF8
+++ b/localedata/charmaps/UTF8
@@ -51,8 +51,8 @@ CHARMAP
 <D4>		/x14		<U0014>	DEVICE CONTROL FOUR (DC4)
 <NAK>		/x15		<U0015>	NEGATIVE ACKNOWLEDGE (NAK)
 <NK>		/x15		<U0015>	NEGATIVE ACKNOWLEDGE (NAK)
-<SYN>		/x16		<U0016>	SYNCRONOUS IDLE (SYN)
-<SY>		/x16		<U0016>	SYNCRONOUS IDLE (SYN)
+<SYN>		/x16		<U0016>	SYNCHRONOUS IDLE (SYN)
+<SY>		/x16		<U0016>	SYNCHRONOUS IDLE (SYN)
 <ETB>		/x17		<U0017>	END OF TRANSMISSION BLOCK (ETB)
 <EB>		/x17		<U0017>	END OF TRANSMISSION BLOCK (ETB)
 <CAN>		/x18		<U0018>	CANCEL (CAN)
@@ -524,8 +524,8 @@ CHARMAP
 <o1>		/xc7/xad	<U01ed>	LATIN SMALL LETTER O WITH OGONEK AND MACRON
 <EZ>		/xc7/xae	<U01ee>	LATIN CAPITAL LETTER EZH WITH CARON
 <ez>		/xc7/xaf	<U01ef>	LATIN SMALL LETTER EZH WITH CARON
-<G'>		/xc7/xb8	<U01f8>	LATIN CAPITAL LETTER G WITH ACUTE
-<g'>		/xc7/xb9	<U01f9>	LATIN SMALL LETTER G WITH ACUTE
+<G'>		/xc7/xb4	<U01f4>	LATIN CAPITAL LETTER G WITH ACUTE
+<g'>		/xc7/xb5	<U01f5>	LATIN SMALL LETTER G WITH ACUTE
 <AA'>		/xc7/xba	<U01fa>	LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
 <aa'>		/xc7/xbb	<U01fb>	LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
 <AE'>		/xc7/xbc	<U01fc>	LATIN CAPITAL LETTER AE WITH ACUTE
@@ -560,7 +560,7 @@ CHARMAP
 <;S>		/xca/xbb	<U02bb>	MODIFIER LETTER TURNED COMMA
 <1/>>		/xcb/x86	<U02c6>	MODIFIER LETTER CIRCUMFLEX ACCENT
 <'<>		/xcb/x87	<U02c7>	CARON (Mandarin Chinese third tone)
-<1!>		/xcb/x95	<U02d5>	MODIFIER LETTER GRAVE ACCENT
+<1!>		/xcb/x8b	<U02cb>	MODIFIER LETTER GRAVE ACCENT
 <'(>		/xcb/x98	<U02d8>	BREVE
 <'.>		/xcb/x99	<U02d9>	DOT ABOVE (Mandarin Chinese light tone)
 <'0>		/xcb/x9a	<U02da>	RING ABOVE
@@ -581,7 +581,7 @@ CHARMAP
 <O%>		/xce/x8c	<U038c>	GREEK CAPITAL LETTER OMICRON WITH TONOS
 <U%>		/xce/x8e	<U038e>	GREEK CAPITAL LETTER UPSILON WITH TONOS
 <W%>		/xce/x8f	<U038f>	GREEK CAPITAL LETTER OMEGA WITH TONOS
-<i3>		/xce/x90	<U0390>	GREEK SMALL LETTER IOTA WITH DIALYTICA AND TONOS
+<i3>		/xce/x90	<U0390>	GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
 <A*>		/xce/x91	<U0391>	GREEK CAPITAL LETTER ALPHA
 <B*>		/xce/x92	<U0392>	GREEK CAPITAL LETTER BETA
 <G*>		/xce/x93	<U0393>	GREEK CAPITAL LETTER GAMMA
@@ -1161,7 +1161,7 @@ CHARMAP
 <=s>		/xe2/x82/x8c	<U208c>	SUBSCRIPT EQUALS SIGN
 <(s>		/xe2/x82/x8d	<U208d>	SUBSCRIPT LEFT PARENTHESIS
 <)s>		/xe2/x82/x8e	<U208e>	SUBSCRIPT RIGHT PARENTHESIS
-<Ff>		/xe2/x82/xa3	<U20a3>	FRENCH FRANK SIGN
+<Ff>		/xe2/x82/xa3	<U20a3>	FRENCH FRANC SIGN
 <Li>		/xe2/x82/xa4	<U20a4>	LIRA SIGN
 <Pt>		/xe2/x82/xa7	<U20a7>	PESETA SIGN
 <W=>		/xe2/x82/xa9	<U20a9>	WON SIGN
@@ -1546,7 +1546,7 @@ CHARMAP
 <RO>		/xe2/x96/xa2	<U25a2>	WHITE SQUARE WITH ROUNDED CORNERS
 <Rr>		/xe2/x96/xa3	<U25a3>	WHITE SQUARE CONTAINING BLACK SMALL SQUARE
 <RF>		/xe2/x96/xa4	<U25a4>	SQUARE WITH HORIZONTAL FILL
-<RY>	/x00	SQUARE WITH VERTICAL FILL
+<RY>		/xe2/x96/xa5	<U25a5>	SQUARE WITH VERTICAL FILL
 <RH>		/xe2/x96/xa6	<U25a6>	SQUARE WITH ORTHOGONAL CROSSHATCH FILL
 <RZ>		/xe2/x96/xa7	<U25a7>	SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL
 <RK>		/xe2/x96/xa8	<U25a8>	SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL
@@ -1608,7 +1608,7 @@ CHARMAP
 <,_>		/xe3/x80/x81	<U3001>	IDEOGRAPHIC COMMA
 <._>		/xe3/x80/x82	<U3002>	IDEOGRAPHIC FULL STOP
 <+">		/xe3/x80/x83	<U3003>	DITTO MARK
-<JIS>		/xe3/x80/x84	<U3004>	JAPANESE INDUSTRIAL STANDARD SIGN
+<JIS>		/xe3/x80/x84	<U3004>	JAPANESE INDUSTRIAL STANDARD SYMBOL
 <*_>		/xe3/x80/x85	<U3005>	IDEOGRAPHIC ITERATION MARK
 <;_>		/xe3/x80/x86	<U3006>	IDEOGRAPHIC CLOSING MARK
 <0_>		/xe3/x80/x87	<U3007>	IDEOGRAPHIC NUMBER ZERO
@@ -1829,7 +1829,7 @@ CHARMAP
 <fl>		/xef/xac/x82	<Ufb02>	LATIN SMALL LIGATURE FL
 <ffi>		/xef/xac/x83	<Ufb03>	LATIN SMALL LIGATURE FFI
 <ffl>		/xef/xac/x84	<Ufb04>	LATIN SMALL LIGATURE FFL
-<ft>		/xef/xac/x85	<Ufb05>	LATIN SMALL LIGATURE FT
+<ft>		/xef/xac/x85	<Ufb05>	LATIN SMALL LIGATURE LONG S T
 <st>		/xef/xac/x86	<Ufb06>	LATIN SMALL LIGATURE ST
 <3+;>		/xef/xb9/xbd	<Ufe7d>	ARABIC SHADDA MEDIAL FORM
 <aM.>		/xef/xba/x82	<Ufe82>	ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM
diff --git a/localedata/repertoiremaps/mnemonic.ds b/localedata/repertoiremaps/mnemonic.ds
index 3cc6fa36b7..e64bed9ab6 100644
--- a/localedata/repertoiremaps/mnemonic.ds
+++ b/localedata/repertoiremaps/mnemonic.ds
@@ -233,7 +233,7 @@ escape_char /
 <S3>                   <U008F> SINGLE-SHIFT THREE (SS3)
 <DC>                   <U0090> DEVICE CONTROL STRING (DCS)
 <P1>                   <U0091> PRIVATE USE ONE (PU1)
-<P2>                   <U0092> PRIVATE USE ONE (PU2)
+<P2>                   <U0092> PRIVATE USE TWO (PU2)
 <TS>                   <U0093> SET TRANSMIT STATE (STS)
 <CC>                   <U0094> CANCEL CHARACTER (CCH)
 <MW>                   <U0095> MESSAGE WAITING (MW)
diff --git a/sunrpc/pmap_clnt.c b/sunrpc/pmap_clnt.c
index 68bdfab01e..11e241dfcb 100644
--- a/sunrpc/pmap_clnt.c
+++ b/sunrpc/pmap_clnt.c
@@ -1,4 +1,3 @@
-/* @(#)pmap_clnt.c	2.2 88/08/01 4.0 RPCSRC */
 /*
  * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
  * unrestricted use provided that this legend is included on all tape
@@ -27,21 +26,81 @@
  * 2550 Garcia Avenue
  * Mountain View, California  94043
  */
-#if !defined(lint) && defined(SCCSIDS)
-static char sccsid[] = "@(#)pmap_clnt.c 1.37 87/08/11 Copyr 1984 Sun Micro";
-#endif
-
+/*
+ * Copyright (C) 1984, Sun Microsystems, Inc.
+ */
 /*
  * pmap_clnt.c
  * Client interface to pmap rpc service.
- *
- * Copyright (C) 1984, Sun Microsystems, Inc.
  */
 
+#include <stdio.h>
+#include <unistd.h>
+#include <net/if.h>
+#include <sys/ioctl.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
 #include <rpc/rpc.h>
 #include <rpc/pmap_prot.h>
 #include <rpc/pmap_clnt.h>
 
+/*
+ * Same as get_myaddress, but we try to use the loopback
+ * interface. portmap caches interfaces, and on DHCP clients,
+ * it could be that only loopback is started at this time.
+ */
+static void
+__get_myaddress (struct sockaddr_in *addr)
+{
+  int s;
+  char buf[BUFSIZ];
+  struct ifconf ifc;
+  struct ifreq ifreq, *ifr;
+  int len, loopback = 1;
+
+  if ((s = __socket (AF_INET, SOCK_DGRAM, 0)) < 0)
+    {
+      perror ("__get_myaddress: socket");
+      exit (1);
+    }
+  ifc.ifc_len = sizeof (buf);
+  ifc.ifc_buf = buf;
+  if (__ioctl (s, SIOCGIFCONF, (char *) &ifc) < 0)
+    {
+      perror (_("__get_myaddress: ioctl (get interface configuration)"));
+      exit (1);
+    }
+
+ again:
+  ifr = ifc.ifc_req;
+  for (len = ifc.ifc_len; len; len -= sizeof ifreq)
+    {
+      ifreq = *ifr;
+      if (__ioctl (s, SIOCGIFFLAGS, (char *) &ifreq) < 0)
+        {
+          perror ("__get_myaddress: ioctl");
+          exit (1);
+        }
+      if ((ifreq.ifr_flags & IFF_UP) && (ifr->ifr_addr.sa_family == AF_INET)
+          && ((ifreq.ifr_flags & IFF_LOOPBACK) || (loopback == 0)))
+        {
+          *addr = *((struct sockaddr_in *) &ifr->ifr_addr);
+          addr->sin_port = htons (PMAPPORT);
+          __close (s);
+          return;
+        }
+      ifr++;
+    }
+  if (loopback == 1)
+    {
+      loopback = 0;
+      goto again;
+    }
+  __close (s);
+}
+
+
 static const struct timeval timeout = {5, 0};
 static const struct timeval tottimeout = {60, 0};
 
@@ -58,7 +117,7 @@ pmap_set (u_long program, u_long version, int protocol, u_short port)
   struct pmap parms;
   bool_t rslt;
 
-  get_myaddress (&myaddress);
+  __get_myaddress (&myaddress);
   client = clntudp_bufcreate (&myaddress, PMAPPROG, PMAPVERS,
 			timeout, &socket, RPCSMALLMSGSIZE, RPCSMALLMSGSIZE);
   if (client == (CLIENT *) NULL)
@@ -92,7 +151,7 @@ pmap_unset (u_long program, u_long version)
   struct pmap parms;
   bool_t rslt;
 
-  get_myaddress (&myaddress);
+  __get_myaddress (&myaddress);
   client = clntudp_bufcreate (&myaddress, PMAPPROG, PMAPVERS,
 			timeout, &socket, RPCSMALLMSGSIZE, RPCSMALLMSGSIZE);
   if (client == (CLIENT *) NULL)