diff -Nur kdepim-3.4.1.orig/kpilot/conduits/memofileconduit/memofile-conduit.cc kdepim-3.4.1/kpilot/conduits/memofileconduit/memofile-conduit.cc --- kdepim-3.4.1.orig/kpilot/conduits/memofileconduit/memofile-conduit.cc 2005-05-23 14:12:37.000000000 +0200 +++ kdepim-3.4.1/kpilot/conduits/memofileconduit/memofile-conduit.cc 2005-05-27 17:27:52.000000000 +0200 @@ -114,7 +114,7 @@ setFirstSync( _memofiles->isFirstSync() ); addSyncLogEntry(i18n(" Syncing with %1.").arg(_memo_directory)); - if ( (syncMode() == SyncAction::SyncMode::eCopyHHToPC) || isFirstSync() ) { + if ( (syncMode() == SyncAction::SyncMode::eCopyHHToPC) || _memofiles->isFirstSync() ) { addSyncLogEntry(i18n(" Copying Pilot to PC...")); #ifdef DEBUG DEBUGCONDUIT << fname << ": copying Pilot to PC." << endl; @@ -474,17 +474,11 @@ // Note: This will reset both fCategories and fMemoAppInfo, so // after this, we need to reinitialize our memofiles object... setAppInfo(); - cleanup(); // re-create our memofiles helper... delete _memofiles; _memofiles = new Memofiles(fCategories, *fMemoAppInfo, _memo_directory); - // make sure we are starting with a clean database on both ends... - fDatabase->deleteRecord(0, true); - fLocalDatabase->deleteRecord(0, true); - cleanup(); - _memofiles->load(true); QPtrList<Memofile> memofiles = _memofiles->getAll(); @@ -496,11 +490,39 @@ } _memofiles->save(); - + + // now that we've copied from the PC to our handheld, remove anything extra from the + // handheld... + deleteUnsyncedHHRecords(); + return true; } +void MemofileConduit::deleteUnsyncedHHRecords() +{ + FUNCTIONSETUP; + if ( syncMode()==SyncMode::eCopyPCToHH ) + { + RecordIDList ids=fDatabase->idList(); + RecordIDList::iterator it; + for ( it = ids.begin(); it != ids.end(); ++it ) + { + if (!_memofiles->find(*it)) + { +#ifdef DEBUG + DEBUGCONDUIT << fname + << "Deleting record with ID "<<*it <<" from handheld " + << "(is not on PC, and syncing with PC->HH direction)" + << endl; +#endif + fDatabase->deleteRecord(*it); + fLocalDatabase->deleteRecord(*it); + } + } + } +} + int MemofileConduit::writeToPilot(Memofile * memofile) { FUNCTIONSETUP; diff -Nur kdepim-3.4.1.orig/kpilot/conduits/memofileconduit/memofile-conduit.h kdepim-3.4.1/kpilot/conduits/memofileconduit/memofile-conduit.h --- kdepim-3.4.1.orig/kpilot/conduits/memofileconduit/memofile-conduit.h 2005-05-23 14:12:37.000000000 +0200 +++ kdepim-3.4.1/kpilot/conduits/memofileconduit/memofile-conduit.h 2005-05-27 17:27:52.000000000 +0200 @@ -88,6 +88,7 @@ bool copyHHToPC(); bool copyPCToHH(); + void deleteUnsyncedHHRecords(); bool sync(); int writeToPilot(Memofile * memofile); diff -Nur kdepim-3.4.1.orig/kpilot/lib/pilotDatabase.cc kdepim-3.4.1/kpilot/lib/pilotDatabase.cc --- kdepim-3.4.1.orig/kpilot/lib/pilotDatabase.cc 2005-05-23 14:12:43.000000000 +0200 +++ kdepim-3.4.1/kpilot/lib/pilotDatabase.cc 2005-05-27 17:27:52.000000000 +0200 @@ -185,7 +185,7 @@ int len = CATEGORY_NAME_SIZE - 1; QCString t = PilotAppCategory::codec()->fromUnicode(s,len); memset(categoryInfo()->name[i],0,CATEGORY_NAME_SIZE); - qstrncpy(categoryInfo()->name[i],t,kMin(len,(int)CATEGORY_NAME_SIZE)); + qstrncpy(categoryInfo()->name[i],t,CATEGORY_NAME_SIZE); return true; } diff -Nur kdepim-3.4.1.orig/kpilot/lib/pilotDatabase.h kdepim-3.4.1/kpilot/lib/pilotDatabase.h --- kdepim-3.4.1.orig/kpilot/lib/pilotDatabase.h 2005-05-23 14:12:43.000000000 +0200 +++ kdepim-3.4.1/kpilot/lib/pilotDatabase.h 2005-05-27 17:27:52.000000000 +0200 @@ -279,9 +279,12 @@ int appLen = MAX_APPINFO_SIZE; unsigned char buffer[MAX_APPINFO_SIZE]; - appLen = d->readAppBlock(buffer,appLen); - - (*unpack)(&fInfo, buffer, appLen); + if (d && d->isDBOpen()) + { + appLen = d->readAppBlock(buffer,appLen); + (*unpack)(&fInfo, buffer, appLen); + } + // fInfo is just a struct, so we can point to it anyway. init(&fInfo.category,appLen); } ; @@ -289,6 +292,10 @@ { FUNCTIONSETUP; unsigned char buffer[MAX_APPINFO_SIZE]; + if (!d || !d->isDBOpen()) + { + return -1; + } int appLen = (*pack)(&fInfo, buffer, length()); if (appLen > 0) { diff -Nur kdepim-3.4.1.orig/kpilot/lib/pilotLocalDatabase.cc kdepim-3.4.1/kpilot/lib/pilotLocalDatabase.cc --- kdepim-3.4.1.orig/kpilot/lib/pilotLocalDatabase.cc 2005-05-23 14:12:43.000000000 +0200 +++ kdepim-3.4.1/kpilot/lib/pilotLocalDatabase.cc 2005-05-27 17:27:52.000000000 +0200 @@ -618,7 +618,7 @@ int count; pi_file_get_entries(dbFile, &count); - if (count > 0) + if (count >= 0) { KPILOT_DELETE(d); d = new Private(count);