Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 22 Jan 2010 19:35:37 +0100 (CET)
From:      Tobias Rehbein <tobias.rehbein@web.de>
To:        FreeBSD-gnats-submit@FreeBSD.org
Subject:   bin/143090: [PATCH] Let indent(1) handle widecharacter literals correctly
Message-ID:  <201001221835.o0MIZbLZ011432@sushi.pseudo.local>
Resent-Message-ID: <201001221840.o0MIe2si049681@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help

>Number:         143090
>Category:       bin
>Synopsis:       [PATCH] Let indent(1) handle widecharacter literals correctly
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Fri Jan 22 18:40:02 UTC 2010
>Closed-Date:
>Last-Modified:
>Originator:     Tobias Rehbein
>Release:        FreeBSD 8.0-RELEASE-p2 i386
>Organization:
>Environment:
System: FreeBSD sushi.pseudo.local 8.0-RELEASE-p2 FreeBSD 8.0-RELEASE-p2 #5: Fri Jan 15 19:16:49 CET 2010 tobi@sushi.pseudo.local:/usr/obj/usr/src/sys/SUSHI i386


	
>Description:
        I noticed that indent(1) handles widecharacter literals (e.g. L'c' or
        L"string") incorrectly. indent(1)s parser treats the L-prefix and the
        quoted part as seperate tokens. The result is:

                L'c'            ->      L 'c'
                L"string"       ->      L "string"

        Of course this breaks any code using widecharacters. As I use indent(1)
        quite extensively I decided to fix this issue. 
        
        As this is my first patch against the FreeBSD user land feel free to
        comment!

        The first version of this patch including examples was posted to
        freebsd-current@freebsd.org:

        http://archive.netbsd.se/?ml=freebsd-current&a=2010-01&m=12274166
>How-To-Repeat:
        indent /usr/src/lib/libc/string/wcsxfrm.c
>Fix:

	

--- indent.diff begins here ---
diff -u /usr/src/usr.bin/indent/Makefile usr.bin/indent/Makefile
--- /usr/src/usr.bin/indent/Makefile	2010-01-22 19:18:41.000000000 +0100
+++ usr.bin/indent/Makefile	2010-01-21 19:01:13.000000000 +0100
@@ -3,4 +3,6 @@
 PROG=	indent
 SRCS=	indent.c io.c lexi.c parse.c pr_comment.c args.c
 
+WARNS?=		6
+
 .include <bsd.prog.mk>
diff -u /usr/src/usr.bin/indent/lexi.c usr.bin/indent/lexi.c
--- /usr/src/usr.bin/indent/lexi.c	2010-01-22 19:18:41.000000000 +0100
+++ usr.bin/indent/lexi.c	2010-01-22 19:14:00.000000000 +0100
@@ -222,6 +222,14 @@
 			    break;
 		}
 		CHECK_SIZE_TOKEN;
+		if ((s_token == e_token) && *buf_ptr == 'L' &&
+			(*(buf_ptr + 1) == '\'' || *(buf_ptr + 1) == '"' )) {
+		    /* widecharacter literal */
+		    *e_token++ = *buf_ptr++;        /* copy L */
+		    *e_token++ = *buf_ptr;          /* copy ' or " */
+		    qchar = *buf_ptr++;             /* set string delimeter */
+		    goto found_string;
+		}
 		/* copy it over */
 		*e_token++ = *buf_ptr++;
 		if (buf_ptr >= buf_end)
@@ -361,6 +369,7 @@
     case '\'':			/* start of quoted character */
     case '"':			/* start of string */
 	qchar = *token;
+found_string:
 	if (troff) {
 	    e_token[-1] = '`';
 	    if (qchar == '"')
--- indent.diff ends here ---


>Release-Note:
>Audit-Trail:
>Unformatted:



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201001221835.o0MIZbLZ011432>