about summary refs log tree commit diff
path: root/inet
diff options
context:
space:
mode:
Diffstat (limited to 'inet')
-rw-r--r--inet/arpa/tftp.h26
-rw-r--r--inet/inet_ntoa.c146
-rw-r--r--inet/rcmd.c44
3 files changed, 127 insertions, 89 deletions
diff --git a/inet/arpa/tftp.h b/inet/arpa/tftp.h
index 036720011f..0904407c73 100644
--- a/inet/arpa/tftp.h
+++ b/inet/arpa/tftp.h
@@ -33,8 +33,8 @@
  *	@(#)tftp.h	8.1 (Berkeley) 6/2/93
  */
 
-#ifndef _TFTP_H_
-#define	_TFTP_H_
+#ifndef _ARPA_TFTP_H
+#define	_ARPA_TFTP_H 1
 
 /*
  * Trivial File Transfer Protocol (IEN-133)
@@ -44,20 +44,20 @@
 /*
  * Packet types.
  */
-#define	RRQ	01			/* read request */
-#define	WRQ	02			/* write request */
-#define	DATA	03			/* data packet */
-#define	ACK	04			/* acknowledgement */
-#define	ERROR	05			/* error code */
+#define	RRQ	01				/* read request */
+#define	WRQ	02				/* write request */
+#define	DATA	03				/* data packet */
+#define	ACK	04				/* acknowledgement */
+#define	ERROR	05				/* error code */
 
 struct	tftphdr {
-	short	th_opcode;		/* packet type */
+	short	th_opcode;			/* packet type */
 	union {
-		short	tu_block;	/* block # */
-		short	tu_code;	/* error code */
-		char	tu_stuff[1];	/* request packet stuff */
+		unsigned short	tu_block;	/* block # */
+		short	tu_code;		/* error code */
+		char	tu_stuff[1];		/* request packet stuff */
 	} th_u;
-	char	th_data[1];		/* data or error string */
+	char	th_data[1];			/* data or error string */
 };
 
 #define	th_block	th_u.tu_block
@@ -77,4 +77,4 @@ struct	tftphdr {
 #define	EEXISTS		6		/* file already exists */
 #define	ENOUSER		7		/* no such user */
 
-#endif /* !_TFTP_H_ */
+#endif /* arpa/tftp.h */
diff --git a/inet/inet_ntoa.c b/inet/inet_ntoa.c
index a37b1dbeef..a72d7ba7e3 100644
--- a/inet/inet_ntoa.c
+++ b/inet/inet_ntoa.c
@@ -1,59 +1,97 @@
-/*
- * Copyright (c) 1983, 1993
- *	The Regents of the University of California.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *	This product includes software developed by the University of
- *	California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static char sccsid[] = "@(#)inet_ntoa.c	8.1 (Berkeley) 6/4/93";
-#endif /* LIBC_SCCS and not lint */
-
-/*
- * Convert network-format internet address
- * to base 256 d.d.d.d representation.
- */
-#include <sys/types.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
+/* Convert Inet number to ASCII representation.
+   Copyright (C) 1997 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
 #include <stdio.h>
+#include <stdlib.h>
+#include <arpa/inet.h>
+#include <libc-lock.h>
+
+/* The interface of this function is completely stupid, it requires a
+   static buffer.  We relax this a bit in that we allow at least one
+   buffer for each thread.  */
+
+/* This is the key for the thread specific memory.  */
+static __libc_key_t key;
+
+/* If nonzero the key allocation failed and we should better use a
+   static buffer than fail.  */
+static char local_buf[18];
+static char *static_buf;
+
+/* Destructor for the thread-specific data.  */
+static void init (void);
+static void free_key_mem (void *mem);
+
 
 char *
-inet_ntoa(in)
-	struct in_addr in;
+inet_ntoa (struct in_addr in)
+{
+  __libc_once_define (once);
+  char *buffer;
+  unsigned char *bytes;
+
+  /* If we have not yet initialized the buffer do it now.  */
+  __libc_once (once, init);
+
+  if (static_buf != NULL)
+    buffer = static_buf;
+  else
+    {
+      /* We don't use the static buffer and so we have a key.  Use it
+	 to get the thread-specific buffer.  */
+      buffer = __libc_getspecific (key);
+      if (buffer == NULL)
+	{
+	  /* No buffer allocated so far.  */
+	  buffer = malloc (18);
+	  if (buffer == NULL)
+	    /* No more memory available.  We use the static buffer.  */
+	    buffer = local_buf;
+	  else
+	    __libc_setspecific (key, buffer);
+	}
+    }
+
+  bytes = (unsigned char *) &in;
+  snprintf (buffer, 18, "%d.%d.%d.%d", bytes[0], bytes[1], bytes[2], bytes[3]);
+
+  return buffer;
+}
+
+
+/* Initialize buffer.  */
+static void
+init (void)
+{
+  if (__libc_key_create (&key, free_key_mem))
+    /* Creating the key failed.  This means something really went
+       wrong.  In any case use a static buffer which is better than
+       nothing.  */
+    static_buf = local_buf;
+}
+
+
+/* free the thread specific data, this is done if a thread terminates.  */
+static void
+free_key_mem (void *mem)
 {
-	static char b[18];
-	register char *p;
-
-	p = (char *)&in;
-#define	UC(b)	(((int)b)&0xff)
-	(void)snprintf(b, sizeof(b),
-	    "%d.%d.%d.%d", UC(p[0]), UC(p[1]), UC(p[2]), UC(p[3]));
-	return (b);
+  free (mem);
+  __libc_setspecific (key, NULL);
 }
diff --git a/inet/rcmd.c b/inet/rcmd.c
index d390a8d809..6a680c18b7 100644
--- a/inet/rcmd.c
+++ b/inet/rcmd.c
@@ -105,7 +105,7 @@ rcmd(ahost, rport, locuser, remuser, cmd, fd2p)
 			else
 				(void)fprintf(stderr, "rcmd: socket: %m\n");
 			sigsetmask(oldmask);
-			return (-1);
+			return -1;
 		}
 		fcntl(s, F_SETOWN, pid);
 		sin.sin_family = hp->h_addrtype;
@@ -140,7 +140,7 @@ rcmd(ahost, rport, locuser, remuser, cmd, fd2p)
 		}
 		(void)fprintf(stderr, "%s: %m\n", hp->h_name);
 		sigsetmask(oldmask);
