[PATCH 6/6] msxml3: better error handling for XSLPattern_to_XPath()
Adam Martinson
amartinson at codeweavers.com
Mon Sep 27 20:16:44 CDT 2010
---
dlls/msxml3/xslpattern.h | 3 ++-
dlls/msxml3/xslpattern.l | 12 +++++++++++-
dlls/msxml3/xslpattern.y | 6 ++++--
3 files changed, 17 insertions(+), 4 deletions(-)
diff --git a/dlls/msxml3/xslpattern.h b/dlls/msxml3/xslpattern.h
index 7b7cd7f..89ea199 100644
--- a/dlls/msxml3/xslpattern.h
+++ b/dlls/msxml3/xslpattern.h
@@ -40,6 +40,7 @@ typedef struct _parser_param {
int pos;
int len;
xmlChar* out;
+ int err;
} parser_param;
#define YYSTYPE xmlChar*
@@ -50,6 +51,6 @@ int xslpattern_lex_init(void**);
int xslpattern_lex_destroy(void*);
void xslpattern_set_extra(parser_param*, void*);
int xslpattern_parse(parser_param*, void*);
-inline void xslpattern_error(parser_param const* param, void const* scanner, char const* msg);
+inline void xslpattern_error(parser_param* param, void const* scanner, char const* msg);
#endif /* __XSLPATTERN__ */
diff --git a/dlls/msxml3/xslpattern.l b/dlls/msxml3/xslpattern.l
index b21ec0e..1a5060d 100644
--- a/dlls/msxml3/xslpattern.l
+++ b/dlls/msxml3/xslpattern.l
@@ -166,7 +166,17 @@ xmlChar* XSLPattern_to_XPath(xmlChar const* xslpat_str)
TRACE("=> %s\n", wine_dbgstr_a((char const*)p.out));
xslpattern_lex_destroy(p.yyscanner);
- return p.out;
+
+ if (p.err)
+ {
+ xmlFree(p.out);
+ return xmlStrdup(xslpat_str);
+ }
+ else
+ {
+ return p.out;
+ }
+
}
#endif /* HAVE_LIBXML2 */
diff --git a/dlls/msxml3/xslpattern.y b/dlls/msxml3/xslpattern.y
index 2fe4d6a..2c8e361 100644
--- a/dlls/msxml3/xslpattern.y
+++ b/dlls/msxml3/xslpattern.y
@@ -623,7 +623,7 @@ static const xmlChar NameTest_mod_post[] = "']";
%%
-inline void xslpattern_error(parser_param const* param, void const* scanner, char const* msg)
+inline void xslpattern_error(parser_param* param, void const* scanner, char const* msg)
{
FIXME("%s:\n"
" param {\n"
@@ -632,9 +632,11 @@ inline void xslpattern_error(parser_param const* param, void const* scanner, cha
" pos=%i\n"
" len=%i\n"
" out=\"%s\"\n"
+ " err=%i\n"
" }\n"
" scanner=%p\n",
- msg, param->yyscanner, param->in, param->pos, param->len, param->out, scanner);
+ msg, param->yyscanner, param->in, param->pos, param->len,
+ param->out, ++param->err, scanner);
}
--
1.7.2.3
--------------040500020902020001090201--
More information about the wine-patches
mailing list