PRUnichar *key = aKey.ToNewUnicode();
const PRUnichar *key = aKey.GetUnicode();
nsProperties::SetProperty(const nsString& aKey, nsString& aNewValue,  nsString& aOldValue){  // XXX The ToNewCString() calls allocate memory using "new" so this code  // causes a memory leak...#if 0  cout << "will add " << aKey.ToNewCString() << "=" << aNewValue.ToNewCString() << endl;#endif  if (!mTable) {    mTable = PL_NewHashTable(8, (PLHashFunction) HashKey,      (PLHashComparator) CompareKeys,      (PLHashComparator) nsnull, nsnull, nsnull);    if (!mTable) {      return NS_ERROR_OUT_OF_MEMORY;    }  }  PRUnichar *key = aKey.ToNewUnicode();  PRUint32 len;  PRUint32 hashValue = nsCRT::HashValue(key, &len);  PLHashEntry **hep = PL_HashTableRawLookup(mTable, hashValue, key);  PLHashEntry *he = *hep;  if (he && aOldValue) {    // XXX fix me  }  PL_HashTableRawAdd(mTable, hep, hashValue, key, aNewValue.ToNewString());  return NS_OK;}