PERFORCE change 127620 for review

John Birrell jb at FreeBSD.org
Tue Oct 16 19:46:04 PDT 2007


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

Change 127620 by jb at jb_freebsd1 on 2007/10/17 02:45:43

	IF6

Affected files ...

.. //depot/projects/dtrace6/src/contrib/less/NEWS#2 integrate
.. //depot/projects/dtrace6/src/contrib/less/README#2 integrate
.. //depot/projects/dtrace6/src/contrib/less/ch.c#2 integrate
.. //depot/projects/dtrace6/src/contrib/less/charset.c#2 integrate
.. //depot/projects/dtrace6/src/contrib/less/configure#2 integrate
.. //depot/projects/dtrace6/src/contrib/less/configure.ac#2 integrate
.. //depot/projects/dtrace6/src/contrib/less/filename.c#2 integrate
.. //depot/projects/dtrace6/src/contrib/less/funcs.h#2 integrate
.. //depot/projects/dtrace6/src/contrib/less/jump.c#2 integrate
.. //depot/projects/dtrace6/src/contrib/less/less.h#2 integrate
.. //depot/projects/dtrace6/src/contrib/less/less.man#2 integrate
.. //depot/projects/dtrace6/src/contrib/less/less.nro#2 integrate
.. //depot/projects/dtrace6/src/contrib/less/lessecho.man#2 integrate
.. //depot/projects/dtrace6/src/contrib/less/lessecho.nro#2 integrate
.. //depot/projects/dtrace6/src/contrib/less/lesskey.man#2 integrate
.. //depot/projects/dtrace6/src/contrib/less/lesskey.nro#2 integrate
.. //depot/projects/dtrace6/src/contrib/less/line.c#2 integrate
.. //depot/projects/dtrace6/src/contrib/less/search.c#2 integrate
.. //depot/projects/dtrace6/src/contrib/less/signal.c#2 integrate
.. //depot/projects/dtrace6/src/contrib/less/version.c#2 integrate
.. //depot/projects/dtrace6/src/contrib/one-true-awk/FIXES#2 integrate
.. //depot/projects/dtrace6/src/contrib/one-true-awk/FREEBSD-upgrade#2 integrate
.. //depot/projects/dtrace6/src/contrib/one-true-awk/awk.h#2 integrate
.. //depot/projects/dtrace6/src/contrib/one-true-awk/awkgram.y#2 integrate
.. //depot/projects/dtrace6/src/contrib/one-true-awk/b.c#2 integrate
.. //depot/projects/dtrace6/src/contrib/one-true-awk/lex.c#2 integrate
.. //depot/projects/dtrace6/src/contrib/one-true-awk/lib.c#2 integrate
.. //depot/projects/dtrace6/src/contrib/one-true-awk/main.c#2 integrate
.. //depot/projects/dtrace6/src/contrib/one-true-awk/makefile#2 integrate
.. //depot/projects/dtrace6/src/contrib/one-true-awk/maketab.c#2 integrate
.. //depot/projects/dtrace6/src/contrib/one-true-awk/proctab.c#2 integrate
.. //depot/projects/dtrace6/src/contrib/one-true-awk/run.c#2 integrate
.. //depot/projects/dtrace6/src/contrib/one-true-awk/tran.c#2 integrate
.. //depot/projects/dtrace6/src/include/arpa/tftp.h#2 integrate
.. //depot/projects/dtrace6/src/release/doc/en_US.ISO8859-1/relnotes/common/new.sgml#3 integrate
.. //depot/projects/dtrace6/src/sbin/dhclient/dhclient-script#2 integrate
.. //depot/projects/dtrace6/src/sbin/ifconfig/ifconfig.8#2 integrate
.. //depot/projects/dtrace6/src/sbin/ifconfig/ifconfig.c#2 integrate
.. //depot/projects/dtrace6/src/sbin/ipfw/ipfw2.c#2 integrate
.. //depot/projects/dtrace6/src/share/man/man4/if_bridge.4#2 integrate
.. //depot/projects/dtrace6/src/share/man/man4/lagg.4#2 integrate
.. //depot/projects/dtrace6/src/share/zoneinfo/Makefile#2 integrate
.. //depot/projects/dtrace6/src/sys/arm/arm/busdma_machdep.c#2 integrate
.. //depot/projects/dtrace6/src/sys/arm/arm/mem.c#2 integrate
.. //depot/projects/dtrace6/src/sys/arm/arm/pmap.c#2 integrate
.. //depot/projects/dtrace6/src/sys/arm/arm/vm_machdep.c#2 integrate
.. //depot/projects/dtrace6/src/sys/arm/include/pmap.h#2 integrate
.. //depot/projects/dtrace6/src/sys/arm/include/sf_buf.h#2 integrate
.. //depot/projects/dtrace6/src/sys/arm/include/vmparam.h#2 integrate
.. //depot/projects/dtrace6/src/sys/arm/xscale/i80321/iq31244_machdep.c#2 integrate
.. //depot/projects/dtrace6/src/sys/conf/kern.pre.mk#3 integrate
.. //depot/projects/dtrace6/src/sys/dev/em/if_em.c#3 integrate
.. //depot/projects/dtrace6/src/sys/dev/pci/pcireg.h#2 integrate
.. //depot/projects/dtrace6/src/sys/fs/pseudofs/pseudofs_vnops.c#2 integrate
.. //depot/projects/dtrace6/src/sys/kern/kern_thread.c#2 integrate
.. //depot/projects/dtrace6/src/sys/modules/acpi/Makefile#2 integrate
.. //depot/projects/dtrace6/src/sys/net/if_bridge.c#2 integrate
.. //depot/projects/dtrace6/src/sys/netgraph/ng_l2tp.c#2 integrate
.. //depot/projects/dtrace6/src/sys/opencrypto/cryptodev.c#2 integrate
.. //depot/projects/dtrace6/src/sys/sys/proc.h#3 integrate
.. //depot/projects/dtrace6/src/usr.bin/awk/Makefile#2 integrate
.. //depot/projects/dtrace6/src/usr.bin/awk/b.c.diff#2 delete
.. //depot/projects/dtrace6/src/usr.bin/awk/lib.c.diff#2 delete
.. //depot/projects/dtrace6/src/usr.bin/awk/main.c.diff#2 delete
.. //depot/projects/dtrace6/src/usr.bin/awk/run.c.diff#2 delete
.. //depot/projects/dtrace6/src/usr.bin/awk/tran.c.diff#2 delete

