]> git.sesse.net Git - vlc/blobdiff - activex/persiststreaminit.cpp
Qt4 - VLM dialog rework.
[vlc] / activex / persiststreaminit.cpp
index c62736e9434c36bc1002aa0fd19f52a4065aab4d..0660566fca2911c1edc763b0181625524a0dff7e 100644 (file)
@@ -17,7 +17,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
  *****************************************************************************/
 
 #include "plugin.h"
@@ -31,7 +31,7 @@
 
 using namespace std;
 
-class AxVLCVariant 
+class AxVLCVariant
 {
 
 public:
@@ -48,9 +48,8 @@ public:
 
     AxVLCVariant(VARIANTARG &v)
     {
-        //VariantInit(&_v);
-        //VariantCopy(&_v, &v);
-        _v = v;
+        VariantInit(&_v);
+        VariantCopy(&_v, &v);
     };
 
     AxVLCVariant(VARIANTARG *v)
@@ -76,6 +75,7 @@ public:
         VARIANT arg;
         V_VT(&arg) = VT_BSTR;
         V_BSTR(&arg) = bstr;
+        VariantInit(&_v);
         VariantCopy(&_v, &arg);
     };
 
@@ -95,7 +95,7 @@ private:
     VARIANTARG _v;
 };
 
-class AxVLCWSTR 
+class AxVLCWSTR
 {
 
 public:
@@ -153,7 +153,8 @@ public:
 
     inline bool operator==(const AxVLCWSTR &s) const
     {
-        return compareNoCase(s.wstr()) == 0;
+        return size() == s.size() ?
+                    (compareNoCase(s.wstr()) == 0) : false;
     };
 
     inline bool operator==(LPCWSTR s) const
@@ -210,8 +211,8 @@ public:
     {
         if( NULL == ppv )
             return E_POINTER;
-        if( (IID_IUnknown == riid) 
-         && (IID_IPropertyBag == riid) )
+        if( (IID_IUnknown == riid)
+         || (IID_IPropertyBag == riid) )
         {
             AddRef();
             *ppv = reinterpret_cast<LPVOID>(this);
@@ -247,18 +248,21 @@ public:
         if( notfound != iter )
         {
             VARTYPE vtype = V_VT(pVar);
-            VariantCopy(pVar, const_cast<VARIANTARG*>((*iter).second.variantArg()));
-            if( (V_VT(pVar) != vtype) && FAILED(VariantChangeType(pVar, pVar, 0, vtype)) )
+            VARIANTARG v;
+            VariantInit(&v);
+            VariantCopy(&v, const_cast<VARIANTARG*>((*iter).second.variantArg()));
+            if( (V_VT(&v) != vtype) && FAILED(VariantChangeType(&v, &v, 0, vtype)) )
             {
-                VariantClear(pVar);
+                VariantClear(&v);
                 return E_FAIL;
             }
+            *pVar = v;
             return S_OK;
         }
         else
             return E_INVALIDARG;
     };
-    
     STDMETHODIMP Write(LPCOLESTR pszPropName, VARIANT *pVar)
     {
         if( (NULL == pszPropName) || (NULL == pVar) )
@@ -271,7 +275,7 @@ public:
             (*p.first).second = val.second;
         return S_OK;
     };
-   
+
     // custom methods
 
     HRESULT Load(LPSTREAM pStm)
@@ -287,7 +291,7 @@ public:
         {
             if( (val->first == L"(Count)") && (VT_I4 == V_VT(val->second.variantArg())) )
             {
-                size_t count =  V_I4(val->second.variantArg());
+                size_t count = V_I4(val->second.variantArg());
                 delete val;
                 while( count-- )
                 {
@@ -385,7 +389,7 @@ private:
                 if( FAILED(result) )
                     return result;
                 if( len > 0 )
-                { 
+                {
                     result = pStm->Write(V_BSTR(propValue), len*sizeof(OLECHAR), NULL);
                     if( FAILED(result) )
                         return result;
@@ -400,7 +404,7 @@ private:
         return result;
     };
 
-    static HRESULT ReadProperty(LPSTREAM pStm, AxVLCPropertyPair **prop)
+    HRESULT ReadProperty(LPSTREAM pStm, AxVLCPropertyPair **prop)
     {
         HRESULT result;
 
@@ -546,7 +550,7 @@ STDMETHODIMP VLCPersistStreamInit::IsDirty(void)
 STDMETHODIMP VLCPersistStreamInit::GetSizeMax(ULARGE_INTEGER *pcbSize)
 {
     pcbSize->HighPart = 0UL;
-    pcbSize->LowPart  = 4096UL; // just a guess
+    pcbSize->LowPart  = 16384UL; // just a guess
 
     return S_OK;
 };