[PATCH] Beware of weird partition sizes (#1040012)

Vratislav Podzimek vpodzime at redhat.com
Tue Dec 10 16:22:01 UTC 2013


Signed-off-by: Vratislav Podzimek <vpodzime at redhat.com>
---
 pyanaconda/ui/gui/spokes/lib/resize.py | 27 ++++++++++++++++++---------
 1 file changed, 18 insertions(+), 9 deletions(-)

diff --git a/pyanaconda/ui/gui/spokes/lib/resize.py b/pyanaconda/ui/gui/spokes/lib/resize.py
index a18f09d..9aeda5a 100644
--- a/pyanaconda/ui/gui/spokes/lib/resize.py
+++ b/pyanaconda/ui/gui/spokes/lib/resize.py
@@ -42,9 +42,18 @@ TOOLTIP_COL = 6
 RESIZE_TARGET_COL = 7
 NAME_COL = 8
 
-PartStoreRow = namedtuple("PartStoreRow", ["id", "desc", "fs", "reclaimable",
-                                           "action", "editable", "tooltip",
-                                           "target", "name"])
+_PartStoreRowUnsafe = namedtuple("_PartStoreRowUnsafe", ["id", "desc", "fs", "reclaimable",
+                                                         "action", "editable", "tooltip",
+                                                         "target", "name"])
+
+class PartStoreRow(_PartStoreRowUnsafe):
+    """Class rounding the potentially unsafe float target value"""
+
+    def __init__(self, ident, desc, fs, reclaimable, action,
+                 editable, tooltip, target, name):
+        rounded_target = round(target, 2)
+        super(PartStoreRow, self).__init__(ident, desc, fs, reclaimable, action,
+                                           editable, tooltip, rounded_target, name)
 
 PRESERVE = N_("Preserve")
 SHRINK = N_("Shrink")
@@ -227,19 +236,19 @@ class ResizeDialog(GUIObject):
            with here.
         """
         self._resizeSlider.handler_block_by_func(self.on_resize_value_changed)
-        self._resizeSlider.set_range(device.minSize, device.size)
+        self._resizeSlider.set_range(device.minSize, round(device.size, 2))
         self._resizeSlider.handler_unblock_by_func(self.on_resize_value_changed)
         self._resizeSlider.set_value(value)
 
         # The slider needs to be keyboard-accessible.  We'll make small movements change in
         # 1% increments, and large movements in 5% increments.
-        distance = device.size - device.minSize
+        distance = round(device.size, 2) - device.minSize
         onePercent = distance*0.01
         fivePercent = distance*0.05
         twentyPercent = distance*0.2
 
         adjustment = self.builder.get_object("resizeAdjustment")
-        adjustment.configure(value, device.minSize, device.size, onePercent, fivePercent, 0)
+        adjustment.configure(value, device.minSize, round(device.size, 2), onePercent, fivePercent, 0)
 
         # And then the slider needs a couple tick marks for easier navigation.
         self._resizeSlider.clear_marks()
@@ -248,7 +257,7 @@ class ResizeDialog(GUIObject):
 
         # Finally, add tick marks for the ends.
         self._resizeSlider.add_mark(device.minSize, Gtk.PositionType.BOTTOM, size_str(device.minSize))
-        self._resizeSlider.add_mark(device.size, Gtk.PositionType.BOTTOM, size_str(device.size))
+        self._resizeSlider.add_mark(round(device.size, 2), Gtk.PositionType.BOTTOM, size_str(round(device.size, 2)))
 
     def _update_action_buttons(self, row):
         obj = PartStoreRow(*row)
@@ -325,9 +334,9 @@ class ResizeDialog(GUIObject):
         if obj.action == _(PRESERVE):
             return False
         if obj.action == _(SHRINK):
-            self._selectedReclaimableSpace += device.size - obj.target
+            self._selectedReclaimableSpace += round(device.size, 2) - obj.target
         elif obj.action == _(DELETE):
-            self._selectedReclaimableSpace += device.size
+            self._selectedReclaimableSpace += round(device.size, 2)
 
         return False
 
-- 
1.8.4.2



More information about the anaconda-patches mailing list