[commit] r1272 - trunk/GME/Mga

GMESRC Repository Notifications gme-commit at list.isis.vanderbilt.edu
Mon Apr 18 10:54:58 CDT 2011


Author: ksmyth
Date: Mon Apr 18 10:54:58 2011
New Revision: 1272

Log:
BSTRs may be NULL, dont pass them to CRT functions if they are

Modified:
   trunk/GME/Mga/Mga.cpp
   trunk/GME/Mga/MgaAttribute.cpp
   trunk/GME/Mga/MgaAttribute.h
   trunk/GME/Mga/MgaTrukk.h

Modified: trunk/GME/Mga/Mga.cpp
==============================================================================
--- trunk/GME/Mga/Mga.cpp	Thu Apr 14 12:04:51 2011	(r1271)
+++ trunk/GME/Mga/Mga.cpp	Mon Apr 18 10:54:58 2011	(r1272)
@@ -100,7 +100,6 @@
 
 /////////////////////////////////////////////////////////////////////////////
 
-const CComBSTR NULLSTR;
 const CoreObj NULLCOREOBJ;
 const CComVariant NULLVARIANT;
 

Modified: trunk/GME/Mga/MgaAttribute.cpp
==============================================================================
--- trunk/GME/Mga/MgaAttribute.cpp	Thu Apr 14 12:04:51 2011	(r1271)
+++ trunk/GME/Mga/MgaAttribute.cpp	Mon Apr 18 10:54:58 2011	(r1272)
@@ -512,7 +512,9 @@
 
 
 // throws
