[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