Hi, Alexey!
On May 02, Alexey Botchkov wrote:
> revision-id: ad8b4399f2fcd1d5e9dcdb8b2a8832cb3a6745ae
> (mariadb-10.1.13-23-gad8b439)
> parent(s): ad4239cc3dc7ad5f6f264e1fb3cf6d24084bda90
> committer: Alexey Botchkov
> timestamp: 2016-05-02 12:03:39 +0400
> message:
>
> MDEV-9618 solaris sparc build fails on 10.1.
>
> Compiler on Solaris is sensitive to C/C++ call models
> differences, so it fails if we try to mix these two in
> '?' operator.
> Fixed by trying to keep the call models uniformity with the
> proper amount of 'extern "C"' hints.
>
> ---
> include/my_crypt.h | 6 ++++++
> include/mysql/plugin_audit.h | 7 +++++++
> include/mysql/plugin_encryption.h | 9 +++++++++
> .../example_key_management_plugin.cc | 2 +-
> plugin/file_key_management/file_key_management_plugin.cc | 2 +-
> sql/encryption.cc | 14
> ++++++++++----
> unittest/sql/mf_iocache-t.cc | 2 +-
> 7 files changed, 35 insertions(+), 7 deletions(-)
>
> diff --git a/include/my_crypt.h b/include/my_crypt.h
> index e1e94c9..db280ca 100644
> --- a/include/my_crypt.h
> +++ b/include/my_crypt.h
> @@ -82,6 +82,12 @@ static inline uint my_aes_ctx_size(enum my_aes_mode mode
> __attribute__((unused))
> return MY_AES_CTX_SIZE;
> }
>
> +static inline uint my_aes_ctx_size_for_handler(unsigned int a,
> + unsigned int b __attribute__((unused)))
> +{
> + return my_aes_ctx_size((enum my_aes_mode) a);
> +}
> +
This won't be inlined, because you store a pointer to this function in a
structure. Better use the cast, as before.
> int my_random_bytes(uchar* buf, int num);
>
> #ifdef __cplusplus
> diff --git a/include/mysql/plugin_audit.h b/include/mysql/plugin_audit.h
> index 31589f0..e96f743 100644
> --- a/include/mysql/plugin_audit.h
> +++ b/include/mysql/plugin_audit.h
> @@ -23,6 +23,10 @@
>
> #include "plugin.h"
>
> +#ifdef __cplusplus
> +extern "C" {
> +#endif
I agree, in general. But why does your short patch have nothing
about audit api?
> #define MYSQL_AUDIT_CLASS_MASK_SIZE 1
>
> #define MYSQL_AUDIT_INTERFACE_VERSION 0x0302
> @@ -174,5 +178,8 @@ struct st_mysql_audit
> unsigned long class_mask[MYSQL_AUDIT_CLASS_MASK_SIZE];
> };
>
> +#ifdef __cplusplus
> +}
> +#endif
>
> #endif
> diff --git a/include/mysql/plugin_encryption.h
> b/include/mysql/plugin_encryption.h
> index 3f35c2b..d748c4f 100644
> --- a/include/mysql/plugin_encryption.h
> +++ b/include/mysql/plugin_encryption.h
> @@ -27,6 +27,10 @@
>
> #include <mysql/plugin.h>
>
> +#ifdef __cplusplus
> +extern "C" {
> +#endif
...etc
I agree that these extern "C" are the correct fix.
On the other hand, I don't see a point in moving casts from the
assignment to a new variable definition. So, I'd suggest to keep all
extern "C" hunks in the patch, but remove cast avoidance changes.
Then ok to push!
Regards,
Sergei
Chief Architect MariaDB
and [email protected]
_______________________________________________
Mailing list: https://launchpad.net/~maria-developers
Post to : [email protected]
Unsubscribe : https://launchpad.net/~maria-developers
More help : https://help.launchpad.net/ListHelp