if (!(*pswd = passWord.ToNewUnicode())) {
if (!(*pswd = ToNewUnicode(passWord))) {
SINGSIGN_Enumerate    (PRInt32 hostNumber, PRInt32 userNumber, char **host,     PRUnichar ** user, PRUnichar ** pswd) {  if (hostNumber > SINGSIGN_HostCount() || userNumber > SINGSIGN_UserCount(hostNumber)) {    return NS_ERROR_FAILURE;  }  si_SignonURLStruct *hostStruct;  si_SignonUserStruct * userStruct;  si_SignonDataStruct* data = nsnull;  hostStruct = NS_STATIC_CAST(si_SignonURLStruct*, si_signon_list->ElementAt(hostNumber));  NS_ASSERTION(hostStruct, "corrupt singlesignon list");  *host = (char *) nsMemory::Clone    (hostStruct->passwordRealm, nsCRT::strlen(hostStruct->passwordRealm) + 1);  NS_ENSURE_ARG_POINTER(host);  userStruct = NS_STATIC_CAST    (si_SignonUserStruct*, hostStruct->signonUser_list.ElementAt(userNumber));  /* first non-password data item for user is the username */  PRInt32 dataCount = userStruct->signonData_list.Count();  PRInt32 k;  for (k=0; k<dataCount; k++) {    data = NS_STATIC_CAST(si_SignonDataStruct *, userStruct->signonData_list.ElementAt(k));    if (!(data->isPassword)) {      break;    }  }  nsAutoString userName;  if (NS_FAILED(si_Decrypt(data->value, userName))) {    /* don't display saved signons if user couldn't unlock the database */    return NS_ERROR_FAILURE;  }  if (!(*user = userName.ToNewUnicode())) {    return NS_ERROR_OUT_OF_MEMORY;  }  /* first password data item for user is the password */  for (k=0; k<dataCount; k++) {    data = NS_STATIC_CAST(si_SignonDataStruct *, userStruct->signonData_list.ElementAt(k));    if ((data->isPassword)) {      break;    }  }  nsAutoString passWord;  if (NS_FAILED(si_Decrypt(data->value, passWord))) {    /* don't display saved signons if user couldn't unlock the database */    Recycle(*user);    return NS_ERROR_FAILURE;  }  if (!(*pswd = passWord.ToNewUnicode())) {    Recycle(*user);    return NS_ERROR_OUT_OF_MEMORY;  }  return NS_OK;}