Nikolay Sivov : oledb32: Allow single quotation marks around property values.

Alexandre Julliard julliard at winehq.org
Thu Feb 2 15:49:26 CST 2017


Module: wine
Branch: master
Commit: 0cb665ca8a55226248deaec75c0fb562013fd604
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=0cb665ca8a55226248deaec75c0fb562013fd604

Author: Nikolay Sivov <nsivov at 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 at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at 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)




More information about the wine-cvs mailing list