[fdo-internals] PATCH: OGR provider does not accept directory datasources with trailing slash

Kenneth, GEOGRAF A/S ks at geograf.dk
Fri Apr 4 04:06:34 EDT 2008


I have built an editor for the OGR provider in my MapStudio OS project.
I noticed that the OGR provider does not accept the %MG_DATA_FILE_PATH% 
parameter but does accept another path.
After digging around, I found out that OGR rejects directories as 
datasources, if they have a trailing slash.
This prevents using the entire repository storage as a datasource, so I 
made a small patch that removes a trailing slash, if any.

There should be no compatibility issuses, as none of the other types of 
connectionstrings are likely to end with a backslash.

-- 
Regards, Kenneth, GEOGRAF A/S


-------------- next part --------------
Index: OgrProvider.cpp
===================================================================
--- OgrProvider.cpp	(revision 3830)
+++ OgrProvider.cpp	(working copy)
@@ -176,14 +176,24 @@
     const wchar_t* dsw = GetProperty(PROP_NAME_DATASOURCE);
     bool readonly = _wcsnicmp(GetProperty(PROP_NAME_READONLY), L"TRUE", 4) == 0;
     
-    W2A(dsw);
+    size_t slen = wcslen(dsw);
+    if (dsw[slen - 1] == '\\')
+       slen--;
+
+    wchar_t* tmp = new wchar_t[slen + 1];
+    wcsncpy(tmp, dsw, slen);
+    tmp[slen] = 0;
+
+    W2A(tmp);
+
+    delete tmp;
     
 #if DEBUG
-    printf ("Attempt OGR connect to %s \n", mbdsw);
+    printf ("Attempt OGR connect to %s \n", mbtmp);
     printf ("ReadOnly %d\n", (int)readonly);
 #endif
     
-    m_poDS = OGRSFDriverRegistrar::Open(mbdsw, !readonly);
+    m_poDS = OGRSFDriverRegistrar::Open(mbtmp, !readonly);
     if( m_poDS == NULL )
     {
         std::string str = "Connect failed: "; 


More information about the fdo-internals mailing list