[Request for review] wrc: Add support for nameID with quotes

Tijnema tijnema at gmail.com
Tue Jun 2 18:15:16 CDT 2009


Hello all,

I was just checking around some old bugs and found 786 still opened. I've
written a patch for it, but I want to know if I'm anywhere close to get it
in.

I'm sorry if I'm only wasting your time.

Matijn
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.winehq.org/pipermail/wine-devel/attachments/20090603/dee3fa2a/attachment.htm>
-------------- next part --------------
From 60244428d2ef1af082c99acce6e51da9ef247eec Mon Sep 17 00:00:00 2001
From: Matijn Woudt <tijnema at gmail.com>
Date: Wed, 3 Jun 2009 01:04:12 +0200
Subject: wrc: Add support for nameID with quotes

---
 tools/wrc/parser.l |   39 ++++++++++++++++++++++++++++++++-------
 1 files changed, 32 insertions(+), 7 deletions(-)

diff --git a/tools/wrc/parser.l b/tools/wrc/parser.l
index bddc309..5b92ce3 100644
--- a/tools/wrc/parser.l
+++ b/tools/wrc/parser.l
@@ -125,7 +125,7 @@ static void addcchar(char c);
 static void addwchar(WCHAR s);
 static string_t *get_buffered_cstring(void);
 static string_t *get_buffered_wstring(void);
-static string_t *make_string(char *s);
+static string_t *make_string(char *s, int withQuotes);
 
 static char *cbuffer;		/* Buffers for string collection */
 static int cbufidx;
@@ -411,7 +411,7 @@ static unsigned long xstrtoul(const char *nptr, char **endptr, int base)
 				{
 					if(wanted_id && !tok->alwayskw)
 					{
-						parser_lval.str = make_string(yytext);
+						parser_lval.str = make_string(yytext, 0);
 						return tIDENT;
 					}
 					else
@@ -419,11 +419,30 @@ static unsigned long xstrtoul(const char *nptr, char **endptr, int base)
 				}
 				else
 				{
-					parser_lval.str = make_string(yytext);
+					parser_lval.str = make_string(yytext, 0);
 					return tIDENT;
 				}
 			}
-[A-Za-z_0-9./\\]+		parser_lval.str = make_string(yytext); return tFILENAME;
+["][A-Za-z_0-9.]+["]		{
+				struct keyword *tok = iskeyword(yytext);
+
+				if(tok)
+				{
+					if(wanted_id && !tok->alwayskw)
+					{
+						parser_lval.str = make_string(yytext, 1);
+						return tIDENT;
+					}
+					else
+						return tok->token;
+				}
+				else
+				{
+					parser_lval.str = make_string(yytext, 1);
+					return tIDENT;
+				}
+			}
+[A-Za-z_0-9./\\]+		parser_lval.str = make_string(yytext, 0); return tFILENAME;
 
 	/*
 	 * Wide string scanning
@@ -650,12 +669,18 @@ static string_t *get_buffered_wstring(void)
 	return str;
 }
 
-static string_t *make_string(char *s)
+static string_t *make_string(char *s, int withQuotes)
 {
 	string_t *str = new_string();
 	str->size = strlen(s);
 	str->type = str_char;
-	str->str.cstr = xmalloc(str->size+1);
-	memcpy(str->str.cstr, s, str->size+1);
+	if(withQuotes) {
+		str->str.cstr = xmalloc(str->size-1);
+		*(s + str->size - 1) = 0;
+		memcpy(str->str.cstr, s+1, str->size-1);
+	} else {
+		str->str.cstr = xmalloc(str->size+1);
+		memcpy(str->str.cstr, s, str->size+1);
+	}
 	return str;
 }
-- 
1.6.0.4


More information about the wine-devel mailing list