From f1e9dcb75e91b410847ae2b3e99ea2ea225692af Mon Sep 17 00:00:00 2001 From: Alessandro Bonazzi Date: Wed, 12 Aug 2020 14:24:37 +0200 Subject: [PATCH] Patch level : 12.0 no-patch Files correlati : Commento : xml.ccp Aggiunto Append e corretta SetAttr msksheet.cpp modificata delete in safe_delete --- src/include/msksheet.cpp | 15 +++++++-------- src/include/recarray.cpp | 5 ++++- src/include/rectypes.h | 2 +- src/include/xml.cpp | 16 +++++++++++++++- src/include/xml.h | 1 + 5 files changed, 28 insertions(+), 11 deletions(-) diff --git a/src/include/msksheet.cpp b/src/include/msksheet.cpp index 75f39c447..2020f536a 100755 --- a/src/include/msksheet.cpp +++ b/src/include/msksheet.cpp @@ -2939,10 +2939,9 @@ bool TSheet_field::is_kind_of(word cid) const // Certified 100% TSheet_field::~TSheet_field() { - if (_sheetfile!=NULL) - delete _sheetfile; - if (_linee_rec!=NULL && !_external_record) - delete _linee_rec; + safe_delete(_sheetfile); + if (!_external_record) + safe_delete(_linee_rec); } @@ -3899,8 +3898,8 @@ void TSheet_field::check_row(int n, int mode) // Certified: ...under debug.. void TSheet_field::set_lines_record(TRecord_array & r_a) { - if (_linee_rec && !_external_record) - delete _linee_rec; + if (!_external_record) + safe_delete(_linee_rec); _linee_rec= & r_a; _external_record = true; // il record attuale è esterno... } @@ -3933,7 +3932,7 @@ TRectype* TSheet_field::putkey(const TRelation& r) } return &_sheetfile->curr(); } - return NULL; + return nullptr; } // Certified: ...under debug.. @@ -3989,7 +3988,7 @@ bool TSheet_field::autoload(const TRelation& rel) for (int i = 1; i <= last_line; i++) autoload_line(i,_linee_rec->row(i, true)); - return(0); + return false; } return _enable_autoload; } diff --git a/src/include/recarray.cpp b/src/include/recarray.cpp index ba7b728ee..0cdf0dcaa 100755 --- a/src/include/recarray.cpp +++ b/src/include/recarray.cpp @@ -358,12 +358,15 @@ int TRecord_array::read(TRectype* filter) #endif _data.destroy(); - set_key(filter); + set_key(filter); + int err = NOERR; + if (!filter->empty()) { TLocalisamfile f(_file); TRectype* rec = (TRectype*)filter->dup(); + err = rec->read(f, _isgteq); for (int e = err; e == NOERR && good(*rec); e = rec->next(f)) { diff --git a/src/include/rectypes.h b/src/include/rectypes.h index 287efda13..e8f798629 100755 --- a/src/include/rectypes.h +++ b/src/include/rectypes.h @@ -96,7 +96,7 @@ enum TIsamerr { _islocked = 225, // @emem Record bloccato _isbadtrc = 226, // @emem Tracciato Record errato o mancante _istrcerr = 227, // @emem Tracciato record incoerente - _isnowarning = 86552 // @emem Il messaggio di errore è già stato visualizzato + _isnowarning = 86552 // @emem Il messaggio di errore è già stato visualizzato - Doppia puttanata di Mattia Tollari per l'idea e per il valore }; typedef long TRecnotype; diff --git a/src/include/xml.cpp b/src/include/xml.cpp index 932aa8825..5fb219f5e 100755 --- a/src/include/xml.cpp +++ b/src/include/xml.cpp @@ -1,6 +1,7 @@ #include #include #include +#include #include #include @@ -142,7 +143,7 @@ TXmlItem& TXmlItem::SetAttr(const char* strAttr, const char* strVal) if (m_Attributes == NULL) m_Attributes = new TAssoc_array; m_Attributes->remove(strAttr); - if (strVal && *strVal) + if (strVal) m_Attributes->add(strAttr, new TXmlAttr(strVal)); return *this; } @@ -518,7 +519,11 @@ void TXmlItem::AsString(TString& str) const { char* buf = str.get_buffer(nSize); memset(buf, 0, nSize); +#ifdef WIN32 ostrstream outf(buf, nSize); +#else + ostringstream outf(buf); +#endif Write(outf, 0); if (buf[nSize-1] == '\0') @@ -532,6 +537,15 @@ void TXmlItem::Save(const char* strFilename) const Write(outf, 0); } +void TXmlItem::Append(const char* strFilename) const +{ + bool AppendToExisting = fexist(strFilename); + ofstream outf; + + outf.open(strFilename, ios::app); + Write(outf, AppendToExisting); +} + bool TXmlItem::Load(const char* strFilename) { bool ok = false; diff --git a/src/include/xml.h b/src/include/xml.h index ee016509b..36e760ad5 100755 --- a/src/include/xml.h +++ b/src/include/xml.h @@ -67,6 +67,7 @@ public: void Save(const char* strFilename) const; bool Load(const char* strFilename); + void Append(const char* strFilename) const; TXmlItem* ForEach(XmlItemCallback cb, long jolly = 0); TXmlItem* FindFirst(const char* strTag) const; // Recursive