Differences ...

==== //depot/projects/dtrace6/src/contrib/less/NEWS#2 (text+ko) ====

@@ -13,6 +13,20 @@
 ======================================================================
 
 
+	Major changes between "less" versions 406 and 409
+
+* Support CSI escape sequences, like SGR escape sequences.
+
+* Fix bug which caused screen to fail to repaint when window is resized.
+
+* Fix bug in using -i and -I flags with non-ASCII text.
+
+* Fix configure bug on systems which don't support langinfo.h.
+
+* Fix crash when searching text containing certain invalid UTF-8 sequences.
+
+======================================================================
+
 	Major changes between "less" versions 394 and 406
 
 * Allow decimal point in number for % (percent) command.
@@ -683,3 +697,4 @@
 
 
 
+

==== //depot/projects/dtrace6/src/contrib/less/README#2 (text+ko) ====

@@ -1,7 +1,7 @@
 
-                            Less, version 406
+                            Less, version 409
 
-    This is the distribution of less, version 406, released 19 Jun 2007.
+    This is the distribution of less, version 409, released 12 Oct 2007.
     This program is part of the GNU project (http://www.gnu.org).
 
     This program is free software.  You may redistribute it and/or

==== //depot/projects/dtrace6/src/contrib/less/ch.c#2 (text+ko) ====

@@ -128,6 +128,9 @@
 	POSITION pos;
 	POSITION len;
 
+	if (thisfile == NULL)
+		return (EOI);
+
 	slept = FALSE;
 
 	/*
@@ -416,6 +419,9 @@
 	BLOCKNUM new_block;
 	POSITION len;
 
+	if (thisfile == NULL)
+		return (0);
+
 	len = ch_length();
 	if (pos < ch_zero() || (len != NULL_POSITION && pos > len))
 		return (1);
@@ -450,6 +456,9 @@
 {
 	POSITION len;
 
+	if (thisfile == NULL)
+		return (0);
+
 	if (ch_flags & CH_CANSEEK)
 		ch_fsize = filesize(ch_file);
 
@@ -503,6 +512,8 @@
 	public POSITION
 ch_length()
 {
+	if (thisfile == NULL)
+		return (NULL_POSITION);
 	if (ignore_eoi)
 		return (NULL_POSITION);
 	if (ch_flags & CH_HELPFILE)
@@ -516,6 +527,8 @@
 	public POSITION
 ch_tell()
 {
+	if (thisfile == NULL)
+		return (NULL_POSITION);
 	return (ch_block * LBUFSIZE) + ch_offset;
 }
 
@@ -527,6 +540,8 @@
 {
 	register int c;
 
+	if (thisfile == NULL)
+		return (EOI);
 	c = ch_get();
 	if (c == EOI)
 		return (EOI);
@@ -546,6 +561,8 @@
 	public int
 ch_back_get()
 {
+	if (thisfile == NULL)
+		return (EOI);
 	if (ch_offset > 0)
 		ch_offset --;
 	else
@@ -586,6 +603,9 @@
 {
 	register struct buf *bp;
 
+	if (thisfile == NULL)
+		return;
+
 	if (!(ch_flags & CH_CANSEEK))
 	{
 		/*
@@ -769,6 +789,9 @@
 {
 	int keepstate = FALSE;
 
+	if (thisfile == NULL)
+		return;
+
 	if (ch_flags & (CH_CANSEEK|CH_POPENED|CH_HELPFILE))
 	{
 		/*
@@ -807,6 +830,8 @@
 	public int
 ch_getflags()
 {
+	if (thisfile == NULL)
+		return (0);
 	return (ch_flags);
 }
 

==== //depot/projects/dtrace6/src/contrib/less/charset.c#2 (text+ko) ====

@@ -567,24 +567,29 @@
 	{
 	case 1:
 	default:
+		/* 0xxxxxxx */
 		return (LWCHAR)
 			(p[0] & 0xFF);
 	case 2:
+		/* 110xxxxx 10xxxxxx */
 		return (LWCHAR) (
 			((p[0] & 0x1F) << 6) |
 			(p[1] & 0x3F));
 	case 3:
+		/* 1110xxxx 10xxxxxx 10xxxxxx */
 		return (LWCHAR) (
 			((p[0] & 0x0F) << 12) |
 			((p[1] & 0x3F) << 6) |
 			(p[2] & 0x3F));
 	case 4:
+		/* 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx */
 		return (LWCHAR) (
 			((p[0] & 0x07) << 18) |
 			((p[1] & 0x3F) << 12) | 
 			((p[2] & 0x3F) << 6) | 
 			(p[3] & 0x3F));
 	case 5:
+		/* 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx */
 		return (LWCHAR) (
 			((p[0] & 0x03) << 24) |
 			((p[1] & 0x3F) << 18) | 
@@ -592,6 +597,7 @@
 			((p[3] & 0x3F) << 6) | 
 			(p[4] & 0x3F));
 	case 6:
+		/* 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx */
 		return (LWCHAR) (
 			((p[0] & 0x01) << 30) |
 			((p[1] & 0x3F) << 24) | 
@@ -603,6 +609,56 @@
 }
 
 /*
+ * Store a character into a UTF-8 string.
+ */
+	public void
+put_wchar(pp, ch)
+	char **pp;
+	LWCHAR ch;
+{
+	if (!utf_mode || ch < 0x80) 
+	{
+		/* 0xxxxxxx */
+		*(*pp)++ = (char) ch;
+	} else if (ch < 0x800)
+	{
+		/* 110xxxxx 10xxxxxx */
+		*(*pp)++ = (char) (0xC0 | ((ch >> 6) & 0x1F));
+		*(*pp)++ = (char) (0x80 | (ch & 0x3F));
+	} else if (ch < 0x10000)
+	{
+		/* 1110xxxx 10xxxxxx 10xxxxxx */
+		*(*pp)++ = (char) (0xE0 | ((ch >> 12) & 0x0F));
+		*(*pp)++ = (char) (0x80 | ((ch >> 6) & 0x3F));
+		*(*pp)++ = (char) (0x80 | (ch & 0x3F));
+	} else if (ch < 0x200000)
+	{
+		/* 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx */
+		*(*pp)++ = (char) (0xF0 | ((ch >> 18) & 0x07));
+		*(*pp)++ = (char) (0x80 | ((ch >> 12) & 0x3F));
+		*(*pp)++ = (char) (0x80 | ((ch >> 6) & 0x3F));
+		*(*pp)++ = (char) (0x80 | (ch & 0x3F));
+	} else if (ch < 0x4000000)
+	{
+		/* 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx */
+		*(*pp)++ = (char) (0xF0 | ((ch >> 24) & 0x03));
+		*(*pp)++ = (char) (0x80 | ((ch >> 18) & 0x3F));
+		*(*pp)++ = (char) (0x80 | ((ch >> 12) & 0x3F));
+		*(*pp)++ = (char) (0x80 | ((ch >> 6) & 0x3F));
+		*(*pp)++ = (char) (0x80 | (ch & 0x3F));
+	} else 
+	{
+		/* 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx */
+		*(*pp)++ = (char) (0xF0 | ((ch >> 30) & 0x01));
+		*(*pp)++ = (char) (0x80 | ((ch >> 24) & 0x3F));
+		*(*pp)++ = (char) (0x80 | ((ch >> 18) & 0x3F));
+		*(*pp)++ = (char) (0x80 | ((ch >> 12) & 0x3F));
+		*(*pp)++ = (char) (0x80 | ((ch >> 6) & 0x3F));
+		*(*pp)++ = (char) (0x80 | (ch & 0x3F));
+	}
+}
+
+/*
  * Step forward or backward one character in a string.
  */
 	public LWCHAR
@@ -612,6 +668,7 @@
 	char *limit;
 {
 	LWCHAR ch;
+	int len;
 	char *p = *pp;
 
 	if (!utf_mode)
@@ -623,14 +680,15 @@
 			ch = (LWCHAR) ((p > limit) ? *--p : 0);
 	} else if (dir > 0)
 	{
-		if (p + utf_len(*p) > limit)
+		len = utf_len(*p);
+		if (p + len > limit)
+		{
 			ch = 0;
-		else
+			p = limit;
+		} else
 		{
 			ch = get_wchar(p);
-			p++;
-			while (IS_UTF8_TRAIL(*p))
-				p++;
+			p += len;
 		}
 	} else
 	{

==== //depot/projects/dtrace6/src/contrib/less/configure#2 (text+ko) ====

@@ -6473,6 +6473,7 @@
 /* end confdefs.h.  */
 #include <locale.h>
 #include <ctype.h>
+#include <langinfo.h>
 int
 main ()
 {

==== //depot/projects/dtrace6/src/contrib/less/configure.ac#2 (text+ko) ====

@@ -304,7 +304,8 @@
 
 AC_MSG_CHECKING(for locale)
 AC_TRY_LINK([#include <locale.h>
-#include <ctype.h>], [setlocale(LC_CTYPE,""); isprint(0); iscntrl(0);],
+#include <ctype.h>
+#include <langinfo.h>], [setlocale(LC_CTYPE,""); isprint(0); iscntrl(0);],
   [AC_MSG_RESULT(yes); AC_DEFINE(HAVE_LOCALE)], [AC_MSG_RESULT(no)])
 AC_MSG_CHECKING(for ctype functions)
 AC_TRY_LINK([

==== //depot/projects/dtrace6/src/contrib/less/filename.c#2 (text+ko) ====

@@ -482,7 +482,7 @@
 	for (i = 0;  i < n;  i++)
 	{
 		char c = data[i];
-		if (ctldisp == OPT_ONPLUS && c == ESC)
+		if (ctldisp == OPT_ONPLUS && IS_CSI_START(c))
 		{
 			while (++i < n && is_ansi_middle(data[i]))
 				continue;

==== //depot/projects/dtrace6/src/contrib/less/funcs.h#2 (text+ko) ====

@@ -56,6 +56,7 @@
 	public int utf_len ();
 	public int is_utf8_well_formed ();
 	public LWCHAR get_wchar ();
+	public void put_wchar ();
 	public LWCHAR step_char ();
 	public int is_composing_char ();
 	public int is_ubin_char ();

==== //depot/projects/dtrace6/src/contrib/less/jump.c#2 (text+ko) ====

@@ -31,6 +31,7 @@
 jump_forw()
 {
 	POSITION pos;
+	POSITION end_pos;
 
 	if (ch_end_seek())
 	{
@@ -42,11 +43,17 @@
 	 * Go back one line from the end of the file
 	 * to get to the beginning of the last line.
 	 */
-	pos = back_line(ch_tell());
+	pos_clear();
+	end_pos = ch_tell();
+	pos = back_line(end_pos);
 	if (pos == NULL_POSITION)
 		jump_loc((POSITION)0, sc_height-1);
 	else
+	{
 		jump_loc(pos, sc_height-1);
+		if (position(sc_height-1) != end_pos)
+			repaint();
+	}
 }
 
 /*

==== //depot/projects/dtrace6/src/contrib/less/less.h#2 (text+ko) ====

@@ -1,4 +1,4 @@
-/* $FreeBSD: src/contrib/less/less.h,v 1.5.8.2 2007/07/03 05:12:41 delphij Exp $ */
+/* $FreeBSD: src/contrib/less/less.h,v 1.5.8.3 2007/10/11 18:51:44 delphij Exp $ */
 /*
  * Copyright (C) 1984-2007  Mark Nudelman
  *
@@ -150,6 +150,8 @@
 #define IS_DIGIT(c)	((c) >= '0' && (c) <= '9')
 #endif
 
+#define IS_CSI_START(c)	((c) == ESC || ((unsigned char)(c)) == CSI)
+
 #ifndef NULL
 #define	NULL	0
 #endif
@@ -425,6 +427,7 @@
 #endif /* IS_EBCDIC_HOST */
 
 #define	ESC		CONTROL('[')
+#define	CSI		((unsigned char)'\233')
 
 #if _OSK_MWC32
 #define	LSIGNAL(sig,func)	os9_signal(sig,func)

==== //depot/projects/dtrace6/src/contrib/less/less.man#2 (text+ko) ====

@@ -1544,4 +1544,4 @@
 
 
 
-                           Version 406: 19 Jun 2007                    LESS(1)
+                           Version 409: 12 Oct 2007                    LESS(1)

==== //depot/projects/dtrace6/src/contrib/less/less.nro#2 (text+ko) ====

@@ -1,4 +1,4 @@
-.TH LESS 1 "Version 406: 19 Jun 2007"
+.TH LESS 1 "Version 409: 12 Oct 2007"
 .SH NAME
 less \- opposite of more
 .SH SYNOPSIS

==== //depot/projects/dtrace6/src/contrib/less/lessecho.man#2 (text+ko) ====

@@ -46,4 +46,4 @@
 
 
 
-                           Version 406: 19 Jun 2007                LESSECHO(1)
+                           Version 409: 12 Oct 2007                LESSECHO(1)

==== //depot/projects/dtrace6/src/contrib/less/lessecho.nro#2 (text+ko) ====

@@ -1,4 +1,4 @@
-.TH LESSECHO 1 "Version 406: 19 Jun 2007"
+.TH LESSECHO 1 "Version 409: 12 Oct 2007"
 .SH NAME
 lessecho \- expand metacharacters
 .SH SYNOPSIS

==== //depot/projects/dtrace6/src/contrib/less/lesskey.man#2 (text+ko) ====

@@ -357,4 +357,4 @@
 
 
 
-                           Version 406: 19 Jun 2007                 LESSKEY(1)
+                           Version 409: 12 Oct 2007                 LESSKEY(1)

==== //depot/projects/dtrace6/src/contrib/less/lesskey.nro#2 (text+ko) ====

@@ -1,4 +1,4 @@
-.TH LESSKEY 1 "Version 406: 19 Jun 2007"
+.TH LESSKEY 1 "Version 409: 12 Oct 2007"
 .SH NAME
 lesskey \- specify key bindings for less
 .SH SYNOPSIS

==== //depot/projects/dtrace6/src/contrib/less/line.c#2 (text+ko) ====

@@ -1,4 +1,4 @@
-/* $FreeBSD: src/contrib/less/line.c,v 1.1.1.4.8.3 2007/07/03 05:12:41 delphij Exp $ */
+/* $FreeBSD: src/contrib/less/line.c,v 1.1.1.4.8.4 2007/10/11 18:51:44 delphij Exp $ */
 /*
  * Copyright (C) 1984-2007  Mark Nudelman
  *
@@ -269,7 +269,7 @@
 	while (shifted <= shift && from < curr)
 	{
 		c = linebuf[from];
-		if (c == ESC && ctldisp == OPT_ONPLUS)
+		if (ctldisp == OPT_ONPLUS && IS_CSI_START(c))
 		{
 			/* Keep cumulative effect.  */
 			linebuf[to] = c;
@@ -524,7 +524,7 @@
 	for (p = &linebuf[curr];  p > linebuf; )
 	{
 		LWCHAR ch = step_char(&p, -1, linebuf);
-		if (ch == ESC)
+		if (IS_CSI_START(ch))
 			return (1);
 		if (!is_ansi_middle(ch))
 			return (0);
@@ -603,13 +603,13 @@
 			/* Remove whole unrecognized sequence.  */
 			do {
 				--curr;
-			} while (linebuf[curr] != ESC);
+			} while (!IS_CSI_START(linebuf[curr]));
 			return 0;
 		}
 		a = AT_ANSI;	/* Will force re-AT_'ing around it.  */
 		w = 0;
 	}
-	else if (ctldisp == OPT_ONPLUS && ch == ESC)
+	else if (ctldisp == OPT_ONPLUS && IS_CSI_START(ch))
 	{
 		a = AT_ANSI;	/* Will force re-AT_'ing around it.  */
 		w = 0;
@@ -943,7 +943,7 @@
 	} else if ((!utf_mode || is_ascii_char(ch)) && control_char((char)ch))
 	{
 	do_control_char:
-		if (ctldisp == OPT_ON || (ctldisp == OPT_ONPLUS && ch == ESC))
+		if (ctldisp == OPT_ON || (ctldisp == OPT_ONPLUS && IS_CSI_START(ch)))
 		{
 			/*
 			 * Output as a normal character.

==== //depot/projects/dtrace6/src/contrib/less/search.c#2 (text+ko) ====

@@ -1,4 +1,4 @@
-/* $FreeBSD: src/contrib/less/search.c,v 1.5.8.2 2007/07/03 05:12:41 delphij Exp $ */
+/* $FreeBSD: src/contrib/less/search.c,v 1.5.8.3 2007/10/11 18:51:44 delphij Exp $ */
 /*
  * Copyright (C) 1984-2007  Mark Nudelman
  *
@@ -16,6 +16,7 @@
 
 #include "less.h"
 #include "position.h"
+#include "charset.h"
 
 #define	MINPOS(a,b)	(((a) < (b)) ? (a) : (b))
 #define	MAXPOS(a,b)	(((a) > (b)) ? (a) : (b))
@@ -120,24 +121,31 @@
 	int *lenp;
 	int ops;
 {
-	register char *dst;
-	register char *src;
+	char *dst;
+	char *src;
 	register char *src_end;
+	LWCHAR ch;
 
 	if (lenp != NULL)
 		src_end = osrc + *lenp;
 	else
 		src_end = osrc + strlen(osrc);
 
-	for (src = osrc, dst = odst;  src < src_end;  src++)
+	for (src = osrc, dst = odst;  src < src_end;  )
 	{
-		if ((ops & CVT_TO_LC) && IS_UPPER(*src))
+		ch = step_char(&src, +1, src_end);
+		if ((ops & CVT_TO_LC) && IS_UPPER(ch))
+		{
 			/* Convert uppercase to lowercase. */
-			*dst++ = TO_LOWER(*src);
-		else if ((ops & CVT_BS) && *src == '\b' && dst > odst)
+			put_wchar(&dst, TO_LOWER(ch));
+		} else if ((ops & CVT_BS) && ch == '\b' && dst > odst)
+		{
 			/* Delete BS and preceding char. */
-			dst--;
-		else if ((ops & CVT_ANSI) && *src == ESC)
+			do {
+				dst--;
+			} while (dst > odst &&
+				!IS_ASCII_OCTET(*dst) && !IS_UTF8_LEAD(*dst));
+		} else if ((ops & CVT_ANSI) && IS_CSI_START(ch))
 		{
 			/* Skip to end of ANSI escape sequence. */
 			while (src + 1 != src_end)
@@ -145,7 +153,7 @@
 					break;
 		} else 
 			/* Just copy. */
-			*dst++ = *src;
+			put_wchar(&dst, ch);
 	}
 	if ((ops & CVT_CRLF) && dst > odst && dst[-1] == '\r')
 		dst--;
@@ -182,14 +190,18 @@
  * Are there any uppercase letters in this string?
  */
 	static int
-is_ucase(s)
-	char *s;
+is_ucase(str)
+	char *str;
 {
-	register char *p;
+	char *str_end = str + strlen(str);
+	LWCHAR ch;
 
-	for (p = s;  *p != '\0';  p++)
-		if (IS_UPPER(*p))
+	while (str < str_end)
+	{
+		ch = step_char(&str, +1, str_end);
+		if (IS_UPPER(ch))
 			return (1);
+	}
 	return (0);
 }
 
@@ -679,7 +691,7 @@
 	char *line_end = *line + line_len;
 
 	if (cvt_ops & CVT_ANSI)
-		while (**line == ESC)
+		while (IS_CSI_START(**line))
 		{
 			/*
 			 * Found an ESC.  The file position moves

==== //depot/projects/dtrace6/src/contrib/less/signal.c#2 (text+ko) ====

@@ -8,7 +8,7 @@
  * contact the author, see the README file.
  */
 
-/* $FreeBSD: src/contrib/less/signal.c,v 1.3.8.2 2007/07/03 05:12:41 delphij Exp $ */
+/* $FreeBSD: src/contrib/less/signal.c,v 1.3.8.3 2007/10/11 18:51:44 delphij Exp $ */
 
 /*
  * Routines dealing with signals.
@@ -93,6 +93,8 @@
 {
 	LSIGNAL(SIGWINCH, winch);
 	sigs |= S_WINCH;
+	if (reading)
+		intread();
 }
 #else
 #ifdef SIGWIND

==== //depot/projects/dtrace6/src/contrib/less/version.c#2 (text+ko) ====

@@ -693,6 +693,9 @@
 v404  6/5/07	Fix display bug with F command and long lines.
 v405  6/17/07	Fix display bug when using -w option.
 v406  6/17/07	Fix secure build.
+v407  8/16/07	Fix bugs; support CSI chars.
+v408  10/1/07	Fix bug in -i with non-ASCII chars.
+v409  10/12/07	Fix crash when viewing text with invalid UTF-8 sequences.
 */
 
-char version[] = "406";
+char version[] = "409";

==== //depot/projects/dtrace6/src/contrib/one-true-awk/FIXES#2 (text+ko) ====

@@ -25,6 +25,50 @@
 This file lists all bug fixes, changes, etc., made since the AWK book
 was sent to the printers in August, 1987.
 
+May 1, 2007:
+	fiddle in makefile to fix for BSD make; thanks to igor sobrado.
+
+Mar 31, 2007:
+	fixed some null pointer refs calling adjbuf.
+
+Feb 21, 2007:
+	fixed a bug in matching the null RE in sub and gsub.  thanks to al aho
+	who actually did the fix (in b.c), and to wolfgang seeberg for finding
+	it and providing a very compact test case.
+
+	fixed quotation in b.c; thanks to Hal Pratt and the Princeton Dante
+	Project.
+
+	removed some no-effect asserts in run.c.
+
+	fiddled maketab.c to not complain about bison-generated values.
+
+	removed the obsolete -V argument; fixed --version to print the
+	version and exit.
+
+	fixed wording and an outright error in the usage message; thanks to igor
+	sobrado and jason mcintyre.
+
+	fixed a bug in -d that caused core dump if no program followed.
+
+Jan 1, 2007:
+	dropped mac.code from makefile; there are few non-MacOSX
+	mac's these days.
+
+Jan 17, 2006:
+	system() not flagged as unsafe in the unadvertised -safe option.
+	found it while enhancing tests before shipping the ;login: article.
+	practice what you preach.
+
+	removed the 9-years-obsolete -mr and -mf flags.
+
+	added -version and --version options.
+
+	core dump on linux with BEGIN {nextfile}, now fixed.
+
+	removed some #ifdef's in run.c and lex.c that appear to no 
+	longer be necessary.
+
 Apr 24, 2005:
 	modified lib.c so that values of $0 et al are preserved in the END
 	block, apparently as required by posix.  thanks to havard eidnes

==== //depot/projects/dtrace6/src/contrib/one-true-awk/FREEBSD-upgrade#2 (text+ko) ====

@@ -1,4 +1,4 @@
-# $FreeBSD: src/contrib/one-true-awk/FREEBSD-upgrade,v 1.9 2005/05/16 19:19:32 ru Exp $
+# $FreeBSD: src/contrib/one-true-awk/FREEBSD-upgrade,v 1.9.2.1 2007/10/10 00:22:15 obrien Exp $
 
 Import of the 2005/04/24 version of the "one true awk", as described
 in "The AWK Programming Language", by Al Aho, Brian Kernighan, and
@@ -6,7 +6,7 @@
 
 Original sources were taken from the Brian Kernighan's home page
 (http://cm.bell-labs.com/who/bwk/) and include bug fixes up thru
-April 24, 2005.
+May 01, 2007.
 
 The following files were removed for this import:
 
@@ -21,4 +21,4 @@
 
 The vendor import was done by:
 
-	cvs import src/contrib/one-true-awk BELL_LABS bwk_20050424
+	cvs import src/contrib/one-true-awk BELL_LABS bwk_20070501

==== //depot/projects/dtrace6/src/contrib/one-true-awk/awk.h#2 (text+ko) ====

@@ -30,7 +30,7 @@
 
 typedef	unsigned char uschar;
 
-#define	xfree(a)	{ if ((a) != NULL) { free((char *) a); a = NULL; } }
+#define	xfree(a)	{ if ((a) != NULL) { free((void *) (a)); (a) = NULL; } }
 
 #define	NN(p)	((p) ? (p) : "(null)")	/* guaranteed non-null for dprintf 
 */

==== //depot/projects/dtrace6/src/contrib/one-true-awk/awkgram.y#2 (text+ko) ====

@@ -50,7 +50,7 @@
 %token	<i>	NL ',' '{' '(' '|' ';' '/' ')' '}' '[' ']'
 %token	<i>	ARRAY
 %token	<i>	MATCH NOTMATCH MATCHOP
-%token	<i>	FINAL DOT ALL CCL NCCL CHAR OR STAR QUEST PLUS
+%token	<i>	FINAL DOT ALL CCL NCCL CHAR OR STAR QUEST PLUS EMPTYRE
 %token	<i>	AND BOR APPEND EQ GE GT LE LT NE IN
 %token	<i>	ARG BLTIN BREAK CLOSE CONTINUE DELETE DO EXIT FOR FUNC 
 %token	<i>	SUB GSUB IF INDEX LSUBSTR MATCHFCN NEXT NEXTFILE

==== //depot/projects/dtrace6/src/contrib/one-true-awk/b.c#2 (text+ko) ====

@@ -22,7 +22,7 @@
 THIS SOFTWARE.
 ****************************************************************/
 
-/* lasciate ogne speranza, voi ch'entrate. */
+/* lasciate ogne speranza, voi ch'intrate. */
 
 #define	DEBUG
 
@@ -44,10 +44,11 @@
 #define parent(v)	(v)->nnext
 
 #define LEAF	case CCL: case NCCL: case CHAR: case DOT: case FINAL: case ALL:
+#define ELEAF	case EMPTYRE:		/* empty string in regexp */
 #define UNARY	case STAR: case PLUS: case QUEST:
 
 /* encoding in tree Nodes:
-	leaf (CCL, NCCL, CHAR, DOT, FINAL, ALL):
+	leaf (CCL, NCCL, CHAR, DOT, FINAL, ALL, EMPTYRE):
 		left is index, right contains value or pointer to value
 	unary (STAR, PLUS, QUEST): left is child, right is null
 	binary (CAT, OR): left and right are children
@@ -182,6 +183,7 @@
 void penter(Node *p)	/* set up parent pointers and leaf indices */
 {
 	switch (type(p)) {
+	ELEAF
 	LEAF
 		info(p) = poscnt;
 		poscnt++;
@@ -206,6 +208,7 @@
 void freetr(Node *p)	/* free parse tree */
 {
 	switch (type(p)) {
+	ELEAF
 	LEAF
 		xfree(p);
 		break;
@@ -282,9 +285,21 @@
 	return c;
 }
 
+static int collate_range_cmp(int a, int b)
+{
+	static char s[2][2];
+
+	if ((uschar)a == (uschar)b)
+		return 0;
+	s[0][0] = a;
+	s[1][0] = b;
+	return (strcoll(s[0], s[1]));
+}
+
 char *cclenter(const char *argp)	/* add a character class */
 {
 	int i, c, c2;
+	int j;
 	uschar *p = (uschar *) argp;
 	uschar *op, *bp;
 	static uschar *buf = 0;
@@ -303,21 +318,24 @@
 				c2 = *p++;
 				if (c2 == '\\')
 					c2 = quoted((char **) &p);
-				if (c > c2) {	/* empty; ignore */
+				if (collate_range_cmp(c, c2) > 0) {
 					bp--;
 					i--;
 					continue;
 				}
-				while (c < c2) {
-					if (!adjbuf((char **) &buf, &bufsz, bp-buf+2, 100, (char **) &bp, 0))
+				for (j = 0; j < NCHARS; j++) {
+					if ((collate_range_cmp(c, j) > 0) ||
+					    collate_range_cmp(j, c2) > 0)
+						continue;
+					if (!adjbuf((char **) &buf, &bufsz, bp-buf+2, 100, (char **) &bp, "cclenter1"))
 						FATAL("out of space for character class [%.10s...] 2", p);
-					*bp++ = ++c;
+					*bp++ = j;
 					i++;
 				}
 				continue;
 			}
 		}
-		if (!adjbuf((char **) &buf, &bufsz, bp-buf+2, 100, (char **) &bp, 0))
+		if (!adjbuf((char **) &buf, &bufsz, bp-buf+2, 100, (char **) &bp, "cclenter2"))
 			FATAL("out of space for character class [%.10s...] 3", p);
 		*bp++ = c;
 		i++;
@@ -339,6 +357,7 @@
 	int *p;
 
 	switch (type(v)) {
+	ELEAF
 	LEAF
 		f->re[info(v)].ltype = type(v);
 		f->re[info(v)].lval.np = right(v);
@@ -375,11 +394,12 @@
 }
 
 int first(Node *p)	/* collects initially active leaves of p into setvec */
-			/* returns 1 if p matches empty string */
+			/* returns 0 if p matches empty string */
 {
 	int b, lp;
 
 	switch (type(p)) {
+	ELEAF
 	LEAF
 		lp = info(p);	/* look for high-water mark of subscripts */
 		while (setcnt >= maxsetvec || lp >= maxsetvec) {	/* guessing here! */
@@ -389,6 +409,10 @@
 			if (setvec == 0 || tmpset == 0)
 				overflo("out of space in first()");
 		}
+		if (type(p) == EMPTYRE) {
+			setvec[lp] = 0;
+			return(0);
+		}
 		if (setvec[lp] != 1) {
 			setvec[lp] = 1;
 			setcnt++;
@@ -465,7 +489,7 @@
 	if (f->out[s])
 		return(1);
 	do {
-		assert(*p < NCHARS);
+		/* assert(*p < NCHARS); */
 		if ((ns = f->gototab[s][*p]) != 0)
 			s = ns;
 		else
@@ -496,7 +520,7 @@
 		do {
 			if (f->out[s])		/* final state */
 				patlen = q-p;
-			assert(*q < NCHARS);
+			/* assert(*q < NCHARS); */
 			if ((ns = f->gototab[s][*q]) != 0)
 				s = ns;
 			else
@@ -554,7 +578,7 @@
 		do {
 			if (f->out[s])		/* final state */
 				patlen = q-p;
-			assert(*q < NCHARS);
+			/* assert(*q < NCHARS); */
 			if ((ns = f->gototab[s][*q]) != 0)
 				s = ns;
 			else
@@ -601,9 +625,10 @@
 	lastre = prestr = (uschar *) p;	/* prestr points to string to be parsed */
 	rtok = relex();
 	/* GNU compatibility: an empty regexp matches anything */
-	if (rtok == '\0')
+	if (rtok == '\0') {
 		/* FATAL("empty regular expression"); previous */
-		return(op2(ALL, NIL, NIL));
+		return(op2(EMPTYRE, NIL, NIL));
+	}
 	np = regexp();
 	if (rtok != '\0')
 		FATAL("syntax error in regular expression %s at %s", lastre, prestr);
@@ -627,6 +652,9 @@
 	case ALL:
 		rtok = relex();
 		return (unary(op2(ALL, NIL, NIL)));
+	case EMPTYRE:
+		rtok = relex();
+		return (unary(op2(ALL, NIL, NIL)));
 	case DOT:
 		rtok = relex();
 		return (unary(op2(DOT, NIL, NIL)));
@@ -666,7 +694,7 @@
 Node *concat(Node *np)
 {
 	switch (rtok) {
-	case CHAR: case DOT: case ALL: case CCL: case NCCL: case '$': case '(':
+	case CHAR: case DOT: case ALL: case EMPTYRE: case CCL: case NCCL: case '$': case '(':
 		return (concat(op2(CAT, np, primary())));
 	}
 	return (np);
@@ -787,7 +815,7 @@
 		else
 			cflag = 0;
 		n = 2 * strlen((const char *) prestr)+1;
-		if (!adjbuf((char **) &buf, &bufsz, n, n, (char **) &bp, 0))
+		if (!adjbuf((char **) &buf, &bufsz, n, n, (char **) &bp, "relex1"))
 			FATAL("out of space for reg expr %.10s...", lastre);
 		for (; ; ) {
 			if ((c = *prestr++) == '\\') {
@@ -806,7 +834,7 @@
 				    prestr[2 + cc->cc_namelen] == ']') {
 					prestr += cc->cc_namelen + 3;
 					for (i = 0; i < NCHARS; i++) {
-						if (!adjbuf((char **) &buf, &bufsz, bp-buf+1, 100, (char **) &bp, 0))
+						if (!adjbuf((char **) &buf, &bufsz, bp-buf+1, 100, (char **) &bp, "relex2"))
 						    FATAL("out of space for reg expr %.10s...", lastre);
 						if (cc->cc_func(i)) {
 							*bp++ = i;
@@ -855,6 +883,7 @@
 			if ((k == CHAR && c == ptoi(f->re[p[i]].lval.np))
 			 || (k == DOT && c != 0 && c != HAT)
 			 || (k == ALL && c != 0)
+			 || (k == EMPTYRE && c != 0)
 			 || (k == CCL && member(c, (char *) f->re[p[i]].lval.up))
 			 || (k == NCCL && !member(c, (char *) f->re[p[i]].lval.up) && c != 0 && c != HAT)) {
 				q = f->re[p[i]].lfollow;

==== //depot/projects/dtrace6/src/contrib/one-true-awk/lex.c#2 (text+ko) ====


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


More information about the p4-projects mailing list