PERFORCE change 122893 for review

Peter Wemm peter at FreeBSD.org
Thu Jul 5 00:28:17 UTC 2007


http://perforce.freebsd.org/chv.cgi?CH=122893

Change 122893 by peter at peter_daintree on 2007/07/05 00:28:03

	IFC @122891 (conflicting with myself)

Affected files ...

.. //depot/projects/hammer/ObsoleteFiles.inc#30 integrate
.. //depot/projects/hammer/UPDATING#104 integrate
.. //depot/projects/hammer/bin/df/df.c#24 integrate
.. //depot/projects/hammer/bin/sh/var.c#13 integrate
.. //depot/projects/hammer/include/stdlib.h#16 integrate
.. //depot/projects/hammer/lib/libc/amd64/SYS.h#9 integrate
.. //depot/projects/hammer/lib/libc/amd64/sys/Makefile.inc#9 integrate
.. //depot/projects/hammer/lib/libc/arm/SYS.h#5 integrate
.. //depot/projects/hammer/lib/libc/arm/sys/Makefile.inc#4 integrate
.. //depot/projects/hammer/lib/libc/gen/Makefile.inc#29 integrate
.. //depot/projects/hammer/lib/libc/i386/SYS.h#6 integrate
.. //depot/projects/hammer/lib/libc/i386/sys/Makefile.inc#9 integrate
.. //depot/projects/hammer/lib/libc/ia64/SYS.h#3 integrate
.. //depot/projects/hammer/lib/libc/ia64/sys/Makefile.inc#4 integrate
.. //depot/projects/hammer/lib/libc/include/libc_private.h#15 integrate
.. //depot/projects/hammer/lib/libc/net/sourcefilter.c#2 integrate
.. //depot/projects/hammer/lib/libc/powerpc/sys/Makefile.inc#4 integrate
.. //depot/projects/hammer/lib/libc/sparc64/SYS.h#4 integrate
.. //depot/projects/hammer/lib/libc/sparc64/sys/Makefile.inc#8 integrate
.. //depot/projects/hammer/lib/libc/stdlib/Makefile.inc#17 integrate
.. //depot/projects/hammer/lib/libc/stdlib/getenv.3#10 integrate
.. //depot/projects/hammer/lib/libc/stdlib/getenv.c#4 integrate
.. //depot/projects/hammer/lib/libc/stdlib/putenv.c#4 delete
.. //depot/projects/hammer/lib/libc/stdlib/setenv.c#4 delete
.. //depot/projects/hammer/lib/libc/sys/Makefile.inc#28 integrate
.. //depot/projects/hammer/lib/libc/sys/ftruncate.c#9 integrate
.. //depot/projects/hammer/lib/libc/sys/lseek.c#9 integrate
.. //depot/projects/hammer/lib/libc/sys/mmap.c#10 integrate
.. //depot/projects/hammer/lib/libc/sys/pread.c#9 integrate
.. //depot/projects/hammer/lib/libc/sys/pwrite.c#9 integrate
.. //depot/projects/hammer/lib/libc/sys/truncate.c#9 integrate
.. //depot/projects/hammer/libexec/pppoed/pppoed.c#5 integrate
.. //depot/projects/hammer/sys/amd64/conf/NOTES#101 integrate
.. //depot/projects/hammer/sys/amd64/linux32/linux32_machdep.c#19 integrate
.. //depot/projects/hammer/sys/compat/freebsd32/freebsd32_misc.c#50 integrate
.. //depot/projects/hammer/sys/compat/freebsd32/freebsd32_proto.h#47 integrate
.. //depot/projects/hammer/sys/compat/freebsd32/freebsd32_syscall.h#44 integrate
.. //depot/projects/hammer/sys/compat/freebsd32/freebsd32_syscalls.c#44 integrate
.. //depot/projects/hammer/sys/compat/freebsd32/freebsd32_sysent.c#44 integrate
.. //depot/projects/hammer/sys/compat/freebsd32/syscalls.master#49 integrate
.. //depot/projects/hammer/sys/compat/linux/linux_file.c#23 integrate
.. //depot/projects/hammer/sys/conf/files#154 integrate
.. //depot/projects/hammer/sys/conf/options#109 integrate
.. //depot/projects/hammer/sys/conf/options.amd64#44 integrate
.. //depot/projects/hammer/sys/conf/options.i386#49 integrate
.. //depot/projects/hammer/sys/conf/options.pc98#45 integrate
.. //depot/projects/hammer/sys/dev/sound/pcm/dsp.c#33 integrate
.. //depot/projects/hammer/sys/i386/conf/NOTES#91 integrate
.. //depot/projects/hammer/sys/i386/linux/linux_machdep.c#26 integrate
.. //depot/projects/hammer/sys/i4b/driver/i4b_ing.c#11 integrate
.. //depot/projects/hammer/sys/i4b/driver/i4b_ipr.c#19 integrate
.. //depot/projects/hammer/sys/i4b/driver/i4b_isppp.c#15 integrate
.. //depot/projects/hammer/sys/kern/init_sysent.c#61 integrate
.. //depot/projects/hammer/sys/kern/kern_conf.c#45 integrate
.. //depot/projects/hammer/sys/kern/makesyscalls.sh#11 integrate
.. //depot/projects/hammer/sys/kern/subr_unit.c#7 integrate
.. //depot/projects/hammer/sys/kern/sys_generic.c#34 integrate
.. //depot/projects/hammer/sys/kern/syscalls.c#59 integrate
.. //depot/projects/hammer/sys/kern/syscalls.master#60 integrate
.. //depot/projects/hammer/sys/kern/systrace_args.c#5 integrate
.. //depot/projects/hammer/sys/kern/vfs_syscalls.c#72 integrate
.. //depot/projects/hammer/sys/netinet6/esp_output.c#8 delete
.. //depot/projects/hammer/sys/pc98/conf/NOTES#60 integrate
.. //depot/projects/hammer/sys/sys/param.h#90 integrate
.. //depot/projects/hammer/sys/sys/syscall.h#58 integrate
.. //depot/projects/hammer/sys/sys/syscall.mk#58 integrate
.. //depot/projects/hammer/sys/sys/sysproto.h#59 integrate
.. //depot/projects/hammer/sys/sys/systm.h#48 integrate
.. //depot/projects/hammer/sys/vm/vm_mmap.c#45 integrate
.. //depot/projects/hammer/tools/regression/environ/Makefile#1 branch
.. //depot/projects/hammer/tools/regression/environ/Makefile.envctl#1 branch
.. //depot/projects/hammer/tools/regression/environ/Makefile.retention#1 branch
.. //depot/projects/hammer/tools/regression/environ/Makefile.timings#1 branch
.. //depot/projects/hammer/tools/regression/environ/envctl.c#1 branch
.. //depot/projects/hammer/tools/regression/environ/envtest.t#1 branch
.. //depot/projects/hammer/tools/regression/environ/retention.c#1 branch
.. //depot/projects/hammer/tools/regression/environ/timings.c#1 branch
.. //depot/projects/hammer/tools/regression/usr.bin/sed/regress.icase1.out#1 branch
.. //depot/projects/hammer/tools/regression/usr.bin/sed/regress.icase2.out#1 branch
.. //depot/projects/hammer/tools/regression/usr.bin/sed/regress.sh#8 integrate
.. //depot/projects/hammer/usr.bin/du/du.c#14 integrate
.. //depot/projects/hammer/usr.bin/env/env.c#6 integrate
.. //depot/projects/hammer/usr.bin/kdump/kdump.c#19 integrate
.. //depot/projects/hammer/usr.bin/limits/limits.c#5 integrate
.. //depot/projects/hammer/usr.bin/login/login.c#12 integrate
.. //depot/projects/hammer/usr.bin/sed/compile.c#7 integrate
.. //depot/projects/hammer/usr.bin/sed/defs.h#4 integrate
.. //depot/projects/hammer/usr.bin/sed/sed.1#15 integrate
.. //depot/projects/hammer/usr.bin/su/su.c#19 integrate
.. //depot/projects/hammer/usr.sbin/i4b/man/Makefile#2 integrate
.. //depot/projects/hammer/usr.sbin/pstat/pstat.c#18 integrate
.. //depot/projects/hammer/usr.sbin/sade/main.c#4 integrate
.. //depot/projects/hammer/usr.sbin/sade/variable.c#4 integrate
.. //depot/projects/hammer/usr.sbin/sysinstall/main.c#9 integrate
.. //depot/projects/hammer/usr.sbin/sysinstall/variable.c#6 integrate

