[pacman-dev] [PATCH v2 2/2] Update the question callback

Allan McRae allan at archlinux.org
Tue Jun 24 02:14:33 EDT 2014


On 26/05/14 01:30, Andrew Gregory wrote:
> On 05/24/14 at 03:49pm, Olivier Brunel wrote:
>> Much like with events, instead of using a bunch of void* arguments for
>> all questions, we now send one pointer to an alpm_question_t struct.
>> This contains the type of question that was triggered.
>>
>> With this information, the pointer can then be typecasted to the
>> question-specific struct in order to get additional arguments.
>>
>> Signed-off-by: Olivier Brunel <jjk at jjacky.com>
>> ---
>>  lib/libalpm/alpm.h    |  92 +++++++++++++++++++++++++++++++++++++++--
>>  lib/libalpm/deps.c    |  38 ++++++++++-------
>>  lib/libalpm/handle.h  |   4 +-
>>  lib/libalpm/signing.c |  12 ++++--
>>  lib/libalpm/sync.c    |  60 +++++++++++++++++----------
>>  src/pacman/callback.c | 110 +++++++++++++++++++++++++++-----------------------
>>  src/pacman/callback.h |   3 +-
>>  7 files changed, 222 insertions(+), 97 deletions(-)
> 
> The generic to specific struct casts cause Clang to fail when pacman
> is configured with --enable-warningflags:
> 
>  callback.c:377:44: error: cast from 'alpm_question_t *' (aka 'struct
>        _alpm_question_t *') to 'alpm_question_install_ignorepkg_t *'
>        (aka 'struct _alpm_question_install_ignorepkg_t *') increases
>        required alignment from 4 to 8 [-Werror,-Wcast-align]
>    ...*q = (alpm_question_install_ignorepkg_t *) question;
>            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> 

These are silenced.

> The earlier changes to the event callback have the same issue and also
> give errors about using non-literal strings with vprintf:
> 
>  testdb.c:53:11: error: format string is not a string literal
>        [-Werror,-Wformat-nonliteral]
>                  vprintf(event->fmt, event->args);
>                          ^~~~~~~~~~


BAH!   Why did gcc no see this?

Anyway, possible ways to fix this:

1)
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wformat-nonliteral"
                vprintf(event->fmt, event->args);
+#pragma GCC diagnostic pop

This is crap because all clients that want to print a log message will
need to wrap their calls like this.

2)
Revert that change that made the logging an event.


Unless someone comes up with something else, I'll do the revert soon.

Allan


More information about the pacman-dev mailing list