Remaining "cast"/"const" patches

Andrew Bartlett abartlet at samba.org
Tue Oct 27 19:45:11 MDT 2009


On Sun, 2009-10-18 at 16:25 +0000, Matthias Dieter Wallnöfer wrote:
> Andrew,
> 
> I finished the split-up. It's not reasonable to post the patches as attachment - so they're only in my private repo. Maybe you like to write the filenames or patch titles of those which look okay.

I've tried to comment on these a bit more, so you can have a chance to
fix them.  In short, all the changes need work and review, but I hope
that these thoughts can clarify the situation a bit more, as regards
these particular patches.

As such, please do not merge any of the const patches in their current
form. 

A lot of these patches would be much more acceptable if a function
were developed that took a char ** and returned a const char **.  This
would avoid a *lot* of casts, and be able to enforce the type safety
of the operation.

    s4:torture/rpc/wkssvc - Add better cast
Perhaps instead change the type of *msg and put the cast on the
assignment into r.in.message_buffer?  But I think the IDL is wrong
here - we should very rarely do manual character set conversion in
Samba.  We should check with dochelp first about this, as it's not in
the WSPP docs. 

    s4:torture/raw/samba3misc - Add "discard_const_p" macro before a
string
I've merged this patch. 

    s4:torture/nbt/wins - Add more casts
This needs the casting function I talked about above.

    s4:torture/nbench/nbench - Add a cast before "str_list_make_shell"
This needs the casting function I talked about above.

    s4:torture/ldap/ldap_sort - Add some casts to suppress warnings
I agree this test is a bit of a mess, but I'm not really sure what to
do about it.  I don't think these casts are the right solution.

    s4:param/loadparm - Add new casts (needed due to API changes of
"str_list_equal")
I'm not sure about this (the casts are really hairy either way)

    s4:ntvfs/posix - Remove some "const"
This commit message is highly misleading, as you add a talloc_strdup().
Why do you need that?

(An extra talloc seems harmless - but I managed to slow down Samba by
2x with a single extra talloc in my partition changes!)

    s4:nbt_server/wins/winsdb - Remove "const" in front of "str"
This would be better as data_blob_string_const()

    s4:ldb_map - Remove "const" from search tree
This needs a more complete fix.  ldb_map modifies the search tree, and
it should not. 

    s4:schema - Make some more (result) variables const and fix up
warnings with "discard_const_p"
This I almost like, except the way we lie and claim the 'schema' is
const.  We should instead have a way to get a 'non-const' schema
(perfectly valid, as we are still constructing it at this point).

With a bit more work, we may be able to merge this. 

    s4:dsdb/samdb/ldb_modules/acl - Add "const" and casts and remove
unused variables
Please either forward to nivanova or skip for now, to avoid merge
problems. 

    nsswitch/pam_winbind: "CONST_DISCARD" isn't needed at all here
Perhaps make investigations as to why this was added in the first
place?  Preusmably older iniparser libraries are not const safe.

    libcli/nbt/nbtname: Attempt made to remove "discard_const_p" call
I don't see how the change in ndr_pull_nbt_string() removes a
discard_const_p(), and it changes behaviour.  It may be a correct
change, but it needs to be seperate and justified.

I see it it partly to then make ndr_pull_nbt_string() simpiler, but
have you looked for other callers, and can you better explain what you
are doing.  Either way, this and any other change outside source4/
must be specifically checked with Volker (as he already expressed an
objection).

    libcli/named_pipe_auth/npa_tstream: Remove a "const" from prototype
of "tstream_npa_connect_send" to prevent "discard_const_p"
Check this with metze, but did you try changing 'struct
named_pipe_auth_req_info3 *info3' instead?  Doesn't this just push the
problem to the caller?

    util/strlist: Fix up "const" warnings in the string list and test
code
Why do we need this when casting from a void *?
	const struct test_list_element *element =
				(const struct test_list_element *) data;

This also needs a 'char ** to const char **' function I think.

    charset/tests/iconv - Remove the "const" from "ptr_in" to prevent
"discard_const_p" use
    tdb tools: Cosmetic adaptions and substitute one "free" with
"SAFE_FREE"
These should be put past Rusty (defacto TDB maintainer) for comment,
but why is SAFE_FREE better here?  This is a stack variable about to
go out of scope.

    mount.cifs: Fix "discard const pointer" warning through introducing
the "discard_const_p" macro
These should be put past those maintaining mount.cifs (Steve French et
al)

Andrew Bartlett

-- 
Andrew Bartlett                                http://samba.org/~abartlet/
Authentication Developer, Samba Team           http://samba.org
Samba Developer, Cisco Inc.

-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: This is a digitally signed message part
URL: <http://lists.samba.org/pipermail/samba-technical/attachments/20091028/3a8a4b28/attachment.pgp>


More information about the samba-technical mailing list