Differences ...

==== //depot/projects/hammer/ObsoleteFiles.inc#30 (text+ko) ====

@@ -1,5 +1,5 @@
 #
-# $FreeBSD: src/ObsoleteFiles.inc,v 1.102 2007/07/03 13:06:45 mlaier Exp $
+# $FreeBSD: src/ObsoleteFiles.inc,v 1.103 2007/07/04 16:21:27 bz Exp $
 #
 # This file lists old files (OLD_FILES), libraries (OLD_LIBS) and
 # directories (OLD_DIRS) which should get removed at an update. Recently
@@ -14,6 +14,12 @@
 # The file is partitioned: OLD_FILES first, then OLD_LIBS and OLD_DIRS last.
 #
 
+# 20070704: I4B 'modules' temporary disconnected
+.if ${TARGET_ARCH} == "i386"
+OLD_FILES+=usr/share/man/man4/i4bing.4.gz
+OLD_FILES+=usr/share/man/man4/i4bipr.4.gz
+OLD_FILES+=usr/share/man/man4/i4bisppp.4.gz
+.endif
 # 20070703: pf 4.1 import
 OLD_FILES+=usr/libexec/ftp-proxy
 # 20070701: KAME IPSec removal

==== //depot/projects/hammer/UPDATING#104 (text+ko) ====

@@ -21,6 +21,11 @@
 	developers choose to disable these features on build machines
 	to maximize performance.
 
+20070704:
+        The new IPsec code is now compiled in using the IPSEC option.  The
+	IPSEC option now requires "device crypto" be defined in your kernel
+	configuration.  The FAST_IPSEC kernel option is now deprecated.
+
 20070702:
 	The packet filter (pf) code has been updated to OpenBSD 4.1 Please
 	note the changed syntax - keep state is now on by default.  Also
