hrev47522 adds 13 changesets to branch 'master' old head: 4deecac06145277bb0e0f650be7725880c780f44 new head: b8bcb08800361b34369c555a186ad22d0f408dc4 overview: http://cgit.haiku-os.org/haiku/log/?qt=range&q=b8bcb08+%5E4deecac ---------------------------------------------------------------------------- 565cd80: Tracker: whitespace fix, spaces to tab 0db0308: Tracker: style fixes to PoseView.cpp Compare with NULL explictly 20e3467: Tracker: fix dereference after NULL checks CID600503, CID600504, CID600505 dc3cfca: Tracker: fix unused pointers CID610474, CID610475 62de0e0: Tracker: fix unchecked return values Check that LockLooper() succeeds CID611190, CID611194, CID602477 d308d1f: Tracker: fix unchecked dynamic_casts CID603130, CID603131, CID603132 ba24adb: Tracker: fix 2 unbounded copies CID609045 1933335: Tracker: fix 2 uninitialized scalers CID610119 5969c5d: Tracker: Fix use after free CID510586 a892df2: Tracker: Fix several unchecked return values CID611191, CID611192, CID611193 190fda6: Tracker: Check that LockLooper() succeeds CID602486 1e22816: Tracker: Initialize view and low colors CID610137 and CID610138 b8bcb08: Tracker: Fix integer overflow CID1108329 [ John Scipione <jscipione@xxxxxxxxx> ] ---------------------------------------------------------------------------- 3 files changed, 83 insertions(+), 63 deletions(-) src/kits/tracker/PoseView.cpp | 129 +++++++++++++---------- src/kits/tracker/Utilities.cpp | 11 +- src/kits/tracker/VirtualDirectoryManager.cpp | 6 +- ############################################################################ Commit: 565cd805b445db9d6a926ddd33249d4ac8afc736 URL: http://cgit.haiku-os.org/haiku/commit/?id=565cd80 Author: John Scipione <jscipione@xxxxxxxxx> Date: Fri Jul 18 20:53:38 2014 UTC Tracker: whitespace fix, spaces to tab ---------------------------------------------------------------------------- diff --git a/src/kits/tracker/Utilities.cpp b/src/kits/tracker/Utilities.cpp index eb11210..27a4377 100644 --- a/src/kits/tracker/Utilities.cpp +++ b/src/kits/tracker/Utilities.cpp @@ -704,7 +704,7 @@ FlickerFreeStringView::Draw(BRect) offscreen->SetLowColor(fLowColor); BFont font; - GetFont(&font); + GetFont(&font); offscreen->SetFont(&font); offscreen->Sync(); ############################################################################ Commit: 0db0308b08efa3b95e1ee849c7759541c26f9c28 URL: http://cgit.haiku-os.org/haiku/commit/?id=0db0308 Author: John Scipione <jscipione@xxxxxxxxx> Date: Fri Jul 18 20:30:12 2014 UTC Tracker: style fixes to PoseView.cpp Compare with NULL explictly ---------------------------------------------------------------------------- diff --git a/src/kits/tracker/PoseView.cpp b/src/kits/tracker/PoseView.cpp index 7d74ef2..ed14a54 100644 --- a/src/kits/tracker/PoseView.cpp +++ b/src/kits/tracker/PoseView.cpp @@ -1321,17 +1321,17 @@ BPoseView::AddPosesTask(void* castToParams) thread_id threadID = find_thread(NULL); BPoseView* view = dynamic_cast<BPoseView*>(lock.Handler()); - ASSERT(view); + ASSERT(view != NULL); //BWindow* window = dynamic_cast<BWindow*>(lock.Looper()); - ASSERT(dynamic_cast<BWindow*>(lock.Looper())); + ASSERT(dynamic_cast<BWindow*>(lock.Looper()) != NULL); // allocate the iterator we will use for adding poses; this // can be a directory or any other collection of entry_refs, such // as results of a query; subclasses override this to provide // other than standard directory iterations EntryListBase* container = view->InitDirentIterator(&ref); - if (!container) { + if (container == NULL) { view->HideBarberPole(); return B_ERROR; } @@ -9596,7 +9596,7 @@ BPoseView::UpdateDropTarget(BPoint mouseLoc, const BMessage* dragMessage, targetModel = targetPose->TargetModel(); Model tmpTarget; - if (targetModel && targetModel->IsSymLink() + if (targetModel != NULL && targetModel->IsSymLink() && tmpTarget.SetTo(targetPose->TargetModel()->EntryRef(), true, true) == B_OK) { targetModel = &tmpTarget; ############################################################################ Commit: 20e3467eae2e5b867500645738d389b7bd8dc0e4 URL: http://cgit.haiku-os.org/haiku/commit/?id=20e3467 Author: John Scipione <jscipione@xxxxxxxxx> Date: Fri Jul 18 20:11:57 2014 UTC Tracker: fix dereference after NULL checks CID600503, CID600504, CID600505 ---------------------------------------------------------------------------- diff --git a/src/kits/tracker/PoseView.cpp b/src/kits/tracker/PoseView.cpp index ed14a54..8bd49aa 100644 --- a/src/kits/tracker/PoseView.cpp +++ b/src/kits/tracker/PoseView.cpp @@ -4416,7 +4416,7 @@ BPoseView::HandleDropCommon(BMessage* message, Model* targetModel, if (srcWindow == NULL) { // drag was from another app - if (targetModel == NULL) + if (targetModel == NULL && poseView != NULL) targetModel = poseView->TargetModel(); // figure out if we dropped a file onto a directory and set @@ -4425,7 +4425,7 @@ BPoseView::HandleDropCommon(BMessage* message, Model* targetModel, if (targetModel != NULL && targetModel->IsDirectory()) targetDirectory.SetTo(targetModel->EntryRef()); - if (targetModel->IsRoot()) { + if (targetModel != NULL && targetModel->IsRoot()) { // don't drop anything into the root disk return false; } @@ -9604,7 +9604,8 @@ BPoseView::UpdateDropTarget(BPoint mouseLoc, const BMessage* dragMessage, bool ignoreTypes = (modifiers() & B_CONTROL_KEY) != 0; if (targetPose != NULL) { - if (CanHandleDragSelection(targetModel, dragMessage, ignoreTypes)) { + if (targetModel != NULL + && CanHandleDragSelection(targetModel, dragMessage, ignoreTypes)) { // new target is valid, select it HiliteDropTarget(true); } else { ############################################################################ Commit: dc3cfca45bc8a4cb314ace17e6a143c07267e79d URL: http://cgit.haiku-os.org/haiku/commit/?id=dc3cfca Author: John Scipione <jscipione@xxxxxxxxx> Date: Fri Jul 18 21:40:11 2014 UTC Tracker: fix unused pointers CID610474, CID610475 ---------------------------------------------------------------------------- diff --git a/src/kits/tracker/PoseView.cpp b/src/kits/tracker/PoseView.cpp index 8bd49aa..1cf5ead 100644 --- a/src/kits/tracker/PoseView.cpp +++ b/src/kits/tracker/PoseView.cpp @@ -7600,14 +7600,13 @@ BPoseView::MakeDragBitmap(BRect dragRect, BPoint clickedPoint, BRect bounds(Bounds()); PoseList* poseList = CurrentPoseList(); - BPose* pose = poseList->ItemAt(clickedPoseIndex); if (ViewMode() == kListMode) { int32 count = poseList->CountItems(); int32 startIndex = (int32)(bounds.top / fListElemHeight); BPoint loc(0, startIndex * fListElemHeight); for (int32 index = startIndex; index < count; index++) { - pose = poseList->ItemAt(index); + BPose* pose = poseList->ItemAt(index); if (pose->IsSelected()) { BRect poseRect(pose->CalcRect(loc, this, true)); if (poseRect.Intersects(inner)) { @@ -7627,7 +7626,7 @@ BPoseView::MakeDragBitmap(BRect dragRect, BPoint clickedPoint, int32 count = fVSPoseList->CountItems(); for (int32 index = startIndex; index < count; index++) { - pose = fVSPoseList->ItemAt(index); + BPose* pose = fVSPoseList->ItemAt(index); if (pose != NULL && pose->IsSelected()) { BRect poseRect(pose->CalcRect(this)); if (!poseRect.Intersects(inner)) @@ -9487,13 +9486,12 @@ BPoseView::ResizeColumn(BColumn* column, float newSize, column->SetWidth(newSize); float offset = kColumnStart; - BColumn* last = fColumnList->FirstItem(); int32 count = fColumnList->CountItems(); for (int32 index = 0; index < count; index++) { column = fColumnList->ItemAt(index); column->SetOffset(offset); - last = column; + BColumn* last = column; offset = last->Offset() + last->Width() + kTitleColumnExtraMargin; } @@ -9547,13 +9545,12 @@ BPoseView::MoveColumnTo(BColumn* src, BColumn* dest) fColumnList->AddItem(src, index); float offset = kColumnStart; - BColumn* last = fColumnList->FirstItem(); int32 count = fColumnList->CountItems(); for (int32 index = 0; index < count; index++) { BColumn* column = fColumnList->ItemAt(index); column->SetOffset(offset); - last = column; + BColumn* last = column; offset = last->Offset() + last->Width() + kTitleColumnExtraMargin - kRoomForLine / 2; } ############################################################################ Commit: 62de0e04be70156488d3ae1e17314845a73494cb URL: http://cgit.haiku-os.org/haiku/commit/?id=62de0e0 Author: John Scipione <jscipione@xxxxxxxxx> Date: Fri Jul 18 21:42:25 2014 UTC Tracker: fix unchecked return values Check that LockLooper() succeeds CID611190, CID611194, CID602477 ---------------------------------------------------------------------------- diff --git a/src/kits/tracker/PoseView.cpp b/src/kits/tracker/PoseView.cpp index 1cf5ead..3227281 100644 --- a/src/kits/tracker/PoseView.cpp +++ b/src/kits/tracker/PoseView.cpp @@ -2145,19 +2145,20 @@ BPoseView::MessageReceived(BMessage* message) { AddPosesResult* currentPoses; entry_ref ref; - message->FindPointer("currentPoses", - reinterpret_cast<void**>(¤tPoses)); - message->FindRef("ref", &ref); - - // check if CreatePoses should be called (abort if dir has been - // switched under normal circumstances, ignore in several special - // cases - if (AddPosesThreadValid(&ref)) { - CreatePoses(currentPoses->fModels, currentPoses->fPoseInfos, - currentPoses->fCount, NULL, true, 0, 0, true); - currentPoses->ReleaseModels(); + if (message->FindPointer("currentPoses", + reinterpret_cast<void**>(¤tPoses)) == B_OK + && message->FindRef("ref", &ref) == B_OK) { + // check if CreatePoses should be called + // (abort if dir has been switched under normal + // circumstances, ignore in several special cases) + if (AddPosesThreadValid(&ref)) { + CreatePoses(currentPoses->fModels, + currentPoses->fPoseInfos, + currentPoses->fCount, NULL, true, 0, 0, true); + currentPoses->ReleaseModels(); + } + delete currentPoses; } - delete currentPoses; break; } @@ -4047,7 +4048,8 @@ BPoseView::EachItemInDraggedSelection(const BMessage* message, void* passThru) { BContainerWindow* srcWindow; - message->FindPointer("src_window", (void**)&srcWindow); + if (message->FindPointer("src_window", (void**)&srcWindow) != B_OK) + return false; AutoLock<BWindow> lock(srcWindow); if (!lock) @@ -10094,8 +10096,7 @@ BPoseView::StartWatchDateFormatChange() BMessenger tracker(kTrackerSignature); BHandler::StartWatching(tracker, kDateFormatChanged); #if !defined(HAIKU_TARGET_PLATFORM_HAIKU) && !defined(HAIKU_TARGET_PLATFORM_DANO) - } else { - be_app->LockLooper(); + } else if (be_app->LockLooper()) { be_app->StartWatching(this, kDateFormatChanged); be_app->UnlockLooper(); } @@ -10111,8 +10112,7 @@ BPoseView::StopWatchDateFormatChange() if (IsFilePanel()) { BMessenger tracker(kTrackerSignature); BHandler::StopWatching(tracker, kDateFormatChanged); - } else { - be_app->LockLooper(); + } else if (be_app->LockLooper()) { be_app->StopWatching(this, kDateFormatChanged); be_app->UnlockLooper(); } ############################################################################ Commit: d308d1fa8244387db2f38596cbcb5408b5fb9ac8 URL: http://cgit.haiku-os.org/haiku/commit/?id=d308d1f Author: John Scipione <jscipione@xxxxxxxxx> Date: Fri Jul 18 20:16:49 2014 UTC Tracker: fix unchecked dynamic_casts CID603130, CID603131, CID603132 ---------------------------------------------------------------------------- diff --git a/src/kits/tracker/PoseView.cpp b/src/kits/tracker/PoseView.cpp index 3227281..1426257 100644 --- a/src/kits/tracker/PoseView.cpp +++ b/src/kits/tracker/PoseView.cpp @@ -5207,11 +5207,13 @@ public: virtual bool CanAccumulate(const AccumulatingFunctionObject* functor) const { - return dynamic_cast<const MetaMimeChangedAccumulator*>(functor) - && dynamic_cast<const MetaMimeChangedAccumulator*>(functor)-> - fType == fType - && dynamic_cast<const MetaMimeChangedAccumulator*>(functor)-> - fPreferredApp == fPreferredApp; + const MetaMimeChangedAccumulator* accumulator + = dynamic_cast<const MetaMimeChangedAccumulator*>(functor); + if (accumulator == NULL) + return false; + + return accumulator && accumulator->fType == fType + && accumulator->fPreferredApp == fPreferredApp; } virtual void Accumulate(AccumulatingFunctionObject* DEBUG_ONLY(functor)) @@ -8250,7 +8252,9 @@ BPoseView::UnmountSelectedVolumes() if (model->IsVolume()) { BVolume volume(model->NodeRef()->device); if (volume != boot) { - dynamic_cast<TTracker*>(be_app)->SaveAllPoseLocations(); + TTracker* tracker = dynamic_cast<TTracker*>(be_app); + if (tracker != NULL) + tracker->SaveAllPoseLocations(); BMessage message(kUnmountVolume); message.AddInt32("device_id", volume.Device()); ############################################################################ Commit: ba24adb2723ef9151a6786e9d56f34a2450edf30 URL: http://cgit.haiku-os.org/haiku/commit/?id=ba24adb Author: John Scipione <jscipione@xxxxxxxxx> Date: Fri Jul 18 20:19:39 2014 UTC Tracker: fix 2 unbounded copies CID609045 ---------------------------------------------------------------------------- diff --git a/src/kits/tracker/PoseView.cpp b/src/kits/tracker/PoseView.cpp index 1426257..34dbbcb 100644 --- a/src/kits/tracker/PoseView.cpp +++ b/src/kits/tracker/PoseView.cpp @@ -6792,7 +6792,8 @@ BPoseView::FindNextMatch(int32* matchingIndex, bool reverse) if (sMatchString.ICompare(pose->TargetModel()->Name()) > 0) { if (strcasecmp(pose->TargetModel()->Name(), bestSoFar) >= 0 || !bestSoFar[0]) { - strcpy(bestSoFar, pose->TargetModel()->Name()); + strlcpy(bestSoFar, pose->TargetModel()->Name(), + sizeof(bestSoFar)); poseToSelect = pose; *matchingIndex = index; } @@ -6800,7 +6801,8 @@ BPoseView::FindNextMatch(int32* matchingIndex, bool reverse) } else if (sMatchString.ICompare(pose->TargetModel()->Name()) < 0) { if (strcasecmp(pose->TargetModel()->Name(), bestSoFar) <= 0 || !bestSoFar[0]) { - strcpy(bestSoFar, pose->TargetModel()->Name()); + strlcpy(bestSoFar, pose->TargetModel()->Name(), + sizeof(bestSoFar)); poseToSelect = pose; *matchingIndex = index; } ############################################################################ Commit: 1933335b06d9fb1644d0ecfc1e2f7b6753ac6814 URL: http://cgit.haiku-os.org/haiku/commit/?id=1933335 Author: John Scipione <jscipione@xxxxxxxxx> Date: Fri Jul 18 20:20:30 2014 UTC Tracker: fix 2 uninitialized scalers CID610119 ---------------------------------------------------------------------------- diff --git a/src/kits/tracker/PoseView.cpp b/src/kits/tracker/PoseView.cpp index 34dbbcb..40f26e1 100644 --- a/src/kits/tracker/PoseView.cpp +++ b/src/kits/tracker/PoseView.cpp @@ -231,6 +231,8 @@ BPoseView::BPoseView(Model* model, BRect bounds, uint32 viewMode, fViewState(new BViewState), fStateNeedsSaving(false), fCountView(NULL), + fListElemHeight(0.0f), + fIconPoseHeight(0.0f), fDropTarget(NULL), fAlreadySelectedDropTarget(NULL), fSelectionHandler(be_app), ############################################################################ Commit: 5969c5d77930d3d4466df7691bed69f4ce12bfc0 URL: http://cgit.haiku-os.org/haiku/commit/?id=5969c5d Author: John Scipione <jscipione@xxxxxxxxx> Date: Fri Jul 18 20:22:31 2014 UTC Tracker: Fix use after free CID510586 ---------------------------------------------------------------------------- diff --git a/src/kits/tracker/PoseView.cpp b/src/kits/tracker/PoseView.cpp index 40f26e1..2522393 100644 --- a/src/kits/tracker/PoseView.cpp +++ b/src/kits/tracker/PoseView.cpp @@ -8752,9 +8752,10 @@ BPoseView::AddRemovePoseFromSelection(BPose* pose, int32 index, bool select) if (select) fSelectionList->AddItem(pose); else { - fSelectionList->RemoveItem(pose); + fSelectionList->RemoveItem(pose, false); if (fSelectionPivotPose == pose) fSelectionPivotPose = NULL; + if (fRealPivotPose == pose) fRealPivotPose = NULL; } ############################################################################ Commit: a892df239f1f45d79fa37eb3c560c9d0e1253272 URL: http://cgit.haiku-os.org/haiku/commit/?id=a892df2 Author: John Scipione <jscipione@xxxxxxxxx> Date: Fri Jul 18 20:28:00 2014 UTC Tracker: Fix several unchecked return values CID611191, CID611192, CID611193 ---------------------------------------------------------------------------- diff --git a/src/kits/tracker/PoseView.cpp b/src/kits/tracker/PoseView.cpp index 2522393..16ed536 100644 --- a/src/kits/tracker/PoseView.cpp +++ b/src/kits/tracker/PoseView.cpp @@ -4146,17 +4146,18 @@ BPoseView::CanCopyOrMoveForeignDrag(const Model* targetModel, bool -BPoseView::CanHandleDragSelection(const Model* target, const BMessage* dragMessage, - bool ignoreTypes) +BPoseView::CanHandleDragSelection(const Model* target, + const BMessage* dragMessage, bool ignoreTypes) { if (ignoreTypes) return target->IsDropTarget(); - ASSERT(dragMessage); + ASSERT(dragMessage != NULL); BContainerWindow* srcWindow; - dragMessage->FindPointer("src_window", (void**)&srcWindow); - if (!srcWindow) { + status_t result = dragMessage->FindPointer("src_window", (void**)&srcWindow); + + if (result != B_OK || srcWindow == NULL) { // handle a foreign drag bool canCopy; bool canMove; @@ -4188,14 +4189,18 @@ BPoseView::CanHandleDragSelection(const Model* target, const BMessage* dragMessa if (target->IsDirectory() && (dragMessage->HasData(kBitmapMimeType, B_MESSAGE_TYPE) || dragMessage->HasData(kLargeIconType, B_MESSAGE_TYPE) - || dragMessage->HasData(kMiniIconType, B_MESSAGE_TYPE))) + || dragMessage->HasData(kMiniIconType, B_MESSAGE_TYPE))) { return true; + } // TODO: check for a drag message full of refs, feed a list of their // types to target->IsDropTargetForList(mimeTypeList); return false; } + if (result != B_OK) + return false; + AutoLock<BWindow> lock(srcWindow); if (!lock) return false; @@ -4416,8 +4421,8 @@ BPoseView::HandleDropCommon(BMessage* message, Model* targetModel, // look for srcWindow to determine whether drag was initiated in tracker BContainerWindow* srcWindow = NULL; - message->FindPointer("src_window", (void**)&srcWindow); - if (srcWindow == NULL) { + status_t result = message->FindPointer("src_window", (void**)&srcWindow); + if (result != B_OK || srcWindow == NULL) { // drag was from another app if (targetModel == NULL && poseView != NULL) @@ -4780,17 +4785,19 @@ BPoseView::HandleDropCommon(BMessage* message, Model* targetModel, return false; } + if (result != B_OK) + return false; + if (srcWindow == containerWindow) { // drag started in this window containerWindow->Activate(); containerWindow->UpdateIfNeeded(); poseView->ResetPosePlacementHint(); - } - if (srcWindow == containerWindow - && DragSelectionContains(targetPose, message)) { - // drop on self - targetModel = NULL; + if (DragSelectionContains(targetPose, message)) { + // drop on self + targetModel = NULL; + } } bool wasHandled = false; @@ -4858,10 +4865,11 @@ BPoseView::LaunchAppWithSelection(Model* appModel, const BMessage* dragMessage, // add Tracker token so that refs received recipients can script us BContainerWindow* srcWindow; - dragMessage->FindPointer("src_window", (void**)&srcWindow); - if (srcWindow) - params.refsMessage->AddMessenger("TrackerViewToken", BMessenger( - srcWindow->PoseView())); + if (dragMessage->FindPointer("src_window", (void**)&srcWindow) == B_OK + && srcWindow != NULL) { + params.refsMessage->AddMessenger("TrackerViewToken", + BMessenger(srcWindow->PoseView())); + } EachItemInDraggedSelection(dragMessage, AddOneToLaunchMessage, 0, ¶ms); if (params.refsMessage->HasRef("refs")) ############################################################################ Commit: 190fda60a64e907e0784948a02d3737d714474fb URL: http://cgit.haiku-os.org/haiku/commit/?id=190fda6 Author: John Scipione <jscipione@xxxxxxxxx> Date: Fri Jul 18 20:31:27 2014 UTC Tracker: Check that LockLooper() succeeds CID602486 ---------------------------------------------------------------------------- diff --git a/src/kits/tracker/Utilities.cpp b/src/kits/tracker/Utilities.cpp index 27a4377..133fb7d 100644 --- a/src/kits/tracker/Utilities.cpp +++ b/src/kits/tracker/Utilities.cpp @@ -227,9 +227,8 @@ PeriodicUpdatePoses::DoPeriodicUpdate(bool forceRedraw) int32 count = fPoseList.CountItems(); for (int32 index = 0; index < count; index++) { periodic_pose* periodic = fPoseList.ItemAt(index); - if (periodic->callback(periodic->pose, periodic->cookie) - || forceRedraw) { - periodic->pose_view->LockLooper(); + if ((periodic->callback(periodic->pose, periodic->cookie) + || forceRedraw) && periodic->pose_view->LockLooper()) { periodic->pose_view->UpdateIcon(periodic->pose); periodic->pose_view->UnlockLooper(); } ############################################################################ Commit: 1e228168eccc69050fbca173b851e40622adf70c URL: http://cgit.haiku-os.org/haiku/commit/?id=1e22816 Author: John Scipione <jscipione@xxxxxxxxx> Date: Fri Jul 18 20:38:31 2014 UTC Tracker: Initialize view and low colors CID610137 and CID610138 ---------------------------------------------------------------------------- diff --git a/src/kits/tracker/Utilities.cpp b/src/kits/tracker/Utilities.cpp index 133fb7d..4e38416 100644 --- a/src/kits/tracker/Utilities.cpp +++ b/src/kits/tracker/Utilities.cpp @@ -663,6 +663,8 @@ FlickerFreeStringView::FlickerFreeStringView(BRect bounds, const char* name, : BStringView(bounds, name, text, resizingMode, flags), fBitmap(NULL), + fViewColor(ViewColor()), + fLowColor(LowColor()), fOriginalBitmap(NULL) { } @@ -673,6 +675,8 @@ FlickerFreeStringView::FlickerFreeStringView(BRect bounds, const char* name, : BStringView(bounds, name, text, resizingMode, flags), fBitmap(NULL), + fViewColor(ViewColor()), + fLowColor(LowColor()), fOriginalBitmap(inBitmap) { } ############################################################################ Revision: hrev47522 Commit: b8bcb08800361b34369c555a186ad22d0f408dc4 URL: http://cgit.haiku-os.org/haiku/commit/?id=b8bcb08 Author: John Scipione <jscipione@xxxxxxxxx> Date: Fri Jul 18 20:40:05 2014 UTC Tracker: Fix integer overflow CID1108329 ---------------------------------------------------------------------------- diff --git a/src/kits/tracker/VirtualDirectoryManager.cpp b/src/kits/tracker/VirtualDirectoryManager.cpp index 9737a7d..f2f1d41 100644 --- a/src/kits/tracker/VirtualDirectoryManager.cpp +++ b/src/kits/tracker/VirtualDirectoryManager.cpp @@ -224,11 +224,13 @@ public: if (error != B_OK) return error; - bigtime_t fileTime = st.st_mtim.tv_sec * 1000000 - + st.st_mtim.tv_nsec / 1000; + bigtime_t fileTime = st.st_mtim.tv_sec; + fileTime *= 1000000; + fileTime += st.st_mtim.tv_nsec / 1000; if (fileTime == fFileTime) { if (_changed != NULL) *_changed = false; + return B_OK; }