From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:45899) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RSYAi-0006hZ-6B for qemu-devel@nongnu.org; Mon, 21 Nov 2011 13:00:49 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1RSYAc-0006rR-Q8 for qemu-devel@nongnu.org; Mon, 21 Nov 2011 13:00:47 -0500 Received: from mail-qw0-f45.google.com ([209.85.216.45]:61284) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RSYAc-0006rE-N5 for qemu-devel@nongnu.org; Mon, 21 Nov 2011 13:00:42 -0500 Received: by qabg14 with SMTP id g14so494838qab.4 for ; Mon, 21 Nov 2011 10:00:42 -0800 (PST) Sender: Paolo Bonzini From: Paolo Bonzini Date: Mon, 21 Nov 2011 19:00:28 +0100 Message-Id: <1321898431-18449-2-git-send-email-pbonzini@redhat.com> In-Reply-To: <1321898431-18449-1-git-send-email-pbonzini@redhat.com> References: <1321898431-18449-1-git-send-email-pbonzini@redhat.com> Subject: [Qemu-devel] [PATCH 1/4] rtc: fix 12-hour mode List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Hours in 12-hour mode are in the 1-12 range, not 0-11. Signed-off-by: Paolo Bonzini --- hw/mc146818rtc.c | 11 +++++++---- 1 files changed, 7 insertions(+), 4 deletions(-) diff --git a/hw/mc146818rtc.c b/hw/mc146818rtc.c index 2aaca2f..14c8cb9 100644 --- a/hw/mc146818rtc.c +++ b/hw/mc146818rtc.c @@ -296,9 +296,11 @@ static void rtc_set_time(RTCState *s) tm->tm_sec = rtc_from_bcd(s, s->cmos_data[RTC_SECONDS]); tm->tm_min = rtc_from_bcd(s, s->cmos_data[RTC_MINUTES]); tm->tm_hour = rtc_from_bcd(s, s->cmos_data[RTC_HOURS] & 0x7f); - if (!(s->cmos_data[RTC_REG_B] & REG_B_24H) && - (s->cmos_data[RTC_HOURS] & 0x80)) { - tm->tm_hour += 12; + if (!(s->cmos_data[RTC_REG_B] & REG_B_24H)) { + tm->tm_hour %= 12; + if (s->cmos_data[RTC_HOURS] & 0x80) { + tm->tm_hour += 12; + } } tm->tm_wday = rtc_from_bcd(s, s->cmos_data[RTC_DAY_OF_WEEK]) - 1; tm->tm_mday = rtc_from_bcd(s, s->cmos_data[RTC_DAY_OF_MONTH]); @@ -320,7 +324,8 @@ static void rtc_copy_date(RTCState *s) s->cmos_data[RTC_HOURS] = rtc_to_bcd(s, tm->tm_hour); } else { /* 12 hour format */ - s->cmos_data[RTC_HOURS] = rtc_to_bcd(s, tm->tm_hour % 12); + int h = (tm->tm_hour % 12) ? tm->tm_hour % 12 : 12; + s->cmos_data[RTC_HOURS] = rtc_to_bcd(s, h); if (tm->tm_hour >= 12) s->cmos_data[RTC_HOURS] |= 0x80; } -- 1.7.7.1