Skip to content
  • Måns Rullgård's avatar
    Replace "extern inline" with "static inline" · 44d0677a
    Måns Rullgård authored
    
    
    A number of headers define functions as "extern inline" which is
    causing problems with gcc5.  The reason is that starting with
    version 5.1, gcc defaults to the standard C99 semantics for the
    inline keyword.
    
    Under the traditional GNU inline semantics, an "extern inline"
    function would never create an external definition, the same
    as inline *without* extern in C99.  In C99, and "extern inline"
    definition is simply an external definition with an inline hint.
    In short, the meanings of inline with and without extern are
    swapped between GNU and C99.
    
    The upshot is that all these definitions in header files create
    an external definition wherever those headers are included,
    resulting in multiple definition errors at link time.
    
    Changing all these functions to "static inline" fixes the problem
    since this works as desired in all gcc versions.  Although the
    semantics are slightly different (a static inline definition may
    result in an actual function being emitted), it works as intended
    in practice.
    
    This patch also removes extern prototype declarations for the
    changed functions where they existed.
    
    Signed-off-by: default avatarMans Rullgard <mans@mansr.com>
    44d0677a