-CoreObj findregvalueobj(CoreObj &cur, LPOLESTR obname, long &opacity, bool create) {  //returns NULL if not found
+CoreObj findregvalueobj(CoreObj &cur, LPOLESTR bstrObname, long &opacity, bool create) {  //returns NULL if not found
+	wchar_t* obname = bstrObname;
+	if (obname == NULL) obname = L"";
 	ASSERT(*obname != '/');
 	LPOLESTR endstr = wcschr(obname,'/');
 	size_t len = endstr ? endstr - obname : wcslen(obname);
@@ -548,49 +550,6 @@
 }
 
 
-
-#if(0)
-// throws
-CoreObj findregvalueobj(CoreObj &cur, LPOLESTR obname, long &opacity, bool create) {  //returns NULL if not found
-	ASSERT(*obname != '/');
-	LPOLESTR endstr = wcschr(obname,'/');
-	size_t len = endstr ? endstr - obname : wcslen(obname);
-
-	CComBSTR namesegment(len, obname);
-	VARIANT v;
-	v.vt = VT_BSTR;
-	v.bstrVal = namesegment;
-	if(CoreObj node = cur[ATTRID_REGNOWNER+ATTRID_COLLECTION].Search(ATTRID_NAME, v)) {
-		opacity |= (long)node[ATTRID_REGFLAGS];
-		if(!endstr) {
-			return node;
-		}
-		return findregvalueobj(node, endstr +1, opacity, create);
-	}
-
-	if(create) {
-		CComPtr<ICoreProject> p;
-		COMTHROW(cur->get_Project(&p));
-		CoreObj nob;
-		COMTHROW(p->CreateObject(DTID_REGNODE, &nob.ComPtr()));
-		{
-			LPOLESTR z = new OLECHAR[len+1];
-			wcsncpy(z, obname, len);
-			z[len] = '\0';
-			nob[ATTRID_NAME] = z;
-			delete z;
-		}
-		nob[ATTRID_REGFLAGS] = 0; 
-		nob[ATTRID_REGNOWNER] =  cur;
-		if(!endstr) return nob;
-		return findregvalueobj(nob, endstr +1, opacity, create);
-	}
-	return NULLCOREOBJ;
-}
-
-#endif
-
-
 class regnotifytask : public DeriveTreeTask {
 	bool Do(CoreObj self, std::vector<CoreObj> *peers = NULL) {
 		ObjForCore(self)->SelfMark(OBJEVENT_REGISTRY);
@@ -761,7 +720,7 @@
 			long dummy;
 			valueobj <<= findregvalueobj(fco->self, mypath, dummy, true);
 			load_status = ATTSTATUS_HERE;
-			valueobj[ATTRID_REGNODEVALUE] = NULLSTR;
+			valueobj[ATTRID_REGNODEVALUE] = CComBSTR();
 			valueobj[ATTRID_XREF] = CoreObj(newVal);
 			long flags = valueobj[ATTRID_REGFLAGS];
 			if(!(flags & RFLAG_HASVALUE)) valueobj[ATTRID_REGFLAGS] = flags | RFLAG_HASVALUE;
@@ -839,7 +798,7 @@
 			fco->CheckRead();
 			CHECK_OUTPTRPAR(pVal);
       
-			BSTR p = wcsrchr(mypath, L'/');
+			wchar_t* p = (mypath == NULL ? NULL : wcsrchr(mypath, L'/'));
 			if(p) {
 				CComBSTR xpath;
 				xpath.Attach(::SysAllocStringLen(mypath,p-mypath));
@@ -864,7 +823,7 @@
 */
 			long dummy;
 			valueobj <<= findregvalueobj(fco->self, mypath, dummy, true);
-			valueobj[ATTRID_REGNODEVALUE] = NULLSTR;
+			valueobj[ATTRID_REGNODEVALUE] = CComBSTR();
 			long flags = valueobj[ATTRID_REGFLAGS];
 			valueobj[ATTRID_REGFLAGS] = flags & ~RFLAG_HASVALUE;
 			load_status = ATTSTATUS_INVALID;

Modified: trunk/GME/Mga/MgaAttribute.h
==============================================================================
--- trunk/GME/Mga/MgaAttribute.h	Thu Apr 14 12:04:51 2011	(r1271)
+++ trunk/GME/Mga/MgaAttribute.h	Mon Apr 18 10:54:58 2011	(r1272)
@@ -149,7 +149,7 @@
 	STDMETHOD(get_Name)( BSTR *pVal) { 
 		COMTRY {
 			CHECK_OUTPAR(pVal);
-			LPCOLESTR p = wcsrchr(mypath, '/');
+			LPCOLESTR p = (mypath == NULL ? NULL : wcsrchr(mypath, '/'));
 			if(p) p += 1; // skip '/'
 			else p = mypath;
 			CComBSTR rval(p);

Modified: trunk/GME/Mga/MgaTrukk.h
==============================================================================
--- trunk/GME/Mga/MgaTrukk.h	Thu Apr 14 12:04:51 2011	(r1271)
+++ trunk/GME/Mga/MgaTrukk.h	Mon Apr 18 10:54:58 2011	(r1272)
@@ -5,9 +5,7 @@
 #include "CommonMgaTrukk.h"
 
 #define DIM(x) (sizeof(x)/ sizeof((x)[0]))
-#define PUTINCLEAN(x) ((x) = NULL, &(x))
 
-extern const CComBSTR NULLSTR;
 extern const CoreObj NULLCOREOBJ;
 extern const CComVariant NULLVARIANT;
 
@@ -64,7 +62,8 @@
 //by ZolMol
 #define CHECK_MYINPTRSPARFOLDER(p) { if(p == NULL)				 COMTHROW( E_MGA_INPTR_NULL); \
 								COMTHROW( mgaproject->CheckFolderCollection(p)); }
-#define CHECK_INSTRPAR(p)	 { if(p == NULL)			p = NULLSTR; }
+// KMS: was "if(p == NULL) p = NULLSTR", but starting with VS2003, that does nothing since NULLSTR.m_str==NULL
+#define CHECK_INSTRPAR(p)	 { }
 #define CHECK_OUTSTRPAR(p)   { if(p == NULL) COMTHROW(E_MGA_OUTPTR_NULL); if(*p != NULL) COMTHROW(E_MGA_OUTPTR_NONEMPTY); }
 #define CHECK_OUTPTRPAR(p)   { if(p == NULL) COMTHROW(E_MGA_OUTPTR_NULL); if(*p != NULL) COMTHROW(E_MGA_OUTPTR_NONEMPTY); }
 #define CHECK_OUTPTRPARVALIDNULL(p)  { if(p != NULL && *p != NULL) COMTHROW(E_MGA_OUTPTR_NONEMPTY); }


More information about the gme-commit mailing list