Message ID | d20fbc21-bd8f-c191-ed51-03487868e7b0@suse.de (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
> >> +static inline int rtd119x_rtc_year_days(int year) > >> +{ > >> + return rtc_year_days(1, 12, year); > > > > I'm not sure it is worth wrapping rtc_year_days > [snip] > > Well, I found your rtc_year_days rather confusing and had to play with > the arguments until I got it working as expected, so I wanted an inline > function (or macro) as abstraction from my three callers. I agree with that. I was wondering why 1st December was being used. I would say this API does not do too well on Rusty's API Design Manifesto. It does at least get the day/month/year in the right order ;-) Andrew
On 27/08/2017 at 15:37:51 +0200, Andrew Lunn wrote: > > >> +static inline int rtd119x_rtc_year_days(int year) > > >> +{ > > >> + return rtc_year_days(1, 12, year); > > > > > > I'm not sure it is worth wrapping rtc_year_days > > [snip] > > > > Well, I found your rtc_year_days rather confusing and had to play with > > the arguments until I got it working as expected, so I wanted an inline > > function (or macro) as abstraction from my three callers. > > I agree with that. I was wondering why 1st December was being used. I > would say this API does not do too well on Rusty's API Design > Manifesto. > It follows the convention that tm_mon is 0-11. Making it easy to read for anyone used to the RTC subsystem. I can agree it is not the most intuitive one. That choice predates the RTC subsystem (made in 1996), I won't give any name ;) > It does at least get the day/month/year in the right order ;-) > > Andrew
Hi, On 27/08/2017 at 13:30:59 +0200, Andreas Färber wrote: > Well, I found your rtc_year_days rather confusing and had to play with > the arguments until I got it working as expected, so I wanted an inline > function (or macro) as abstraction from my three callers. > > Sadly the naming is rather confusing as I am looking for the number of > days 365..366, whereas your rtc_year_days is meant to return 0..365 and > I would just like to extract the 12th array element but need to counter > the -1 subtraction. rtc_year_days(31, 11, year) + 1 is not intuitive > either - reads like November (and ranges are not documented). > > What about exporting a convenient rtc_days_in_year(year) from rtc-lib.c > accessing the table directly without rtc_year_days detour? Alternatively > an inline function in rtc.h to the same effect without the array? > This could have been done but what you did in your v3 is fine too. It will always be time to move that to the core later. > Also despite is_leap_year() returning a bool || expression you keep > using it as array index or integer to add. That assumes true == 1, > whereas to my knowledge only false is guaranteed to be 0 and any > non-zero value means true. So I'd expect the code to be like this: sizeof(bool) (actually _Bool) is 1 so it can only be 0 or 1.
diff --git a/drivers/rtc/rtc-lib.c b/drivers/rtc/rtc-lib.c index 1ae7da5cfc60..8983a408fc30 100644 --- a/drivers/rtc/rtc-lib.c +++ b/drivers/rtc/rtc-lib.c @@ -32,7 +32,7 @@ static const unsigned short rtc_ydays[2][13] = { */ int rtc_month_days(unsigned int month, unsigned int year) { - return rtc_days_in_month[month] + (is_leap_year(year) && month == 1); + return rtc_days_in_month[month] + ((is_leap_year(year) && month == 1) ? 1 : 0); }