@@ -877,4 +882,4 @@
 Contact Warner Losh if you have any questions about your use of
 this document.
 
-$FreeBSD: src/UPDATING,v 1.500 2007/07/03 13:06:44 mlaier Exp $
+$FreeBSD: src/UPDATING,v 1.501 2007/07/04 21:47:23 gnn Exp $

==== //depot/projects/hammer/bin/df/df.c#24 (text+ko) ====

@@ -44,7 +44,7 @@
 #endif /* not lint */
 #endif
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/bin/df/df.c,v 1.70 2007/05/01 16:02:44 ache Exp $");
+__FBSDID("$FreeBSD: src/bin/df/df.c,v 1.71 2007/07/04 00:00:37 scf Exp $");
 
 #include <sys/param.h>
 #include <sys/stat.h>
@@ -131,14 +131,14 @@
 			 */
 			if (kflag)
 				break;
-			putenv("BLOCKSIZE=512");
+			setenv("BLOCKSIZE", "512", 1);
 			hflag = 0;
 			break;
 		case 'c':
 			cflag = 1;
 			break;
 		case 'g':
-			putenv("BLOCKSIZE=1g");
+			setenv("BLOCKSIZE", "1g", 1);
 			hflag = 0;
 			break;
 		case 'H':
@@ -152,7 +152,7 @@
 			break;
 		case 'k':
 			kflag++;
-			putenv("BLOCKSIZE=1024");
+			setenv("BLOCKSIZE", "1024", 1);
 			hflag = 0;
 			break;
 		case 'l':
@@ -162,7 +162,7 @@
 			lflag = 1;
 			break;
 		case 'm':
-			putenv("BLOCKSIZE=1m");
+			setenv("BLOCKSIZE", "1m", 1);
 			hflag = 0;
 			break;
 		case 'n':

==== //depot/projects/hammer/bin/sh/var.c#13 (text+ko) ====

@@ -36,7 +36,7 @@
 #endif
 #endif /* not lint */
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/bin/sh/var.c,v 1.35 2007/05/01 16:02:43 ache Exp $");
+__FBSDID("$FreeBSD: src/bin/sh/var.c,v 1.36 2007/07/04 00:00:38 scf Exp $");
 
 #include <unistd.h>
 #include <stdlib.h>
