msi: Limit the progress to its maximal value, use MulDiv for better results.
diff --git a/dlls/msi/dialog.c b/dlls/msi/dialog.c
index 3f1b571..88cdfa9 100644
--- a/dlls/msi/dialog.c
+++ b/dlls/msi/dialog.c
@@ -606,6 +606,8 @@
func = MSI_RecordGetInteger( rec , 1 );
val = MSI_RecordGetInteger( rec , 2 );
+ TRACE("progress: func %u, val %u\n", func, val);
+
switch (func)
{
case 0: /* init */
@@ -618,10 +620,12 @@
break;
case 2: /* move */
ctrl->progress_current += val;
- SendMessageW(ctrl->hwnd, PBM_SETPOS, 100*(ctrl->progress_current/ctrl->progress_max), 0);
+ if (ctrl->progress_current > ctrl->progress_max)
+ ctrl->progress_current = ctrl->progress_max;
+ SendMessageW(ctrl->hwnd, PBM_SETPOS, MulDiv(100, ctrl->progress_current, ctrl->progress_max), 0);
break;
default:
- ERR("Unknown progress message %d\n", func);
+ FIXME("Unknown progress message %u\n", func);
break;
}
}