syntax error in source3/locking/brlock.c

Thomas Schulz schulz at adi.com
Sat Mar 7 12:18:11 MST 2015


> On Fri, Mar 06, 2015 at 01:54:38PM -0700, Christof Schmitt wrote:
>> On Fri, Mar 06, 2015 at 09:41:19PM +0100, Volker Lendecke wrote:
>>> On Fri, Mar 06, 2015 at 01:35:31PM -0700, Christof Schmitt wrote:
>>>> On Fri, Mar 06, 2015 at 01:26:43PM -0500, Thomas Schulz wrote:
>>>>> I have been building 4.2.0 on Solaris 10 using the GNU C compiler. I decided
>>>>> to see what happens with Sun's C 5.11 SunOS_i386 compiler. It complains
>>>>> with the following error:
>>>>> 
>>>>> "../source3/locking/brlock.c", line 2008: syntax error before or at: }
>>>>> cc: acomp failed for ../source3/locking/brlock.c
>>>>> 
>>>>> The offending line is:
>>>>> 
>>>>>         *br_lck = (struct byte_range_lock) {};
>>>>> 
>>>>> The GNU C compiler thinks that this line is OK. Does anyone have an
>>>>> idea what is intended here and why the Sun compiler does not like it?
>>>> 
>>>> Try changing this to:
>>>> 	*br_lck = (struct byte_range_lock) { 0 };
>>>> 
>>>> I think that strictly speaking C, does not allow omitting the 0, but C++
>>>> compatible compilers allow it. With -pedantic, gcc also warns about
>>>> this:  warning: ISO C forbids empty initializer braces
>>> 
>>> Yep.
>>> 
>>> $ git grep '{}'|grep c:|wc -l
>>> 153
>>> 
>>> That would be a 153-line patch I guess. Or you can gain 153
>>> ohloh-points with single patches :-)
>> 
>> It might be even less than 153 patches, there also some empty code
>> blocks in there. Let me try to put a patch together, having single
>> patches would be too much overhead.
> 
> The diffstat now shows 124 lines, see attached patch. Would be it
> possible to compile test master with this patch with the SunOS compiler,
> to see whether there are other issues remaining?
> 
> Christof

Applying the patch to 4.2.0rc5 (the release is killing me with the
requirements for gnutls and gcrypt), the following files were patched:

lib/ldb/common/ldb_msg.c
source3/locking/brlock.c
source3/modules/non_posix_acls.c
source3/passdb/pdb_get_set.c
source3/smbd/dir.c
source3/smbd/notify_internal.c
source4/lib/wmi/tools/wmic.c
source4/lib/wmi/tools/wmis.c
source4/libcli/wbclient/wbclient.c
source4/torture/raw/acls.c
source4/torture/raw/unlink.c
source4/torture/smb2/create.c
source4/torture/smb2/dir.c
source4/torture/smb2/lease.c
source4/torture/smb2/util.c

The following were not patched:

auth/gensec/schannel.c
libcli/auth/netlogon_creds_cli.c
source3/lib/messages_dgm.c
source3/lib/srprs.c
source3/passdb/pdb_samba_dsdb.c
source3/profile/profile.c
source3/utils/status_profile.c
source4/kdc/db-glue.c
source4/torture/rpc/schannel.c

All of the patched files were compiled except for:

source4/lib/wmi/tools/wmic.c
source4/lib/wmi/tools/wmis.c

which were skipped.

In each case the umpatched file (except brlock.c which had a fatal error)
created the warning
'warning: syntax error:  empty initializer'
and the patched file compiled without that warning.

Of the files that could not be patched, only

source3/lib/messages_dgm.c

generated that warning.

I could try to get the master and build that, but I will have to get
newer versions of at least gnutls and gcrypt before I can go past 4.2.0rc5.

Tom Schulz
Applied Dynamics Intl.
schulz at adi.com


More information about the samba-technical mailing list