summaryrefslogtreecommitdiff
authorzecke <zecke>2003-05-07 16:01:45 (UTC)
committer zecke <zecke>2003-05-07 16:01:45 (UTC)
commitef9b40f99443fabed972d29ce47c2ccb29e77210 (patch) (unidiff)
tree920e5b1c5807ca931e86425092d13429029ebe65
parentfd0b11fbfe36e87845df9282bb4ed090c7f51d35 (diff)
downloadopie-ef9b40f99443fabed972d29ce47c2ccb29e77210.zip
opie-ef9b40f99443fabed972d29ce47c2ccb29e77210.tar.gz
opie-ef9b40f99443fabed972d29ce47c2ccb29e77210.tar.bz2
Prevent mem corruption
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--libopie/pim/oevent.cpp14
-rw-r--r--libopie2/opiepim/oevent.cpp14
2 files changed, 20 insertions, 8 deletions
diff --git a/libopie/pim/oevent.cpp b/libopie/pim/oevent.cpp
index 56ea10d..3ba8a52 100644
--- a/libopie/pim/oevent.cpp
+++ b/libopie/pim/oevent.cpp
@@ -181,141 +181,147 @@ QDateTime OEvent::endDateTime()const {
181 return data->end; 181 return data->end;
182} 182}
183QDateTime OEvent::endDateTimeInZone()const { 183QDateTime OEvent::endDateTimeInZone()const {
184 /* if no timezone, or all day event or if the current and this timeZone match... */ 184 /* if no timezone, or all day event or if the current and this timeZone match... */
185 if (data->timezone.isEmpty() || data->isAllDay || data->timezone == OTimeZone::current().timeZone() ) return endDateTime(); 185 if (data->timezone.isEmpty() || data->isAllDay || data->timezone == OTimeZone::current().timeZone() ) return endDateTime();
186 186
187 OTimeZone zone(data->timezone ); 187 OTimeZone zone(data->timezone );
188 return zone.toDateTime( data->end, OTimeZone::current() ); 188 return zone.toDateTime( data->end, OTimeZone::current() );
189} 189}
190void OEvent::setEndDateTime( const QDateTime& dt ) { 190void OEvent::setEndDateTime( const QDateTime& dt ) {
191 changeOrModify(); 191 changeOrModify();
192 data->end = dt; 192 data->end = dt;
193} 193}
194bool OEvent::isMultipleDay()const { 194bool OEvent::isMultipleDay()const {
195 return data->end.date().day() - data->start.date().day(); 195 return data->end.date().day() - data->start.date().day();
196} 196}
197bool OEvent::isAllDay()const { 197bool OEvent::isAllDay()const {
198 return data->isAllDay; 198 return data->isAllDay;
199} 199}
200void OEvent::setAllDay( bool allDay ) { 200void OEvent::setAllDay( bool allDay ) {
201 changeOrModify(); 201 changeOrModify();
202 data->isAllDay = allDay; 202 data->isAllDay = allDay;
203 if (allDay ) data->timezone = "UTC"; 203 if (allDay ) data->timezone = "UTC";
204} 204}
205void OEvent::setTimeZone( const QString& tz ) { 205void OEvent::setTimeZone( const QString& tz ) {
206 changeOrModify(); 206 changeOrModify();
207 data->timezone = tz; 207 data->timezone = tz;
208} 208}
209QString OEvent::timeZone()const { 209QString OEvent::timeZone()const {
210 if (data->isAllDay ) return QString::fromLatin1("UTC"); 210 if (data->isAllDay ) return QString::fromLatin1("UTC");
211 return data->timezone; 211 return data->timezone;
212} 212}
213bool OEvent::match( const QRegExp& )const { 213bool OEvent::match( const QRegExp& )const {
214 // FIXME 214 // FIXME
215 return false; 215 return false;
216} 216}
217QString OEvent::toRichText()const { 217QString OEvent::toRichText()const {
218 // FIXME 218 // FIXME
219 return "OEvent test"; 219 return "OEvent test";
220} 220}
221QString OEvent::toShortText()const { 221QString OEvent::toShortText()const {
222 return "OEvent shotText"; 222 return "OEvent shotText";
223} 223}
224QString OEvent::type()const { 224QString OEvent::type()const {
225 return QString::fromLatin1("OEvent"); 225 return QString::fromLatin1("OEvent");
226} 226}
227QString OEvent::recordField( int /*id */ )const { 227QString OEvent::recordField( int /*id */ )const {
228 return QString::null; 228 return QString::null;
229} 229}
230int OEvent::rtti() { 230int OEvent::rtti() {
231 return OPimResolver::DateBook; 231 return OPimResolver::DateBook;
232} 232}
233bool OEvent::loadFromStream( QDataStream& ) { 233bool OEvent::loadFromStream( QDataStream& ) {
234 return true; 234 return true;
235} 235}
236bool OEvent::saveToStream( QDataStream& )const { 236bool OEvent::saveToStream( QDataStream& )const {
237 return true; 237 return true;
238} 238}
239void OEvent::changeOrModify() { 239void OEvent::changeOrModify() {
240 if ( data->count != 1 ) { 240 if ( data->count != 1 ) {
241 data->deref(); 241 data->deref();
242 Data* d2 = new Data; 242 Data* d2 = new Data;
243 d2->description = data->description; 243 d2->description = data->description;
244 d2->location = data->location; 244 d2->location = data->location;
245 d2->manager = data->manager; 245
246 d2->recur = data->recur; 246 if (data->manager )
247 d2->manager = new OPimNotifyManager( *data->manager );
248
249 if ( data->recur )
250 d2->recur = new ORecur( *data->recur );
251
247 d2->note = data->note; 252 d2->note = data->note;
248 d2->created = data->created; 253 d2->created = data->created;
249 d2->start = data->start; 254 d2->start = data->start;
250 d2->end = data->end; 255 d2->end = data->end;
251 d2->isAllDay = data->isAllDay; 256 d2->isAllDay = data->isAllDay;
252 d2->timezone = data->timezone; 257 d2->timezone = data->timezone;
253 d2->parent = data->parent; 258 d2->parent = data->parent;
254 d2->child = data->child;
255 259
256 if (d2->child ) 260 if ( data->child ) {
261 d2->child = new QArray<int>( *data->child );
257 d2->child->detach(); 262 d2->child->detach();
263 }
258 264
259 data = d2; 265 data = d2;
260 } 266 }
261} 267}
262void OEvent::deref() { 268void OEvent::deref() {
263 if ( data->deref() ) { 269 if ( data->deref() ) {
264 delete data; 270 delete data;
265 data = 0; 271 data = 0;
266 } 272 }
267} 273}
268// FIXME 274// FIXME
269QMap<int, QString> OEvent::toMap()const { 275QMap<int, QString> OEvent::toMap()const {
270 return QMap<int, QString>(); 276 return QMap<int, QString>();
271} 277}
272QMap<QString, QString> OEvent::toExtraMap()const { 278QMap<QString, QString> OEvent::toExtraMap()const {
273 return QMap<QString, QString>(); 279 return QMap<QString, QString>();
274} 280}
275int OEvent::parent()const { 281int OEvent::parent()const {
276 return data->parent; 282 return data->parent;
277} 283}
278void OEvent::setParent( int uid ) { 284void OEvent::setParent( int uid ) {
279 changeOrModify(); 285 changeOrModify();
280 data->parent = uid; 286 data->parent = uid;
281} 287}
282QArray<int> OEvent::children() const{ 288QArray<int> OEvent::children() const{
283 if (!data->child) return QArray<int>(); 289 if (!data->child) return QArray<int>();
284 else 290 else
285 return data->child->copy(); 291 return data->child->copy();
286} 292}
287void OEvent::setChildren( const QArray<int>& arr ) { 293void OEvent::setChildren( const QArray<int>& arr ) {
288 changeOrModify(); 294 changeOrModify();
289 if (data->child) delete data->child; 295 if (data->child) delete data->child;
290 296
291 data->child = new QArray<int>( arr ); 297 data->child = new QArray<int>( arr );
292 data->child->detach(); 298 data->child->detach();
293} 299}
294void OEvent::addChild( int uid ) { 300void OEvent::addChild( int uid ) {
295 changeOrModify(); 301 changeOrModify();
296 if (!data->child ) { 302 if (!data->child ) {
297 data->child = new QArray<int>(1); 303 data->child = new QArray<int>(1);
298 (*data->child)[0] = uid; 304 (*data->child)[0] = uid;
299 }else{ 305 }else{
300 int count = data->child->count(); 306 int count = data->child->count();
301 data->child->resize( count + 1 ); 307 data->child->resize( count + 1 );
302 (*data->child)[count] = uid; 308 (*data->child)[count] = uid;
303 } 309 }
304} 310}
305void OEvent::removeChild( int uid ) { 311void OEvent::removeChild( int uid ) {
306 if (!data->child || !data->child->contains( uid ) ) return; 312 if (!data->child || !data->child->contains( uid ) ) return;
307 changeOrModify(); 313 changeOrModify();
308 QArray<int> newAr( data->child->count() - 1 ); 314 QArray<int> newAr( data->child->count() - 1 );
309 int j = 0; 315 int j = 0;
310 uint count = data->child->count(); 316 uint count = data->child->count();
311 for ( uint i = 0; i < count; i++ ) { 317 for ( uint i = 0; i < count; i++ ) {
312 if ( (*data->child)[i] != uid ) { 318 if ( (*data->child)[i] != uid ) {
313 newAr[j] = (*data->child)[i]; 319 newAr[j] = (*data->child)[i];
314 j++; 320 j++;
315 } 321 }
316 } 322 }
317 (*data->child) = newAr; 323 (*data->child) = newAr;
318} 324}
319struct OEffectiveEvent::Data : public QShared { 325struct OEffectiveEvent::Data : public QShared {
320 Data() : QShared() { 326 Data() : QShared() {
321 } 327 }
diff --git a/libopie2/opiepim/oevent.cpp b/libopie2/opiepim/oevent.cpp
index 56ea10d..3ba8a52 100644
--- a/libopie2/opiepim/oevent.cpp
+++ b/libopie2/opiepim/oevent.cpp
@@ -181,141 +181,147 @@ QDateTime OEvent::endDateTime()const {
181 return data->end; 181 return data->end;
182} 182}
183QDateTime OEvent::endDateTimeInZone()const { 183QDateTime OEvent::endDateTimeInZone()const {
184 /* if no timezone, or all day event or if the current and this timeZone match... */ 184 /* if no timezone, or all day event or if the current and this timeZone match... */
185 if (data->timezone.isEmpty() || data->isAllDay || data->timezone == OTimeZone::current().timeZone() ) return endDateTime(); 185 if (data->timezone.isEmpty() || data->isAllDay || data->timezone == OTimeZone::current().timeZone() ) return endDateTime();
186 186
187 OTimeZone zone(data->timezone ); 187 OTimeZone zone(data->timezone );
188 return zone.toDateTime( data->end, OTimeZone::current() ); 188 return zone.toDateTime( data->end, OTimeZone::current() );
189} 189}
190void OEvent::setEndDateTime( const QDateTime& dt ) { 190void OEvent::setEndDateTime( const QDateTime& dt ) {
191 changeOrModify(); 191 changeOrModify();
192 data->end = dt; 192 data->end = dt;
193} 193}
194bool OEvent::isMultipleDay()const { 194bool OEvent::isMultipleDay()const {
195 return data->end.date().day() - data->start.date().day(); 195 return data->end.date().day() - data->start.date().day();
196} 196}
197bool OEvent::isAllDay()const { 197bool OEvent::isAllDay()const {
198 return data->isAllDay; 198 return data->isAllDay;
199} 199}
200void OEvent::setAllDay( bool allDay ) { 200void OEvent::setAllDay( bool allDay ) {
201 changeOrModify(); 201 changeOrModify();
202 data->isAllDay = allDay; 202 data->isAllDay = allDay;
203 if (allDay ) data->timezone = "UTC"; 203 if (allDay ) data->timezone = "UTC";
204} 204}
205void OEvent::setTimeZone( const QString& tz ) { 205void OEvent::setTimeZone( const QString& tz ) {
206 changeOrModify(); 206 changeOrModify();
207 data->timezone = tz; 207 data->timezone = tz;
208} 208}
209QString OEvent::timeZone()const { 209QString OEvent::timeZone()const {
210 if (data->isAllDay ) return QString::fromLatin1("UTC"); 210 if (data->isAllDay ) return QString::fromLatin1("UTC");
211 return data->timezone; 211 return data->timezone;
212} 212}
213bool OEvent::match( const QRegExp& )const { 213bool OEvent::match( const QRegExp& )const {
214 // FIXME 214 // FIXME
215 return false; 215 return false;
216} 216}
217QString OEvent::toRichText()const { 217QString OEvent::toRichText()const {
218 // FIXME 218 // FIXME
219 return "OEvent test"; 219 return "OEvent test";
220} 220}
221QString OEvent::toShortText()const { 221QString OEvent::toShortText()const {
222 return "OEvent shotText"; 222 return "OEvent shotText";
223} 223}
224QString OEvent::type()const { 224QString OEvent::type()const {
225 return QString::fromLatin1("OEvent"); 225 return QString::fromLatin1("OEvent");
226} 226}
227QString OEvent::recordField( int /*id */ )const { 227QString OEvent::recordField( int /*id */ )const {
228 return QString::null; 228 return QString::null;
229} 229}
230int OEvent::rtti() { 230int OEvent::rtti() {
231 return OPimResolver::DateBook; 231 return OPimResolver::DateBook;
232} 232}
233bool OEvent::loadFromStream( QDataStream& ) { 233bool OEvent::loadFromStream( QDataStream& ) {
234 return true; 234 return true;
235} 235}
236bool OEvent::saveToStream( QDataStream& )const { 236bool OEvent::saveToStream( QDataStream& )const {
237 return true; 237 return true;
238} 238}
239void OEvent::changeOrModify() { 239void OEvent::changeOrModify() {
240 if ( data->count != 1 ) { 240 if ( data->count != 1 ) {
241 data->deref(); 241 data->deref();
242 Data* d2 = new Data; 242 Data* d2 = new Data;
243 d2->description = data->description; 243 d2->description = data->description;
244 d2->location = data->location; 244 d2->location = data->location;
245 d2->manager = data->manager; 245
246 d2->recur = data->recur; 246 if (data->manager )
247 d2->manager = new OPimNotifyManager( *data->manager );
248
249 if ( data->recur )
250 d2->recur = new ORecur( *data->recur );
251
247 d2->note = data->note; 252 d2->note = data->note;
248 d2->created = data->created; 253 d2->created = data->created;
249 d2->start = data->start; 254 d2->start = data->start;
250 d2->end = data->end; 255 d2->end = data->end;
251 d2->isAllDay = data->isAllDay; 256 d2->isAllDay = data->isAllDay;
252 d2->timezone = data->timezone; 257 d2->timezone = data->timezone;
253 d2->parent = data->parent; 258 d2->parent = data->parent;
254 d2->child = data->child;
255 259
256 if (d2->child ) 260 if ( data->child ) {
261 d2->child = new QArray<int>( *data->child );
257 d2->child->detach(); 262 d2->child->detach();
263 }
258 264
259 data = d2; 265 data = d2;
260 } 266 }
261} 267}
262void OEvent::deref() { 268void OEvent::deref() {
263 if ( data->deref() ) { 269 if ( data->deref() ) {
264 delete data; 270 delete data;
265 data = 0; 271 data = 0;
266 } 272 }
267} 273}
268// FIXME 274// FIXME
269QMap<int, QString> OEvent::toMap()const { 275QMap<int, QString> OEvent::toMap()const {
270 return QMap<int, QString>(); 276 return QMap<int, QString>();
271} 277}
272QMap<QString, QString> OEvent::toExtraMap()const { 278QMap<QString, QString> OEvent::toExtraMap()const {
273 return QMap<QString, QString>(); 279 return QMap<QString, QString>();
274} 280}
275int OEvent::parent()const { 281int OEvent::parent()const {
276 return data->parent; 282 return data->parent;
277} 283}
278void OEvent::setParent( int uid ) { 284void OEvent::setParent( int uid ) {
279 changeOrModify(); 285 changeOrModify();
280 data->parent = uid; 286 data->parent = uid;
281} 287}
282QArray<int> OEvent::children() const{ 288QArray<int> OEvent::children() const{
283 if (!data->child) return QArray<int>(); 289 if (!data->child) return QArray<int>();
284 else 290 else
285 return data->child->copy(); 291 return data->child->copy();
286} 292}
287void OEvent::setChildren( const QArray<int>& arr ) { 293void OEvent::setChildren( const QArray<int>& arr ) {
288 changeOrModify(); 294 changeOrModify();
289 if (data->child) delete data->child; 295 if (data->child) delete data->child;
290 296
291 data->child = new QArray<int>( arr ); 297 data->child = new QArray<int>( arr );
292 data->child->detach(); 298 data->child->detach();
293} 299}
294void OEvent::addChild( int uid ) { 300void OEvent::addChild( int uid ) {
295 changeOrModify(); 301 changeOrModify();
296 if (!data->child ) { 302 if (!data->child ) {
297 data->child = new QArray<int>(1); 303 data->child = new QArray<int>(1);
298 (*data->child)[0] = uid; 304 (*data->child)[0] = uid;
299 }else{ 305 }else{
300 int count = data->child->count(); 306 int count = data->child->count();
301 data->child->resize( count + 1 ); 307 data->child->resize( count + 1 );
302 (*data->child)[count] = uid; 308 (*data->child)[count] = uid;
303 } 309 }
304} 310}
305void OEvent::removeChild( int uid ) { 311void OEvent::removeChild( int uid ) {
306 if (!data->child || !data->child->contains( uid ) ) return; 312 if (!data->child || !data->child->contains( uid ) ) return;
307 changeOrModify(); 313 changeOrModify();
308 QArray<int> newAr( data->child->count() - 1 ); 314 QArray<int> newAr( data->child->count() - 1 );
309 int j = 0; 315 int j = 0;
310 uint count = data->child->count(); 316 uint count = data->child->count();
311 for ( uint i = 0; i < count; i++ ) { 317 for ( uint i = 0; i < count; i++ ) {
312 if ( (*data->child)[i] != uid ) { 318 if ( (*data->child)[i] != uid ) {
313 newAr[j] = (*data->child)[i]; 319 newAr[j] = (*data->child)[i];
314 j++; 320 j++;
315 } 321 }
316 } 322 }
317 (*data->child) = newAr; 323 (*data->child) = newAr;
318} 324}
319struct OEffectiveEvent::Data : public QShared { 325struct OEffectiveEvent::Data : public QShared {
320 Data() : QShared() { 326 Data() : QShared() {
321 } 327 }