si_WriteLine(strm, strmx, url->URLName, PR_FALSE, fullSave);
si_WriteLine(strm, strmx, nsAutoString(url->URLName), PR_FALSE, fullSave);
si_SaveSignonDataLocked(PRBool fullSave) {  si_SignonURLStruct * url;  si_SignonUserStruct * user;  si_SignonDataStruct * data;  si_Reject * reject;  /* do nothing if signon list has not changed */  if(!si_signon_list_changed) {    return(-1);  }  if (fullSave) {    si_RestartKey();    PRUnichar * message = Wallet_Localize("IncorrectKey_TryAgain?");    if (si_KeyTimedOut()) {      si_RemoveAllSignonData();    }    while (!si_SetKey()) {      if (Wallet_CancelKey() || (Wallet_KeySize() < 0) || !si_ConfirmYN(message)) {        Recycle(message);        return 1;      }    }    Recycle(message);    si_KeyResetTime();    /* do not save signons if user didn't know the key */    if (!si_KeySet()) {      return(-1);    }  }#ifdef APPLE_KEYCHAIN  if (KeychainManagerAvailable()) {    return si_SaveSignonDataInKeychain();  }#endif  /* do nothing if we are unable to open file that contains signon list */  nsFileSpec dirSpec;  nsresult rv = Wallet_ProfileDirectory(dirSpec);  if (NS_FAILED(rv)) {    return 0;  }  nsOutputFileStream strm(dirSpec + "signon.tbl");  if (!strm.is_open()) {    return 0;  }  nsOutputFileStream strmx(dirSpec + signonFileName);  if (fullSave) {    if (!strmx.is_open()) {      return 0;    }    si_RestartKey();  }  /* format for head of file shall be:   * URLName -- first url/username on reject list   * userName   * URLName -- second url/username on reject list   * userName   * ...     -- etc.   * .       -- end of list   */  /* write out reject list */  if (si_reject_list) {    PRInt32 rejectCount = LIST_COUNT(si_reject_list);    for (PRInt32 i=0; i<rejectCount; i++) {      reject = NS_STATIC_CAST(si_Reject*, si_reject_list->ElementAt(i));      si_WriteLine(strm, strmx, reject->URLName, PR_FALSE, fullSave);      si_WriteLine(strm, strmx, reject->userName, PR_FALSE, fullSave);    }  }  si_WriteLine(strm, strmx, ".", PR_FALSE, fullSave);  /* format for cached logins shall be:   * url LINEBREAK {name LINEBREAK value LINEBREAK}*  . LINEBREAK   * if type is password, name is preceded by an asterisk (*)   */  /* write out each URL node */  if((si_signon_list)) {    PRInt32 urlCount = LIST_COUNT(si_signon_list);    for (PRInt32 i2=0; i2<urlCount; i2++) {      url = NS_STATIC_CAST(si_SignonURLStruct*, si_signon_list->ElementAt(i2));      /* write out each user node of the URL node */      PRInt32 userCount = LIST_COUNT(url->signonUser_list);      for (PRInt32 i3=0; i3<userCount; i3++) {        user = NS_STATIC_CAST(si_SignonUserStruct*, url->signonUser_list->ElementAt(i3));        si_WriteLine(strm, strmx, url->URLName, PR_FALSE, fullSave);        /* write out each data node of the user node */        PRInt32 dataCount = LIST_COUNT(user->signonData_list);        for (PRInt32 i4=0; i4<dataCount; i4++) {          data = NS_STATIC_CAST(si_SignonDataStruct*, user->signonData_list->ElementAt(i4));          if (data->isPassword) {            si_WriteChar(strm, '*');            si_WriteLine(strm, strmx, data->name, PR_FALSE, fullSave);            si_WriteLine(strm, strmx, data->value, PR_TRUE, fullSave);          } else {            si_WriteLine(strm, strmx, data->name, PR_FALSE, fullSave);            si_WriteLine(strm, strmx, data->value, PR_FALSE, fullSave);          }        }        si_WriteLine(strm, strmx, ".", PR_FALSE, fullSave);      }    }  }  si_signon_list_changed = PR_FALSE;  strm.flush();  strm.close();  if (fullSave) {    strmx.flush();    strmx.close();  }  return 0;}