svn commit: r209578 - head/sys/sys

mdf at FreeBSD.org mdf at FreeBSD.org
Tue Jun 29 13:46:24 UTC 2010


2010/6/29 Kostik Belousov <kostikbel at gmail.com>:
> On Mon, Jun 28, 2010 at 02:07:02PM -0700, Matthew Fleming wrote:
>> On Mon, Jun 28, 2010 at 10:59 AM, Konstantin Belousov <kib at freebsd.org> wrote:
>> > Author: kib
>> > Date: Mon Jun 28 17:59:45 2010
>> > New Revision: 209578
>> > URL: http://svn.freebsd.org/changeset/base/209578
>> >
>> > Log:
>> >  Use C99 initializers for the struct sysent generated by MAKE_SYSENT().
>> >
>> >  MFC after:    1 week
>> >
>> > Modified:
>> >  head/sys/sys/sysent.h
>> >
>> > Modified: head/sys/sys/sysent.h
>> > ==============================================================================
>> > --- head/sys/sys/sysent.h       Mon Jun 28 17:45:00 2010        (r209577)
>> > +++ head/sys/sys/sysent.h       Mon Jun 28 17:59:45 2010        (r209578)
>> > @@ -144,10 +144,10 @@ struct syscall_module_data {
>> >
>> >  #define        MAKE_SYSENT(syscallname)                                \
>> >  static struct sysent syscallname##_sysent = {                  \
>> > -       (sizeof(struct syscallname ## _args )                   \
>> > +       .sy_narg = (sizeof(struct syscallname ## _args )        \
>> >            / sizeof(register_t)),                              \
>> > -       (sy_call_t *)& syscallname,                             \
>> > -       SYS_AUE_##syscallname                                   \
>> > +       .sy_call = (sy_call_t *)& syscallname,                  \
>> > +       .sy_auevent = SYS_AUE_##syscallname,                    \
>> >  }
>> >
>> >  #define SYSCALL_MODULE(name, offset, new_sysent, evh, arg)     \
>> >
>>
>> This change prevents (I assume) the use of MAKE_SYSENT() in a C++
>> kernel module, as C++ does not support the .name = value style of
>> named initializers.
>>
>> gcc does allow name: value initializers and it's easy to patch it to
>> accept .name = value, but it's not strictly conforming C++ code
>> anymore.
> I do not mind reverting this, I think it would be better then
> having #ifdef __cplusplus and two definitions. I really wanted to
> have a way to provide sparce initializator for the struct sysent.
> I managed to not require it for r209579.

I agree it's really handy to have sparse initializers; I just haven't
thought of a way to do that and continue to allow 3rd party c++
modules.  Perhaps we'll get a new c++ standard soon that supports this
syntax. :-)

Thanks,
matthew


More information about the svn-src-all mailing list