char* value = ToNewCString(v); if (value) { printf("\"%d\"=\"%s\"\n", i, value); delete[] value; } else { printf("%d: ToNewCString failed\n", i); }
printf("\"%d\"=\"%s\"\n", i, NS_ConvertUTF16toUTF8(v).get());
main(int argc, char* argv[]){  if (test_common_init(&argc, &argv) != 0)    return -1;  nsresult ret;  nsCOMPtr<nsIServiceManager> servMan;  NS_InitXPCOM2(getter_AddRefs(servMan), nsnull, nsnull);  nsCOMPtr<nsIComponentRegistrar> registrar = do_QueryInterface(servMan);  NS_ASSERTION(registrar, "Null nsIComponentRegistrar");  registrar->AutoRegister(nsnull);  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(NS_LITERAL_CSTRING(TEST_URL), nsnull, 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;  ret = CallCreateInstance(kPersistentPropertiesCID, &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(nsDependentCString(name), v);    if (NS_FAILED(ret) || (!v.Length())) {      break;    }    char* value = ToNewCString(v);    if (value) {      printf("\"%d\"=\"%s\"\n", i, value);      delete[] value;    }    else {      printf("%d: ToNewCString failed\n", i);    }    i++;  }  nsCOMPtr<nsISimpleEnumerator> propEnum;  ret = props->Enumerate(getter_AddRefs(propEnum));  if (NS_FAILED(ret)) {    printf("cannot enumerate properties\n");    return 1;  }    printf("\nKey\tValue\n");  printf(  "---\t-----\n");    PRBool hasMore;  while (NS_SUCCEEDED(propEnum->HasMoreElements(&hasMore)) &&         hasMore) {    nsCOMPtr<nsISupports> sup;    ret = propEnum->GetNext(getter_AddRefs(sup));        nsCOMPtr<nsIPropertyElement> propElem = do_QueryInterface(sup, &ret);	  if (NS_FAILED(ret)) {      printf("failed to get current item\n");      return 1;	  }    nsCAutoString key;    nsAutoString value;    ret = propElem->GetKey(key);	  if (NS_FAILED(ret)) {		  printf("failed to get current element's key\n");		  return 1;	  }    ret = propElem->GetValue(value);	  if (NS_FAILED(ret)) {		  printf("failed to get current element's value\n");		  return 1;	  }    printf("%s\t%s\n", key.get(), NS_ConvertUTF16toUTF8(value).get());  }  return 0;}