diff -Naur grub-2.00/grub-core/gfxmenu/gui_circular_progress.c grub-new/grub-core/gfxmenu/gui_circular_progress.c --- grub-2.00/grub-core/gfxmenu/gui_circular_progress.c 2010-12-01 17:45:43.000000000 +0300 +++ grub-new/grub-core/gfxmenu/gui_circular_progress.c 2013-04-11 19:58:24.459060324 +0400 @@ -223,6 +223,34 @@ self->end = end; } +static int +parse_angle (const char *value) +{ + int pos = 0; + int len = grub_strlen (value); + int angle = grub_strtol (value, 0, 10); + /* Find space symbol */ + while (pos < len && value[pos] != ' ') + pos++; + /* Skip spaces */ + while (pos < len && value[pos] == ' ') + pos++; + if (pos < len) + { + char *unit = grub_new_substring (value, pos, len); + if (!unit) + return angle; + if ((grub_strcmp (unit, "degree") == 0) + || (grub_strcmp (unit, "degrees") == 0)) + angle = angle * 64 / 90; + else if ((grub_strcmp (unit, "rad") == 0) + || grub_strcmp (unit, "rads") == 0) + angle = angle * 64 / 100; + grub_free (unit); + } + return angle; +} + static grub_err_t circprog_set_property (void *vself, const char *name, const char *value) { @@ -233,7 +261,7 @@ } else if (grub_strcmp (name, "start_angle") == 0) { - self->start_angle = grub_strtol (value, 0, 10); + self->start_angle = parse_angle(value); } else if (grub_strcmp (name, "ticks_disappear") == 0) {