svn commit: r332072 - head/sys/sys
Warner Losh
imp at bsdimp.com
Thu Apr 5 15:58:38 UTC 2018
On Thu, Apr 5, 2018 at 9:46 AM, Roger Pau Monné <royger at freebsd.org> wrote:
> On Thu, Apr 05, 2018 at 09:32:57AM -0600, Ian Lepore wrote:
> > On Thu, 2018-04-05 at 14:31 +0000, Roger Pau Monné wrote:
> > > Author: royger
> > > Date: Thu Apr 5 14:31:54 2018
> > > New Revision: 332072
> > > URL: https://svnweb.freebsd.org/changeset/base/332072
> > >
> > > Log:
> > > introduce GiB and MiB macros
> > >
> > > This macros convert from GiB or MiB into bytes.
> > >
> > > Sponsored by: Citrix Systems R&D
> > >
> > > Modified:
> > > head/sys/sys/param.h
> > >
> > > Modified: head/sys/sys/param.h
> > > ============================================================
> ==================
> > > --- head/sys/sys/param.h Thu Apr 5 14:25:39 2018 (r332071)
> > > +++ head/sys/sys/param.h Thu Apr 5 14:31:54 2018 (r332072)
> > > @@ -362,4 +362,8 @@ __END_DECLS
> > > */
> > > #define __PAST_END(array, offset) (((__typeof__(*(array))
> *)(array))[offset])
> > >
> > > +/* Unit conversion macros. */
> > > +#define GiB(v) (v ## ULL << 30)
> > > +#define MiB(v) (v ## ULL << 20)
> > > +
> > > #endif /* _SYS_PARAM_H_ */
> > >
> >
> > These names don't make it clear whether the conversion is bytes->GiB or
> > GiB->bytes. The names seem way too generic for a public namespace in a
> > file as heavily included behind your back as param.h is.
> >
> > Also, this completely reasonable usage won't work, likely with
> > confusing compile error messages:
> >
> > int bytes, gibytes;
> > ...
> > bytes = GiB(gibytes);
>
> I find those helpful for their specific usage. I could introduce
> static inline functions like:
>
> size_t gb_to_bytes(size_t)...
>
> But I assume this is also going to cause further discussion.
>
Yea, traditional macro names would be "gibtob" and "btogib" but I didn't
just reply to bikeshed a name:
But you don't need to specify a type, consider the current btodb macro:
#define btodb(bytes) /* calculates (bytes / DEV_BSIZE)
*/ \
(sizeof (bytes) > sizeof(long) \
? (daddr_t)((unsigned long long)(bytes) >> DEV_BSHIFT) \
: (daddr_t)((unsigned long)(bytes) >> DEV_BSHIFT))
which shows how to do this in a macro, which is orthogonal to any name you
may choose. I can also bikeshed function vs macro :)
Warner
More information about the svn-src-head
mailing list