-		return (-1);
+		return -1;
 	}
 	lport--;
 	if (fd2p == 0) {
@@ -149,7 +149,7 @@ rcmd(ahost, rport, locuser, remuser, cmd, fd2p)
 	} else {
 		char num[8];
 		int s2 = rresvport(&lport), s3;
-		int len = sizeof(from);
+		size_t len = sizeof(from);
 
 		if (s2 < 0)
 			goto bad;
@@ -211,14 +211,14 @@ rcmd(ahost, rport, locuser, remuser, cmd, fd2p)
 		goto bad2;
 	}
 	sigsetmask(oldmask);
-	return (s);
+	return s;
 bad2:
 	if (lport)
 		(void)close(*fd2p);
 bad:
 	(void)close(s);
 	sigsetmask(oldmask);
-	return (-1);
+	return -1;
 }
 
 int
@@ -232,20 +232,20 @@ rresvport(alport)
 	sin.sin_addr.s_addr = INADDR_ANY;
 	s = socket(AF_INET, SOCK_STREAM, 0);
 	if (s < 0)
-		return (-1);
+		return -1;
 	for (;;) {
 		sin.sin_port = htons((u_short)*alport);
 		if (bind(s, (struct sockaddr *)&sin, sizeof(sin)) >= 0)
-			return (s);
+			return s;
 		if (errno != EADDRINUSE) {
 			(void)close(s);
-			return (-1);
+			return -1;
 		}
 		(*alport)--;
 		if (*alport == IPPORT_RESERVED/2) {
 			(void)close(s);
 			__set_errno (EAGAIN);		/* close */
-			return (-1);
+			return -1;
 		}
 	}
 }
@@ -282,9 +282,9 @@ ruserok(rhost, superuser, ruser, luser)
 	for (ap = hp->h_addr_list; *ap; ++ap) {
 		bcopy(*ap, &addr, sizeof(addr));
 		if (iruserok(addr, superuser, ruser, luser) == 0)
-			return (0);
+			return 0;
 	}
-	return (-1);
+	return -1;
 }
 
 /*
@@ -314,7 +314,7 @@ again:
 	if (hostf) {
 		if (__ivaliduser(hostf, raddr, luser, ruser) == 0) {
 			(void)fclose(hostf);
-			return (0);
+			return 0;
 		}
 		(void)fclose(hostf);
 	}
@@ -349,7 +349,7 @@ again:
 		  }
 
 		if (hostf == NULL)
-			return (-1);
+			return -1;
 		/*
 		 * If not a regular file, or is owned by someone other than
 		 * user or root or if writeable by anyone but the owner, quit.
@@ -369,11 +369,11 @@ again:
 		if (cp) {
 			__rcmd_errstr = cp;
 			(void)fclose(hostf);
-			return (-1);
+			return -1;
 		}
 		goto again;
 	}
-	return (-1);
+	return -1;
 }
 
 /*
@@ -415,11 +415,11 @@ __ivaliduser(hostf, raddr, luser, ruser)
 		if (__icheckhost(raddr, buf) &&
 		    strcmp(ruser, *user ? user : luser) == 0) {
 			free (buf);
-			return (0);
+			return 0;
 		}
 	}
 	free (buf);
-	return (-1);
+	return -1;
 }
 
 /*
@@ -430,7 +430,7 @@ __icheckhost(raddr, lhost)
 	u_int32_t raddr;
 	register char *lhost;
 {
-	register struct hostent hostbuf, *hp;
+	struct hostent hostbuf, *hp;
 	size_t buflen;
 	char *buffer;
 	register u_int32_t laddr;
@@ -439,7 +439,7 @@ __icheckhost(raddr, lhost)
 
 	/* Try for raw ip address first. */
 	if (isdigit(*lhost) && (int32_t)(laddr = inet_addr(lhost)) != -1)
-		return (raddr == laddr);
+		return raddr == laddr;
 
 	/* Better be a hostname. */
 	buflen = 1024;
@@ -452,14 +452,14 @@ __icheckhost(raddr, lhost)
 	    {
 	      /* Enlarge the buffer.  */
 	      buflen *= 2;
-	      buflen = __alloca (buflen);
+	      buffer = __alloca (buflen);
 	    }
 
 	/* Spin through ip addresses. */
 	for (pp = hp->h_addr_list; *pp; ++pp)
 		if (!bcmp(&raddr, *pp, sizeof(u_int32_t)))
-			return (1);
+			return 1;
 
 	/* No match. */
-	return (0);
+	return 0;
 }