Module: wine Branch: master Commit: 0cb665ca8a55226248deaec75c0fb562013fd604 URL: http://source.winehq.org/git/wine.git/?a=commit;h=0cb665ca8a55226248deaec75c...
Author: Nikolay Sivov nsivov@codeweavers.com Date: Thu Feb 2 02:03:20 2017 +0300
oledb32: Allow single quotation marks around property values.
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/oledb32/datainit.c | 9 +++++---- dlls/oledb32/tests/database.c | 3 +++ 2 files changed, 8 insertions(+), 4 deletions(-)
diff --git a/dlls/oledb32/datainit.c b/dlls/oledb32/datainit.c index 7401c88..7ed4099 100644 --- a/dlls/oledb32/datainit.c +++ b/dlls/oledb32/datainit.c @@ -401,18 +401,19 @@ static HRESULT parse_init_string(const WCHAR *initstring, struct dbprops *props) while (start && (eq = strchrW(start, '='))) { static const WCHAR providerW[] = {'P','r','o','v','i','d','e','r',0}; + WCHAR *delim, quote; BSTR value, name; - WCHAR *delim;
name = SysAllocStringLen(start, eq - start); /* skip equal sign to get value */ eq++;
- if (*eq == '"') + quote = (*eq == '"' || *eq == ''') ? *eq : 0; + if (quote) { /* for quoted value string, skip opening mark, look for terminating one */ eq++; - delim = strchrW(eq, '"'); + delim = strchrW(eq, quote); } else delim = strchrW(eq, ';'); @@ -422,7 +423,7 @@ static HRESULT parse_init_string(const WCHAR *initstring, struct dbprops *props) /* skip semicolon if present */ if (delim) { - if (*delim == '"') + if (*delim == quote) delim++; if (*delim == ';') delim++; diff --git a/dlls/oledb32/tests/database.c b/dlls/oledb32/tests/database.c index 8d07cd3..7f71f8b 100644 --- a/dlls/oledb32/tests/database.c +++ b/dlls/oledb32/tests/database.c @@ -295,6 +295,8 @@ static void test_database(void) static WCHAR extended_prop[] = {'d','a','t','a',' ','s','o','u','r','c','e','=','d','u','m','m','y',';', 'E','x','t','e','n','d','e','d',' ','P','r','o','p','e','r','t','i','e','s','=','"','D','R','I','V','E','R','=','A', ' ','W','i','n','e',' ','O','D','B','C',' ','d','r','i','v','e','r',';','U','I','D','=','w','i','n','e',';','"',';',0}; + static WCHAR extended_prop2[] = {'d','a','t','a',' ','s','o','u','r','c','e','=',''','d','u','m','m','y',''',';', + 'c','u','s','t','o','m','p','r','o','p','=',''','1','2','3','.','4',''',';',0}; IDataInitialize *datainit = NULL; HRESULT hr;
@@ -312,6 +314,7 @@ static void test_database(void) test_GetDataSource(initstring_lower); test_GetDataSource2(customprop); test_GetDataSource2(extended_prop); + test_GetDataSource2(extended_prop2); }
static void free_dispparams(DISPPARAMS *params)