ehlo, There were few warnings in bind-dyndb-ldap "duplicate 'const' declaration specifier".
It does not make sense to have const twice in declaration like a "const settings_set_t const settings_default_set" This one was false positive. The 2nd warning revealed potential problem. const char const * dns_str With previous declaration, you cannot modify data, but you can modify pointer itself. *dns_str = "asdasd" //compilation error dns_str++ //works fine If you want to disable modification data and disable modification of pointer you will need to have 2nd const modifier after star "*" You can find some examples of "const" usage in attached file test.c or you can read article with explanation of next declaration "char *(*(**foo [][8])())[];" http://eli.thegreenplace.net/2008/07/18/reading-c-type-declarations/ Simple patch is attached. LS
>From cd87f93f81e2d74506757b87117064eea6b3f282 Mon Sep 17 00:00:00 2001 From: Lukas Slebodnik <lsleb...@redhat.com> Date: Wed, 30 Oct 2013 08:52:59 +0100 Subject: [PATCH] Fix warning duplicate 'const' declaration specifier It does not make sense to have const twice in declaration like a "const settings_set_t const settings_default_set" This one was false positive. The 2nd warning revealed potential problem. const char const * dns_str With previous declaration, you cannot modify data, but you can modify pointer itself. *dns_str = "asdasd" //compilation error dns_str++ //works fine If you want to disable modification data and disable modification of pointer you will need to have 2nd const modifier after star "*" --- src/ldap_convert.c | 2 +- src/ldap_helper.c | 2 +- src/settings.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/ldap_convert.c b/src/ldap_convert.c index 5b01b4db8e9cd9b88a8ade735ff82788808d0017..6493fddceb18c07f1ff25003b650df9aa5f62169 100644 --- a/src/ldap_convert.c +++ b/src/ldap_convert.c @@ -231,7 +231,7 @@ cleanup: * will be checked & copied to the output buffer, without any additional escaping. */ isc_result_t -dns_to_ldap_dn_escape(isc_mem_t *mctx, const char const * dns_str, char ** ldap_name) { +dns_to_ldap_dn_escape(isc_mem_t *mctx, const char * const dns_str, char ** ldap_name) { isc_result_t result = ISC_R_FAILURE; char * esc_name = NULL; int idx_symb_first = -1; /* index of first "nice" printable symbol in dns_str */ diff --git a/src/ldap_helper.c b/src/ldap_helper.c index 6a04d2b7da3977e3517fd7f449b7d218be6e1e93..38811d80e28e25e1c8ed90065301e71cbf0606e1 100644 --- a/src/ldap_helper.c +++ b/src/ldap_helper.c @@ -234,7 +234,7 @@ struct ldap_psearchevent { int chgtype; }; -extern const settings_set_t const settings_default_set; +extern const settings_set_t settings_default_set; /** Local configuration file */ static const setting_t settings_local_default[] = { diff --git a/src/settings.c b/src/settings.c index ceb525e5a949086a9486b4c70882f11c5ebe2030..ae5acf93a4f7fb442237400be275f00e0b9806c1 100644 --- a/src/settings.c +++ b/src/settings.c @@ -80,7 +80,7 @@ static const setting_t settings_default[] = { }; /** Settings set for built-in defaults. */ -const settings_set_t const settings_default_set = { +const settings_set_t settings_default_set = { NULL, "built-in defaults", NULL, -- 1.8.3.1
int main(void) { int localVar=0; // Example A const int * ptr_to_const_data = &localVar; // compilation will fail, try to uncomment //*ptr_to_const_data = 1; //test.c: error: assignment of read-only location ‘*ptr_to_const_data’ // *ptr_to_const_data = 1; // incrementation of pointer work fine ptr_to_const_data++; // Example B int const * ptr_to_data_const = &localVar; // compilation will fail, try to uncomment //*ptr_to_data_const = 2; //test.c: error: assignment of read-only location ‘*ptr_to_data_const’ // *ptr_to_data_const = 2; // incrementation of pointer work fine ptr_to_data_const++; // As you can see, there is no difference between example A and example B // But you can try yourself with const int const * ptr_to_const_data_const = &localVar; // example C int * const const_ptr_to_data = &localVar; // modification to refered data is OK *const_ptr_to_data = 3; // cannot compile incrementation of pointer, try to uncomment //const_ptr_to_data++; //test.c: error: increment of read-only variable ‘const_ptr_to_data’ // const_ptr_to_data++; //example D int const * const const_ptr_to_const_data = &localVar; // compilation will fail, try to uncomment //*const_ptr_to_const_data = 4; //test.c: error: assignment of read-only location ‘*const_ptr_to_const_data // *const_ptr_to_const_data = 4; // cannot compile incrementation of pointer, try to uncomment //const_ptr_to_const_data++; //test.c: error: increment of read-only variable ‘const_ptr_to_const_data’ // const_ptr_to_const_data++; //example E // situation is the same as in example D const int * const const_ptr_to_data_const = &localVar; return 0; }
_______________________________________________ Freeipa-devel mailing list Freeipa-devel@redhat.com https://www.redhat.com/mailman/listinfo/freeipa-devel