On 2011-07-07 13:23, David Henningsson wrote: > diff --git a/src/pulse/introspect.h b/src/pulse/introspect.h > index 8e4cc97..259c57b 100644 > --- a/src/pulse/introspect.h > +++ b/src/pulse/introspect.h > @@ -452,6 +452,10 @@ typedef struct pa_card_profile_info { > uint32_t n_sinks; /**< Number of sinks this profile would create */ > uint32_t n_sources; /**< Number of sources this profile would create */ > uint32_t priority; /**< The higher this value is the more useful this profile is as a default */ > + uint32_t n_sink_ports; /**< Number of entries in sink_ports array \since MERGE_OF_JACK_DETECTION */ > + pa_sink_port_info** sink_ports; /**< Array of available output ports, or NULL. Array is terminated by an entry set to NULL. The number of entries is stored in n_sink_ports. \since MERGE_OF_JACK_DETECTION */ > + uint32_t n_source_ports; /**< Number of entries in source_ports array \since MERGE_OF_JACK_DETECTION */ > + pa_source_port_info** source_ports; /**< Array of available input ports, or NULL. Array is terminated by an entry set to NULL. The number of entries is stored in n_source_ports. \since MERGE_OF_JACK_DETECTION */ > } pa_card_profile_info; I think I figured out why the addition above breaks the ABI: It's because pa_card_info has a pointer to an array of these objects, with the following comment: pa_card_profile_info* profiles; /**< Array of available profile, or NULL. Array is terminated by an entry with name set to NULL. Number of entries is stored in n_profiles */ Which means the client has to rely on sizeof(pa_card_profile_info) to know the address of the second (and third, and so on) array entry. As sizeof(pa_card_profile_info) is changed, recompilation of clients is necessary. :-( Any good ideas as of how to avoid it? -- David Henningsson http://launchpad.net/~diwic