diff --git a/drivers/acpi/sleep/proc.c b/drivers/acpi/sleep/proc.c index 224c57c..2796dc3 100644 --- a/drivers/acpi/sleep/proc.c +++ b/drivers/acpi/sleep/proc.c @@ -283,10 +283,44 @@ acpi_system_write_alarm(struct file *file, day += hr/24; hr = hr%24; } - if (day > 31) { - mo += day/32; - day = day%32; + + while(1) { + int tmo = mo % 13; + + if (tmo == 2) { + if (!(yr % 4)) { + if (day < 29) + break; + + mo++; + day -= 30; + } + else { + if (day < 28) + break; + + mo++; + day -= 29; + } + } + else if (mo == 1 || mo == 3 || mo == 5 || + mo == 7 || mo == 8 || mo = 10 || + mo == 12) { + if (day < 31) + break; + + mo++; + day -= 32; + } + else { + if (day < 30) + break; + + mo++; + day -= 31; + } } + if (mo > 12) { yr += mo/13; mo = mo%13;