[Pvfs2-developers] state machine compiler tweaks
Walter B. Ligon III
walt at clemson.edu
Tue May 30 09:28:47 EDT 2006
Which is more common in compilers:
static struct foo foobar = {
field1: value1,
field4: value4
};
OR what's shown below:
static struct foo foobar = {
.field1 = value1,
.field4 = value4
};
The first is used by the kernel code, and has been around for quite a
while. I'm not sure what the second form gives us that the first one
doesn't. Unless there is a good reason otherwise we should probably
stick with the most widely supported.
Walt
Murali Vilayannur wrote:
> Hi Pete,
> Oops that was my bad..I did not realize that this syntax is not supported
> by many compilers! I was once bitten by initializing a struct
> incorrectly, and I committed that change since I assumed that a user would
> not be able to compile the kmod without having a compiler that understands
> that syntax.
> Thanks,
> Murali
>
> On Mon, 29 May 2006, Pete Wyckoff wrote:
>
>
>>bradles at parl.clemson.edu wrote on Mon, 29 May 2006 10:33 -0400:
>>
>>>Pete Wyckoff wrote:
>>>
>>>
>>>>Another possible way to fix this is by using named initializers,
>>>>like
>>>>
>>>> static union PINT_state_array_values ST_setup_msgpairs[] = {
>>>> { .state_name = "setup_msgpairs" },
>>>> { .parent_machine = &pvfs2_client_small_io_sm },
>>>> { .flag = SM_NONE },
>>>> ...
>>>>
>>>>which would be just dandy, but not all compilers have caught up with
>>>>this nice C99-ism. I didn't want to exclude old compilers, or
>>>>support two versions and add a configure check, so rejected this
>>>>idea.
>>>>
>>>
>>>I wondered when this became legal -- I love it! It is already being
>>>used in the distribution code (that is where I learned about it), so I
>>>guess it is okay to begin using everywhere.
>>
>>Right you are, I had totally forgotten about that usage. Thus it
>>seems we have implicitly decided that this feature in a compiler is
>>mandatory. I think that rules out ancient things like gcc 2.95 and
>>some vendor compilers, but that's fine by me.
>>
>>This new version has my vote:
>>
>> struct PINT_state_machine_s pvfs2_client_small_io_sm = {
>> .name = "pvfs2_client_small_io_sm",
>> .state_machine = ST_setup_msgpairs
>> };
>>
>> static union PINT_state_array_values ST_setup_msgpairs[] = {
>> { .state_name = "setup_msgpairs" },
>> { .parent_machine = &pvfs2_client_small_io_sm },
>> { .flag = SM_NONE },
>> { .state_action = small_io_setup_msgpairs },
>> { .return_value = 0 },
>> { .next_state = ST_xfer_msgpairs },
>> { .return_value = -1 },
>> { .flag = SM_RETURN }
>> };
>>
>>Thanks for pointing this out Brad. I'll commit it in a day or so
>>unless there are any strong objections. Diff attached.
>>
>> -- Pete
>>
>
> _______________________________________________
> Pvfs2-developers mailing list
> Pvfs2-developers at beowulf-underground.org
> http://www.beowulf-underground.org/mailman/listinfo/pvfs2-developers
--
Dr. Walter B. Ligon III
Associate Professor
ECE Department
Clemson University
More information about the Pvfs2-developers
mailing list