@@ -289,6 +289,7 @@
 setvareq(char *s, int flags)
 {
 	struct var *vp, **vpp;
+	char *p;
 	int len;
 
 	if (aflag)
@@ -319,7 +320,10 @@
 			if (vp == &vmpath || (vp == &vmail && ! mpathset()))
 				chkmail(1);
 			if ((vp->flags & VEXPORT) && localevar(s)) {
-				putenv(s);
+				p = strchr(s, '=');
+				*p = '\0';
+				(void) setenv(s, p + 1, 1);
+				*p = '=';
 				(void) setlocale(LC_ALL, "");
 			}
 			INTON;
@@ -335,7 +339,10 @@
 	INTOFF;
 	*vpp = vp;
 	if ((vp->flags & VEXPORT) && localevar(s)) {
-		putenv(s);
+		p = strchr(s, '=');
+		*p = '\0';
+		(void) setenv(s, p + 1, 1);
+		*p = '=';
 		(void) setlocale(LC_ALL, "");
 	}
 	INTON;
@@ -596,7 +603,10 @@
 
 						vp->flags |= flag;
 						if ((vp->flags & VEXPORT) && localevar(vp->text)) {
-							putenv(vp->text);
+							p = strchr(vp->text, '=');
+							*p = '\0';
+							(void) setenv(vp->text, p + 1, 1);
+							*p = '=';
 							(void) setlocale(LC_ALL, "");
 						}
 						goto found;

==== //depot/projects/hammer/include/stdlib.h#16 (text+ko) ====

@@ -31,7 +31,7 @@
  * SUCH DAMAGE.
  *
  *	@(#)stdlib.h	8.5 (Berkeley) 5/19/95
- * $FreeBSD: src/include/stdlib.h,v 1.64 2007/05/01 16:02:44 ache Exp $
+ * $FreeBSD: src/include/stdlib.h,v 1.65 2007/07/04 00:00:38 scf Exp $
  */
 
 #ifndef _STDLIB_H_
@@ -161,7 +161,7 @@
 int	 posix_memalign(void **, size_t, size_t); /* (ADV) */
 int	 rand_r(unsigned *);			/* (TSF) */
 int	 setenv(const char *, const char *, int);
-void	 unsetenv(const char *);
+int	 unsetenv(const char *);
 #endif
 
 /*
@@ -197,7 +197,7 @@
 long	 nrand48(unsigned short[3]);
 int	 posix_openpt(int);
 char	*ptsname(int);
-int	 putenv(const char *);
+int	 putenv(char *);
 long	 random(void);
 char	*realpath(const char *, char resolved_path[]);
 unsigned short

==== //depot/projects/hammer/lib/libc/amd64/SYS.h#9 (text+ko) ====

@@ -30,7 +30,7 @@
  * SUCH DAMAGE.
  *
  *	@(#)SYS.h	5.5 (Berkeley) 5/7/91
- * $FreeBSD: src/lib/libc/amd64/SYS.h,v 1.28 2007/01/09 00:27:48 imp Exp $
+ * $FreeBSD: src/lib/libc/amd64/SYS.h,v 1.29 2007/07/04 23:18:38 peter Exp $
  */
 
 #include <sys/syscall.h>

==== //depot/projects/hammer/lib/libc/amd64/sys/Makefile.inc#9 (text+ko) ====

@@ -1,5 +1,5 @@
 #	from: Makefile.inc,v 1.1 1993/09/03 19:04:23 jtc Exp
-# $FreeBSD: src/lib/libc/amd64/sys/Makefile.inc,v 1.29 2003/10/23 06:07:09 peter Exp $
+# $FreeBSD: src/lib/libc/amd64/sys/Makefile.inc,v 1.30 2007/07/04 23:23:00 peter Exp $
 
 SRCS+=	amd64_get_fsbase.c amd64_get_gsbase.c amd64_set_fsbase.c amd64_set_gsbase.c
 

==== //depot/projects/hammer/lib/libc/arm/SYS.h#5 (text+ko) ====

@@ -32,7 +32,7 @@
  * SUCH DAMAGE.
  *
  *	from: @(#)SYS.h	5.5 (Berkeley) 5/7/91
- * $FreeBSD: src/lib/libc/arm/SYS.h,v 1.3 2006/05/23 02:52:14 imp Exp $
+ * $FreeBSD: src/lib/libc/arm/SYS.h,v 1.5 2007/07/04 23:35:18 peter Exp $
  */
 
 #include <machine/asm.h>
@@ -63,8 +63,8 @@
 	ENTRY(__CONCAT(__sys_, x));					\
 	.weak _C_LABEL(__CONCAT(_,x));					\
 	.set _C_LABEL(__CONCAT(_,x)),_C_LABEL(__CONCAT(__sys_,x));	\
-	SYSTRAP(x)
-	bcs PIC_SYM(CERROR, PLT)
+	SYSTRAP(x)							\
+	bcs PIC_SYM(CERROR, PLT)					\
 	RET
 
 #define RSYSCALL(x)							\

==== //depot/projects/hammer/lib/libc/arm/sys/Makefile.inc#4 (text+ko) ====

@@ -1,4 +1,4 @@
-# $FreeBSD: src/lib/libc/arm/sys/Makefile.inc,v 1.2 2004/11/05 23:52:05 cognet Exp $
+# $FreeBSD: src/lib/libc/arm/sys/Makefile.inc,v 1.3 2007/07/04 23:23:00 peter Exp $
 
 MDASM= Ovfork.S brk.S cerror.S pipe.S ptrace.S sbrk.S shmat.S sigreturn.S syscall.S
 

==== //depot/projects/hammer/lib/libc/gen/Makefile.inc#29 (text+ko) ====

@@ -1,5 +1,5 @@
 #	@(#)Makefile.inc	8.6 (Berkeley) 5/4/95
-# $FreeBSD: src/lib/libc/gen/Makefile.inc,v 1.126 2007/01/25 22:25:59 peter Exp $
+# $FreeBSD: src/lib/libc/gen/Makefile.inc,v 1.127 2007/07/04 23:27:38 peter Exp $
 
 # machine-independent gen sources
 .PATH: ${.CURDIR}/${MACHINE_ARCH}/gen ${.CURDIR}/gen

==== //depot/projects/hammer/lib/libc/i386/SYS.h#6 (text+ko) ====

@@ -30,7 +30,7 @@
  * SUCH DAMAGE.
  *
  *	@(#)SYS.h	5.5 (Berkeley) 5/7/91
- * $FreeBSD: src/lib/libc/i386/SYS.h,v 1.25 2007/01/09 00:27:58 imp Exp $
+ * $FreeBSD: src/lib/libc/i386/SYS.h,v 1.26 2007/07/04 23:18:38 peter Exp $
  */
 
 #include <sys/syscall.h>
@@ -43,7 +43,8 @@
 			.weak CNAME(__CONCAT(_,x));			\
 			.set CNAME(__CONCAT(_,x)),CNAME(__CONCAT(__sys_,x)); \
 			mov __CONCAT($SYS_,x),%eax; KERNCALL; jb 2b
-#define RSYSCALL(x)	SYSCALL(x); ret
+
+#define	RSYSCALL(x)	SYSCALL(x); ret
 
 #define	PSEUDO(x)	2: PIC_PROLOGUE; jmp PIC_PLT(HIDENAME(cerror)); \
 			ENTRY(__CONCAT(__sys_,x));			\

==== //depot/projects/hammer/lib/libc/i386/sys/Makefile.inc#9 (text+ko) ====

@@ -1,5 +1,5 @@
 #	from: Makefile.inc,v 1.1 1993/09/03 19:04:23 jtc Exp
-# $FreeBSD: src/lib/libc/i386/sys/Makefile.inc,v 1.31 2005/04/26 20:51:15 peter Exp $
+# $FreeBSD: src/lib/libc/i386/sys/Makefile.inc,v 1.32 2007/07/04 23:23:00 peter Exp $
 
 .if !defined(COMPAT_32BIT)
 SRCS+=	i386_clr_watch.c i386_get_ioperm.c \

==== //depot/projects/hammer/lib/libc/ia64/SYS.h#3 (text+ko) ====

@@ -26,7 +26,7 @@
  * any improvements or extensions that they make and grant Carnegie the
  * rights to redistribute these changes.
  *
- * $FreeBSD: src/lib/libc/ia64/SYS.h,v 1.4 2002/03/22 23:41:46 obrien Exp $
+ * $FreeBSD: src/lib/libc/ia64/SYS.h,v 1.5 2007/07/04 23:18:38 peter Exp $
  */
 
 #include <machine/asm.h>

==== //depot/projects/hammer/lib/libc/ia64/sys/Makefile.inc#4 (text+ko) ====

@@ -1,4 +1,4 @@
-# $FreeBSD: src/lib/libc/ia64/sys/Makefile.inc,v 1.8 2003/08/11 07:14:06 bms Exp $
+# $FreeBSD: src/lib/libc/ia64/sys/Makefile.inc,v 1.9 2007/07/04 23:23:00 peter Exp $
 
 MDASM+=	Ovfork.S brk.S cerror.S exect.S fork.S getcontext.S pipe.S ptrace.S \
 	sbrk.S setlogin.S sigreturn.S swapcontext.S

==== //depot/projects/hammer/lib/libc/include/libc_private.h#15 (text+ko) ====

@@ -26,7 +26,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/lib/libc/include/libc_private.h,v 1.16 2007/01/12 07:31:30 imp Exp $
+ * $FreeBSD: src/lib/libc/include/libc_private.h,v 1.17 2007/07/04 23:27:38 peter Exp $
  *
  * Private definitions for libc, libc_r and libpthread.
  *

==== //depot/projects/hammer/lib/libc/net/sourcefilter.c#2 (text+ko) ====

@@ -28,7 +28,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/lib/libc/net/sourcefilter.c,v 1.2 2007/06/12 19:08:38 bms Exp $");
+__FBSDID("$FreeBSD: src/lib/libc/net/sourcefilter.c,v 1.3 2007/07/04 00:55:50 peter Exp $");
 
 #include "namespace.h"
 
@@ -326,7 +326,7 @@
 	memcpy(&msfr.msfr_group, &psu->ss, psu->ss.ss_len);
 	msfr.msfr_srcs = slist;		/* pointer */
 
-	return (setsockopt(s, level, optname, &msfr, sizeof(msfr)));
+	return (_setsockopt(s, level, optname, &msfr, sizeof(msfr)));
 }
 
 /*
@@ -394,7 +394,7 @@
 	 * of filter entries for the group in msfr.msfr_nsrcs.
 	 */
 	msfr.msfr_srcs = slist;
-	err = getsockopt(s, level, optname, &msfr, &optlen);
+	err = _getsockopt(s, level, optname, &msfr, &optlen);
 	if (err == 0) {
 		*numsrc = msfr.msfr_nsrcs;
 		*fmode = msfr.msfr_fmode;

==== //depot/projects/hammer/lib/libc/powerpc/sys/Makefile.inc#4 (text+ko) ====

@@ -1,4 +1,4 @@
-# $FreeBSD: src/lib/libc/powerpc/sys/Makefile.inc,v 1.2 2003/08/11 07:14:07 bms Exp $
+# $FreeBSD: src/lib/libc/powerpc/sys/Makefile.inc,v 1.3 2007/07/04 23:23:00 peter Exp $
 
 MDASM+=	brk.S cerror.S exect.S pipe.S ptrace.S sbrk.S setlogin.S
 

==== //depot/projects/hammer/lib/libc/sparc64/SYS.h#4 (text+ko) ====

@@ -31,7 +31,7 @@
  *
  *	@(#)SYS.h	5.5 (Berkeley) 5/7/91
  *	from: FreeBSD: src/lib/libc/i386/SYS.h,v 1.20 2001/01/29
- * $FreeBSD: src/lib/libc/sparc64/SYS.h,v 1.5 2007/01/09 00:28:04 imp Exp $
+ * $FreeBSD: src/lib/libc/sparc64/SYS.h,v 1.6 2007/07/04 23:18:38 peter Exp $
  */
 
 #include <sys/syscall.h>

==== //depot/projects/hammer/lib/libc/sparc64/sys/Makefile.inc#8 (text+ko) ====

@@ -1,4 +1,4 @@
-# $FreeBSD: src/lib/libc/sparc64/sys/Makefile.inc,v 1.10 2006/11/03 23:43:18 kmacy Exp $
+# $FreeBSD: src/lib/libc/sparc64/sys/Makefile.inc,v 1.11 2007/07/04 23:23:01 peter Exp $
 
 SRCS+=	__sparc_sigtramp_setup.c \
 	__sparc_utrap.c \

==== //depot/projects/hammer/lib/libc/stdlib/Makefile.inc#17 (text+ko) ====

@@ -1,5 +1,5 @@
 #	from @(#)Makefile.inc	8.3 (Berkeley) 2/4/95
-# $FreeBSD: src/lib/libc/stdlib/Makefile.inc,v 1.53 2006/03/28 22:16:04 jasone Exp $
+# $FreeBSD: src/lib/libc/stdlib/Makefile.inc,v 1.54 2007/07/04 00:00:39 scf Exp $
 
 # machine-independent stdlib sources
 .PATH: ${.CURDIR}/${MACHINE_ARCH}/stdlib ${.CURDIR}/stdlib
@@ -8,10 +8,10 @@
 	bsearch.c div.c exit.c getenv.c getopt.c getopt_long.c \
 	getsubopt.c grantpt.c hcreate.c heapsort.c imaxabs.c imaxdiv.c \
 	insque.c l64a.c labs.c ldiv.c llabs.c lldiv.c lsearch.c malloc.c \
-	merge.c putenv.c qsort.c qsort_r.c radixsort.c rand.c random.c \
-	reallocf.c realpath.c remque.c setenv.c strfmon.c strtoimax.c \
-	strtol.c strtoll.c strtoq.c strtoul.c strtonum.c strtoull.c strtoumax.c \
-	strtouq.c system.c tdelete.c tfind.c tsearch.c twalk.c
+	merge.c qsort.c qsort_r.c radixsort.c rand.c random.c \
+	reallocf.c realpath.c remque.c strfmon.c strtoimax.c \
+	strtol.c strtoll.c strtoq.c strtoul.c strtonum.c strtoull.c \
+        strtoumax.c strtouq.c system.c tdelete.c tfind.c tsearch.c twalk.c
 
 SYM_MAPS+= ${.CURDIR}/stdlib/Symbol.map
 

==== //depot/projects/hammer/lib/libc/stdlib/getenv.3#10 (text+ko) ====

@@ -30,9 +30,9 @@
 .\" SUCH DAMAGE.
 .\"
 .\"     @(#)getenv.3	8.2 (Berkeley) 12/11/93
-.\" $FreeBSD: src/lib/libc/stdlib/getenv.3,v 1.26 2007/05/01 16:02:41 ache Exp $
+.\" $FreeBSD: src/lib/libc/stdlib/getenv.3,v 1.27 2007/07/04 00:00:39 scf Exp $
 .\"
-.Dd October 12, 2006
+.Dd June 20, 2007
 .Dt GETENV 3
 .Os
 .Sh NAME
@@ -50,22 +50,13 @@
 .Ft int
 .Fn setenv "const char *name" "const char *value" "int overwrite"
 .Ft int
-.Fn putenv "const char *string"
-.Ft void
+.Fn putenv "char *string"
+.Ft int
 .Fn unsetenv "const char *name"
 .Sh DESCRIPTION
 These functions set, unset and fetch environment variables from the
 host
 .Em environment list .
-For compatibility with differing environment conventions,
-the given arguments
-.Fa name
-and
-.Fa value
-may be appended and prepended,
-respectively,
-with an equal sign
-.Dq Li \&= .
 .Pp
 The
 .Fn getenv
@@ -97,11 +88,18 @@
 .Pp
 The
 .Fn putenv
-function takes an argument of the form ``name=value'' and is
-equivalent to:
-.Bd -literal -offset indent
-setenv(name, value, 1);
-.Ed
+function takes an argument of the form ``name=value'' and
+puts it directly into the current environment,
+so altering the argument shall change the environment.
+If the variable
+.Fa name
+does not exist in the list,
+it is inserted with the given
+.Fa value .
+If the variable
+.Fa name
+does exist, it is reset to the given
+.Fa value .
 .Pp
 The
 .Fn unsetenv
@@ -121,15 +119,55 @@
 .Dv NULL
 is returned.
 .Pp
-.Rv -std setenv putenv
+.Rv -std setenv putenv unsetenv
 .Sh ERRORS
 .Bl -tag -width Er
+.It Bq Er EINVAL
+The function
+.Fn getenv ,
+.Fn setenv
+or
+.Fn unsetenv
+failed because the
+.Fa name
+is a
+.Dv NULL
+pointer, points to an empty string, or points to a string containing an
+.Dq Li \&=
+character.
+.Pp
+The function
+.Fn putenv
+failed because
+.Fa string
+is a
+.Dv NULL
+pointer,
+.Fa string is without an
+.Dq Li \&=
+character or
+.Dq Li \&=
+is the first character in
+.Fa string .
+This does not follow the
+.Tn POSIX
+specification.
 .It Bq Er ENOMEM
 The function
-.Fn setenv
+.Fn setenv ,
+.Fn unsetenv
 or
 .Fn putenv
 failed because they were unable to allocate memory for the environment.
+.It Bq Er EFAULT
+The functions
+.Fn setenv ,
+.Fn unsetenv
+or
+.Fn putenv
+failed to make a valid copy of the environment due to the environment being
+corrupt (i.e., a name without a value).  A warning will be output to stderr with
+information about the issue.
 .El
 .Sh SEE ALSO
 .Xr csh 1 ,
@@ -141,6 +179,13 @@
 .Fn getenv
 function conforms to
 .St -isoC .
+The
+.Fn setenv ,
+.Fn putenv
+and
+.Fn unsetenv
+functions conforms to
+.St -p1003.1-2001 .
 .Sh HISTORY
 The functions
 .Fn setenv
@@ -152,19 +197,30 @@
 .Fn putenv
 function appeared in
 .Bx 4.3 Reno .
+.Pp
+Until
+.Fx 7.0 ,
+.Fn putenv
+would make a copy of 
+.Fa string
+and insert it into the environment using
+.Fn setenv .
+This was changed to use
+.Fa string
+as the memory location of the ``name=value'' pair to follow the
+.Tn POSIX
+specification.
 .Sh BUGS
 Successive calls to
 .Fn setenv
-or
-.Fn putenv
-assigning a differently sized
+that assign a larger-sized
 .Fa value
-to the same
+than any previous value to the same
 .Fa name
 will result in a memory leak.
 The
 .Fx
-semantics for these functions
+semantics for this function
 (namely, that the contents of
 .Fa value
 are copied and that old values remain accessible indefinitely) make this

==== //depot/projects/hammer/lib/libc/stdlib/getenv.c#4 (text+ko) ====

@@ -1,89 +1,568 @@
-/*
- * Copyright (c) 1987, 1993
- *	The Regents of the University of California.  All rights reserved.
+/*-
+ * Copyright (c) 2007 Sean C. Farley <scf at FreeBSD.org>
+ * 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.
+ *    notice, this list of conditions and the following disclaimer,
+ *    without modification, immediately at the beginning of the file.
  * 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.
- * 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.
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
  */
+#include <sys/types.h>
+#include <err.h>
+#include <errno.h>
+#include <stdbool.h>
+#include <stddef.h>
+#include <stdlib.h>
+#include <string.h>
+
 
-#if defined(LIBC_SCCS) && !defined(lint)
-static char sccsid[] = "@(#)getenv.c	8.1 (Berkeley) 6/4/93";
-#endif /* LIBC_SCCS and not lint */
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/lib/libc/stdlib/getenv.c,v 1.8 2007/05/01 16:02:41 ache Exp $");
+__FBSDID("$FreeBSD: src/lib/libc/stdlib/getenv.c,v 1.9 2007/07/04 00:00:39 scf Exp $");
+
 
-#include <stdlib.h>
-#include <stddef.h>
-#include <string.h>
+/*
+ * Standard environ.  environ variable is exposed to entire process.
+ *
+ *	origEnviron:	Upon cleanup on unloading of library or failure, this
+ *			allows environ to return to as it was before.
+ *	environSize:	Number of variables environ can hold.  Can only
+ *			increase.
+ */
+extern char **environ;
+static char **origEnviron;
+static int environSize = 0;
 
-inline char *__findenv(const char *, int *);
+/*
+ * Array of environment variables built from environ.  Each element records:
+ *	name:		Pointer to name=value string
+ *	name length:	Length of name not counting '=' character
+ *	value:		Pointer to value within same string as name
+ *	value size:	Size (not length) of space for value not counting the
+ *			nul character
+ *	active state:	true/false value to signify whether variable is active.
+ *			Useful since multiple variables with the same name can
+ *			co-exist.  At most, one variable can be active at any
+ *			one time.
+ *	putenv:		Created from putenv() call.  This memory must not be
+ *			reused.
+ */
+static struct envVars {
+	size_t nameLen;
+	size_t valueSize;
+	char *name;
+	char *value;
+	bool active;
+	bool putenv;
+} *envVars = NULL;
 
 /*
- * __findenv --
- *	Returns pointer to value associated with name, if any, else NULL.
- *	Sets offset to be the offset of the name/value combination in the
- *	environmental array, for use by setenv(3) and unsetenv(3).
- *	Explicitly removes '=' in argument name.
+ * Environment array information.
  *
- *	This routine *should* be a static; don't use it.
+ *	envActive:	Number of active variables in array.
+ *	envVarsSize:	Size of array.
+ *	envVarsTotal:	Number of total variables in array (active or not).
+ */
+static int envActive = 0;
+static int envVarsSize = 0;
+static int envVarsTotal = 0;
+
+
+/* Deinitialization of new environment. */
+static void __attribute__ ((destructor)) __clean_env(void);
+
+
+/*
+ * Inline strlen() for performance.  Also, perform check for an equals sign.
+ * Cheaper here than peforming a strchr() later.
+ */
+static inline size_t
+__strleneq(const char *str)
+{
+	const char *s;
+
+	for (s = str; *s != '\0'; ++s)
+		if (*s == '=')
+			return (0);
+
+	return (s - str);
+}
+
+
+/*
+ * Comparison of an environment name=value to a name.
+ */
+static inline bool
+strncmpeq(const char *nameValue, const char *name, size_t nameLen)
+{
+	if (strncmp(nameValue, name, nameLen) == 0 && nameValue[nameLen] == '=')
+		return (true);
+
+	return (false);
+}
+
+
+/*
+ * Using environment, returns pointer to value associated with name, if any,
+ * else NULL.  If the onlyActive flag is set to true, only variables that are
+ * active are returned else all are.
+ */
+static inline char *
+__findenv(const char *name, size_t nameLen, int *envNdx, bool onlyActive)
+{
+	int ndx;
+
+	/*
+	 * Find environment variable from end of array (more likely to be
+	 * active).  A variable created by putenv is always active or it is not
+	 * tracked in the array.
+	 */
+	for (ndx = *envNdx; ndx >= 0; ndx--)
+		if (envVars[ndx].putenv) {
+			if (strncmpeq(envVars[ndx].name, name, nameLen)) {
+				*envNdx = ndx;
+				return (envVars[ndx].name + nameLen +
+				    sizeof ("=") - 1);
+			}
+		} else if ((!onlyActive || envVars[ndx].active) &&
+		    (envVars[ndx].nameLen == nameLen &&
+		    strncmpeq(envVars[ndx].name, name, nameLen))) {
+			*envNdx = ndx;
+			return (envVars[ndx].value);
+		}
+
+	return (NULL);
+}
+
+
+/*
+ * Using environ, returns pointer to value associated with name, if any, else
+ * NULL.  Used on the original environ passed into the program.
  */
-inline char *
-__findenv(name, offset)
-	const char *name;
-	int *offset;
+static char *
+__findenv_environ(const char *name, size_t nameLen)
 {
-	extern char **environ;
-	int len, i;
-	const char *np;
-	char **p, *cp;
+	int envNdx;
 
-	if (name == NULL || environ == NULL)
+	/* Check for non-existant environment. */
+	if (environ == NULL)
 		return (NULL);
-	for (np = name; *np && *np != '='; ++np)
-		continue;
-	len = np - name;
-	for (p = environ; (cp = *p) != NULL; ++p) {
-		for (np = name, i = len; i && *cp; i--)
-			if (*cp++ != *np++)
-				break;
-		if (i == 0 && *cp++ == '=') {
-			*offset = p - environ;
-			return (cp);
+
+	/* Find variable within environ. */
+	for (envNdx = 0; environ[envNdx] != NULL; envNdx++)
+		if (strncmpeq(environ[envNdx], name, nameLen))
+			return (&(environ[envNdx][nameLen + sizeof("=") - 1]));
+
+	return (NULL);
+}
+
+
+/*
+ * Using the environment, rebuild the environ array for use by other C library
+ * calls that depend upon it.
+ */
+static int
+__rebuild_environ(int newEnvironSize)
+{
+	char **tmpEnviron;
+	int envNdx;
+	int environNdx;
+	int tmpEnvironSize;
+
+	/* Resize environ. */
+	if (newEnvironSize > environSize) {
+		tmpEnvironSize = newEnvironSize * 2;
+		tmpEnviron = realloc(environ, sizeof (*environ) *
+		    (tmpEnvironSize + 1));
+		if (tmpEnviron == NULL)
+			return (-1);
+		environSize = tmpEnvironSize;
+		environ = tmpEnviron;
+	}
+	envActive = newEnvironSize;
+
+	/* Assign active variables to environ. */
+	for (envNdx = envVarsTotal - 1, environNdx = 0; envNdx >= 0; envNdx--)
+		if (envVars[envNdx].active)
+			environ[environNdx++] = envVars[envNdx].name;
+	environ[environNdx] = NULL;
+
+	return (0);
+}
+
+
+/*
+ * Enlarge new environment.
+ */
+static inline bool
+__enlarge_env(void)
+{
+	int newEnvVarsSize;
+	struct envVars *tmpEnvVars;
+
+	envVarsTotal++;
+	if (envVarsTotal > envVarsSize) {
+		newEnvVarsSize = envVarsTotal * 2;
+		tmpEnvVars = realloc(envVars, sizeof (*envVars) *
+		    newEnvVarsSize);
+		if (tmpEnvVars == NULL) {
+			envVarsTotal--;
+			return (false);
+		}
+		envVarsSize = newEnvVarsSize;
+		envVars = tmpEnvVars;
+	}
+
+	return (true);
+}
+
+
+/*
+ * Using environ, build an environment for use by standard C library calls.
+ */
+static int
+__build_env(void)
+{
+	char **env;
+	int activeNdx;
+	int envNdx;
+	int rtrnVal;
+	int savedErrno;
+	size_t nameLen;
+
+	/* Check for non-existant environment. */
+	if (environ == NULL)
+		return (0);
+	if (environ[0] == NULL)
+		goto SaveEnviron;
+
+	/* Count environment variables. */
+	for (env = environ, envVarsTotal = 0; *env != NULL; env++)
+		envVarsTotal++;
+	envVarsSize = envVarsTotal * 2;
+
+	/* Create new environment. */
+	envVars = calloc(1, sizeof (*envVars) * envVarsSize);
+	if (envVars == NULL)
+		goto Failure;
+
+	/* Copy environ values and keep track of them. */
+	for (envNdx = envVarsTotal - 1; envNdx >= 0; envNdx--) {
+		envVars[envNdx].putenv = false;
+		envVars[envNdx].name =
+		    strdup(environ[envVarsTotal - envNdx - 1]);
+		if (envVars[envNdx].name == NULL)
+			goto Failure;
+		envVars[envNdx].value = strchr(envVars[envNdx].name, '=');
+		if (envVars[envNdx].value != NULL) {
+			envVars[envNdx].value++;
+			envVars[envNdx].valueSize =
+			    strlen(envVars[envNdx].value);
+		} else {
+			warnx("environment corrupt; missing value for %s",
+			    envVars[envNdx].name);
+			errno = EFAULT;

>>> TRUNCATED FOR MAIL (1000 lines) <<<


More information about the p4-projects mailing list