author | zecke <zecke> | 2003-05-07 16:01:45 (UTC) |
---|---|---|
committer | zecke <zecke> | 2003-05-07 16:01:45 (UTC) |
commit | ef9b40f99443fabed972d29ce47c2ccb29e77210 (patch) (unidiff) | |
tree | 920e5b1c5807ca931e86425092d13429029ebe65 | |
parent | fd0b11fbfe36e87845df9282bb4ed090c7f51d35 (diff) | |
download | opie-ef9b40f99443fabed972d29ce47c2ccb29e77210.zip opie-ef9b40f99443fabed972d29ce47c2ccb29e77210.tar.gz opie-ef9b40f99443fabed972d29ce47c2ccb29e77210.tar.bz2 |
Prevent mem corruption
-rw-r--r-- | libopie/pim/oevent.cpp | 14 | ||||
-rw-r--r-- | libopie2/opiepim/oevent.cpp | 14 |
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 | } |
183 | QDateTime OEvent::endDateTimeInZone()const { | 183 | QDateTime 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 | } |
190 | void OEvent::setEndDateTime( const QDateTime& dt ) { | 190 | void OEvent::setEndDateTime( const QDateTime& dt ) { |
191 | changeOrModify(); | 191 | changeOrModify(); |
192 | data->end = dt; | 192 | data->end = dt; |
193 | } | 193 | } |
194 | bool OEvent::isMultipleDay()const { | 194 | bool 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 | } |
197 | bool OEvent::isAllDay()const { | 197 | bool OEvent::isAllDay()const { |
198 | return data->isAllDay; | 198 | return data->isAllDay; |
199 | } | 199 | } |
200 | void OEvent::setAllDay( bool allDay ) { | 200 | void 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 | } |
205 | void OEvent::setTimeZone( const QString& tz ) { | 205 | void OEvent::setTimeZone( const QString& tz ) { |
206 | changeOrModify(); | 206 | changeOrModify(); |
207 | data->timezone = tz; | 207 | data->timezone = tz; |
208 | } | 208 | } |
209 | QString OEvent::timeZone()const { | 209 | QString 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 | } |
213 | bool OEvent::match( const QRegExp& )const { | 213 | bool OEvent::match( const QRegExp& )const { |
214 | // FIXME | 214 | // FIXME |
215 | return false; | 215 | return false; |
216 | } | 216 | } |
217 | QString OEvent::toRichText()const { | 217 | QString OEvent::toRichText()const { |
218 | // FIXME | 218 | // FIXME |
219 | return "OEvent test"; | 219 | return "OEvent test"; |
220 | } | 220 | } |
221 | QString OEvent::toShortText()const { | 221 | QString OEvent::toShortText()const { |
222 | return "OEvent shotText"; | 222 | return "OEvent shotText"; |
223 | } | 223 | } |
224 | QString OEvent::type()const { | 224 | QString OEvent::type()const { |
225 | return QString::fromLatin1("OEvent"); | 225 | return QString::fromLatin1("OEvent"); |
226 | } | 226 | } |
227 | QString OEvent::recordField( int /*id */ )const { | 227 | QString OEvent::recordField( int /*id */ )const { |
228 | return QString::null; | 228 | return QString::null; |
229 | } | 229 | } |
230 | int OEvent::rtti() { | 230 | int OEvent::rtti() { |
231 | return OPimResolver::DateBook; | 231 | return OPimResolver::DateBook; |
232 | } | 232 | } |
233 | bool OEvent::loadFromStream( QDataStream& ) { | 233 | bool OEvent::loadFromStream( QDataStream& ) { |
234 | return true; | 234 | return true; |
235 | } | 235 | } |
236 | bool OEvent::saveToStream( QDataStream& )const { | 236 | bool OEvent::saveToStream( QDataStream& )const { |
237 | return true; | 237 | return true; |
238 | } | 238 | } |
239 | void OEvent::changeOrModify() { | 239 | void 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 | } |
262 | void OEvent::deref() { | 268 | void 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 |
269 | QMap<int, QString> OEvent::toMap()const { | 275 | QMap<int, QString> OEvent::toMap()const { |
270 | return QMap<int, QString>(); | 276 | return QMap<int, QString>(); |
271 | } | 277 | } |
272 | QMap<QString, QString> OEvent::toExtraMap()const { | 278 | QMap<QString, QString> OEvent::toExtraMap()const { |
273 | return QMap<QString, QString>(); | 279 | return QMap<QString, QString>(); |
274 | } | 280 | } |
275 | int OEvent::parent()const { | 281 | int OEvent::parent()const { |
276 | return data->parent; | 282 | return data->parent; |
277 | } | 283 | } |
278 | void OEvent::setParent( int uid ) { | 284 | void OEvent::setParent( int uid ) { |
279 | changeOrModify(); | 285 | changeOrModify(); |
280 | data->parent = uid; | 286 | data->parent = uid; |
281 | } | 287 | } |
282 | QArray<int> OEvent::children() const{ | 288 | QArray<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 | } |
287 | void OEvent::setChildren( const QArray<int>& arr ) { | 293 | void 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 | } |
294 | void OEvent::addChild( int uid ) { | 300 | void 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 | } |
305 | void OEvent::removeChild( int uid ) { | 311 | void 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 | } |
319 | struct OEffectiveEvent::Data : public QShared { | 325 | struct 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 | } |
183 | QDateTime OEvent::endDateTimeInZone()const { | 183 | QDateTime 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 | } |
190 | void OEvent::setEndDateTime( const QDateTime& dt ) { | 190 | void OEvent::setEndDateTime( const QDateTime& dt ) { |
191 | changeOrModify(); | 191 | changeOrModify(); |
192 | data->end = dt; | 192 | data->end = dt; |
193 | } | 193 | } |
194 | bool OEvent::isMultipleDay()const { | 194 | bool 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 | } |
197 | bool OEvent::isAllDay()const { | 197 | bool OEvent::isAllDay()const { |
198 | return data->isAllDay; | 198 | return data->isAllDay; |
199 | } | 199 | } |
200 | void OEvent::setAllDay( bool allDay ) { | 200 | void 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 | } |
205 | void OEvent::setTimeZone( const QString& tz ) { | 205 | void OEvent::setTimeZone( const QString& tz ) { |
206 | changeOrModify(); | 206 | changeOrModify(); |
207 | data->timezone = tz; | 207 | data->timezone = tz; |
208 | } | 208 | } |
209 | QString OEvent::timeZone()const { | 209 | QString 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 | } |
213 | bool OEvent::match( const QRegExp& )const { | 213 | bool OEvent::match( const QRegExp& )const { |
214 | // FIXME | 214 | // FIXME |
215 | return false; | 215 | return false; |
216 | } | 216 | } |
217 | QString OEvent::toRichText()const { | 217 | QString OEvent::toRichText()const { |
218 | // FIXME | 218 | // FIXME |
219 | return "OEvent test"; | 219 | return "OEvent test"; |
220 | } | 220 | } |
221 | QString OEvent::toShortText()const { | 221 | QString OEvent::toShortText()const { |
222 | return "OEvent shotText"; | 222 | return "OEvent shotText"; |
223 | } | 223 | } |
224 | QString OEvent::type()const { | 224 | QString OEvent::type()const { |
225 | return QString::fromLatin1("OEvent"); | 225 | return QString::fromLatin1("OEvent"); |
226 | } | 226 | } |
227 | QString OEvent::recordField( int /*id */ )const { | 227 | QString OEvent::recordField( int /*id */ )const { |
228 | return QString::null; | 228 | return QString::null; |
229 | } | 229 | } |
230 | int OEvent::rtti() { | 230 | int OEvent::rtti() { |
231 | return OPimResolver::DateBook; | 231 | return OPimResolver::DateBook; |
232 | } | 232 | } |
233 | bool OEvent::loadFromStream( QDataStream& ) { | 233 | bool OEvent::loadFromStream( QDataStream& ) { |
234 | return true; | 234 | return true; |
235 | } | 235 | } |
236 | bool OEvent::saveToStream( QDataStream& )const { | 236 | bool OEvent::saveToStream( QDataStream& )const { |
237 | return true; | 237 | return true; |
238 | } | 238 | } |
239 | void OEvent::changeOrModify() { | 239 | void 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 | } |
262 | void OEvent::deref() { | 268 | void 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 |
269 | QMap<int, QString> OEvent::toMap()const { | 275 | QMap<int, QString> OEvent::toMap()const { |
270 | return QMap<int, QString>(); | 276 | return QMap<int, QString>(); |
271 | } | 277 | } |
272 | QMap<QString, QString> OEvent::toExtraMap()const { | 278 | QMap<QString, QString> OEvent::toExtraMap()const { |
273 | return QMap<QString, QString>(); | 279 | return QMap<QString, QString>(); |
274 | } | 280 | } |
275 | int OEvent::parent()const { | 281 | int OEvent::parent()const { |
276 | return data->parent; | 282 | return data->parent; |
277 | } | 283 | } |
278 | void OEvent::setParent( int uid ) { | 284 | void OEvent::setParent( int uid ) { |
279 | changeOrModify(); | 285 | changeOrModify(); |
280 | data->parent = uid; | 286 | data->parent = uid; |
281 | } | 287 | } |
282 | QArray<int> OEvent::children() const{ | 288 | QArray<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 | } |
287 | void OEvent::setChildren( const QArray<int>& arr ) { | 293 | void 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 | } |
294 | void OEvent::addChild( int uid ) { | 300 | void 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 | } |
305 | void OEvent::removeChild( int uid ) { | 311 | void 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 | } |
319 | struct OEffectiveEvent::Data : public QShared { | 325 | struct OEffectiveEvent::Data : public QShared { |
320 | Data() : QShared() { | 326 | Data() : QShared() { |
321 | } | 327 | } |