char* keyCStr = keyAdjustedLengthBuff.ToNewCString(); char* valCStr = valAdjustedLengthBuff.ToNewCString();
char* keyCStr = ToNewCString(keyAdjustedLengthBuff); char* valCStr = ToNewCString(valAdjustedLengthBuff);
main(int argc, char* argv[]){#ifndef XPCOM_STANDALONE  nsresult ret;  NS_SetupRegistry();   nsIInputStream* in = nsnull;  nsCOMPtr<nsIIOService> service(do_GetService(kIOServiceCID, &ret));  if (NS_FAILED(ret)) return ret;  nsCOMPtr<nsIEventQueueService> eventQService =            do_GetService(kEventQueueServiceCID, &ret);  if (NS_FAILED(ret)) return ret;  nsIChannel *channel = nsnull;  ret = service->NewChannel(TEST_URL, nsnull, &channel);  if (NS_FAILED(ret)) return ret;  nsIEventQueue *eventQ = nsnull;  ret = eventQService->GetThreadEventQueue(NS_CURRENT_THREAD, &eventQ);  if (NS_FAILED(ret)) return ret;  ret = channel->Open(&in);  if (NS_FAILED(ret)) return ret;  nsIPersistentProperties* props = nsnull;  ret = nsComponentManager::CreateInstance(kPersistentPropertiesCID, NULL,    NS_GET_IID(nsIPersistentProperties), (void**) &props);  if (NS_FAILED(ret) || (!props)) {    printf("create nsIPersistentProperties failed\n");    return 1;  }  ret = props->Load(in);  if (NS_FAILED(ret)) {    printf("cannot load properties\n");    return 1;  }  int i = 1;  while (1) {    char name[16];    name[0] = 0;    sprintf(name, "%d", i);    nsAutoString v;    ret = props->GetStringProperty(NS_ConvertASCIItoUCS2(name), v);    if (NS_FAILED(ret) || (!v.Length())) {      break;    }    char* value = v.ToNewCString();    if (value) {      cout << "\"" << i << "\"=\"" << value << "\"" << endl;      delete[] value;    }    else {      printf("%d: ToNewCString failed\n", i);    }    i++;  }  nsIBidirectionalEnumerator* propEnum = nsnull;  ret = props->EnumerateProperties(&propEnum);  if (NS_FAILED(ret)) {	printf("cannot enumerate properties\n");	return 1;  }  ret = propEnum->First();  if (NS_FAILED(ret))  {	printf("enumerator is empty\n");	return 1;  }  cout << endl << "Key" << "\t" << "Value" << endl;  cout <<		  "---" << "\t" << "-----" << endl;  while (NS_SUCCEEDED(ret))  {	  nsIPropertyElement* propElem = nsnull;	  ret = propEnum->CurrentItem((nsISupports**)&propElem);	  if (NS_FAILED(ret)) {		printf("failed to get current item\n");		return 1;	  }    PRUnichar *pKey = nsnull;    PRUnichar *pVal = nsnull;	  ret = propElem->GetKey(&pKey);	  if (NS_FAILED(ret)) {		  printf("failed to get current element's key\n");		  return 1;	  }	  ret = propElem->GetValue(&pVal);	  if (NS_FAILED(ret)) {		  printf("failed to get current element's value\n");		  return 1;	  }    nsAutoString keyAdjustedLengthBuff(pKey);    nsAutoString valAdjustedLengthBuff(pVal);	  char* keyCStr = keyAdjustedLengthBuff.ToNewCString();	  char* valCStr = valAdjustedLengthBuff.ToNewCString();	  if (keyCStr && valCStr) 		cout << keyCStr << "\t" << valCStr << endl;	  delete[] keyCStr;	  delete[] valCStr;    delete[] pKey;    delete[] pVal;	  ret = propEnum->Next();  }#endif  return 0;}