diff --git a/src/apps/diskprobe/Jamfile b/src/apps/diskprobe/Jamfile index 622e3aac23..6b7ea3c58f 100644 --- a/src/apps/diskprobe/Jamfile +++ b/src/apps/diskprobe/Jamfile @@ -16,6 +16,6 @@ Application DiskProbe : ProbeView.cpp OpenWindow.cpp FindWindow.cpp - : be tracker translation + : be tracker translation libexpression_parser.a libmapm.a : DiskProbe.rdef ; diff --git a/src/apps/diskprobe/ProbeView.cpp b/src/apps/diskprobe/ProbeView.cpp index 6b9e992d1e..a620ac9779 100644 --- a/src/apps/diskprobe/ProbeView.cpp +++ b/src/apps/diskprobe/ProbeView.cpp @@ -37,6 +37,8 @@ #include #include +#include + #include "DataView.h" #include "DiskProbe.h" #include "TypeEditors.h" @@ -849,7 +851,7 @@ HeaderView::MessageReceived(BMessage *message) case kMsgPositionUpdate: { - fLastPosition = fPosition; + off_t lastPosition = fPosition; off_t position; int32 delta; @@ -862,10 +864,18 @@ HeaderView::MessageReceived(BMessage *message) } else if (message->FindInt32("delta", &delta) == B_OK) { fPosition += delta * off_t(fBlockSize); } else { - fPosition = strtoll(fPositionControl->Text(), NULL, 0) - * fBlockSize; + try { + ExpressionParser parser; + parser.SetSupportHexInput(true); + fPosition = parser.EvaluateToInt64( + fPositionControl->Text()) * fBlockSize; + } catch (...) { + beep(); + break; + } } + fLastPosition = lastPosition; fPosition = (fPosition / fBlockSize) * fBlockSize; // round to block size