diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/asterisk/agi.h | 15 | ||||
-rw-r--r-- | include/asterisk/autoconfig.h.in | 55 | ||||
-rw-r--r-- | include/asterisk/compiler.h | 12 | ||||
-rw-r--r-- | include/asterisk/monitor.h | 33 | ||||
-rw-r--r-- | include/asterisk/optional_api.h | 148 | ||||
-rw-r--r-- | include/asterisk/smdi.h | 57 |
6 files changed, 216 insertions, 104 deletions
diff --git a/include/asterisk/agi.h b/include/asterisk/agi.h index c44aafc3f..210b895ad 100644 --- a/include/asterisk/agi.h +++ b/include/asterisk/agi.h @@ -72,7 +72,8 @@ typedef struct agi_command { * \return 1 on success, 0 if the command is already registered * */ -AST_OPTIONAL_API(int, ast_agi_register, (struct ast_module *mod, agi_command *cmd), +AST_OPTIONAL_API(int, ast_agi_register, + (struct ast_module *mod, agi_command *cmd), { return AST_OPTIONAL_API_UNAVAILABLE; }); /*! @@ -85,7 +86,8 @@ AST_OPTIONAL_API(int, ast_agi_register, (struct ast_module *mod, agi_command *cm * \return 1 on success, 0 if the command was not already registered * */ -AST_OPTIONAL_API(int, ast_agi_unregister, (struct ast_module *mod, agi_command *cmd), +AST_OPTIONAL_API(int, ast_agi_unregister, + (struct ast_module *mod, agi_command *cmd), { return AST_OPTIONAL_API_UNAVAILABLE; }); /*! @@ -103,7 +105,8 @@ AST_OPTIONAL_API(int, ast_agi_unregister, (struct ast_module *mod, agi_command * * will be unregistered. In other words, this function registers all the provided commands, or none * of them. */ -AST_OPTIONAL_API(int, ast_agi_register_multiple, (struct ast_module *mod, struct agi_command *cmd, unsigned int len), +AST_OPTIONAL_API(int, ast_agi_register_multiple, + (struct ast_module *mod, struct agi_command *cmd, unsigned int len), { return AST_OPTIONAL_API_UNAVAILABLE; }); /*! @@ -120,7 +123,8 @@ AST_OPTIONAL_API(int, ast_agi_register_multiple, (struct ast_module *mod, struct * \note If any command fails to unregister, this function will continue to unregister the * remaining commands in the array; it will not reregister the already-unregistered commands. */ -AST_OPTIONAL_API(int, ast_agi_unregister_multiple, (struct ast_module *mod, struct agi_command *cmd, unsigned int len), +AST_OPTIONAL_API(int, ast_agi_unregister_multiple, + (struct ast_module *mod, struct agi_command *cmd, unsigned int len), { return AST_OPTIONAL_API_UNAVAILABLE; }); /*! @@ -134,7 +138,8 @@ AST_OPTIONAL_API(int, ast_agi_unregister_multiple, (struct ast_module *mod, stru * \return 0 for success, -1 for failure, AST_OPTIONAL_API_UNAVAILABLE if res_agi is not loaded * */ -AST_OPTIONAL_API_ATTR(int, format(printf, 3, 4), ast_agi_send, (int fd, struct ast_channel *chan, char *fmt, ...), +AST_OPTIONAL_API_ATTR(int, format(printf, 3, 4), ast_agi_send, + (int fd, struct ast_channel *chan, char *fmt, ...), { return AST_OPTIONAL_API_UNAVAILABLE; }); #if defined(__cplusplus) || defined(c_plusplus) diff --git a/include/asterisk/autoconfig.h.in b/include/asterisk/autoconfig.h.in index 33b6d2f49..e11ea6b1f 100644 --- a/include/asterisk/autoconfig.h.in +++ b/include/asterisk/autoconfig.h.in @@ -94,9 +94,6 @@ /* Define to 1 if you have the `atexit' function. */ #undef HAVE_ATEXIT -/* Define to 1 if your GCC C compiler supports the 'alias' attribute. */ -#undef HAVE_ATTRIBUTE_alias - /* Define to 1 if your GCC C compiler supports the 'always_inline' attribute. */ #undef HAVE_ATTRIBUTE_always_inline @@ -123,12 +120,12 @@ attribute. */ #undef HAVE_ATTRIBUTE_warn_unused_result -/* Define to 1 if your GCC C compiler supports the 'weak' attribute. */ -#undef HAVE_ATTRIBUTE_weak - /* Define to 1 if your GCC C compiler supports the 'weak_import' attribute. */ #undef HAVE_ATTRIBUTE_weak_import +/* Define to 1 if your GCC C compiler supports the 'weakref' attribute. */ +#undef HAVE_ATTRIBUTE_weakref + /* Define this to indicate the ${BKTR_DESCRIP} library */ #undef HAVE_BKTR @@ -1214,9 +1211,6 @@ /* Define to the version of this package. */ #undef PACKAGE_VERSION -/* Define to 1 if the C compiler supports function prototypes. */ -#undef PROTOTYPES - /* Define to necessary symbol if this constant uses a non-standard name on your system. */ #undef PTHREAD_CREATE_JOINABLE @@ -1233,11 +1227,6 @@ /* Define to the type of arg 5 for `select'. */ #undef SELECT_TYPE_ARG5 -/* Define to 1 if the `setvbuf' function takes the buffering type as its - second argument and the buffer pointer as the third, as on System V before - release 3. */ -#undef SETVBUF_REVERSED - /* The size of `int', as computed by sizeof. */ #undef SIZEOF_INT @@ -1258,20 +1247,30 @@ /* Define to 1 if your <sys/time.h> declares `struct tm'. */ #undef TM_IN_SYS_TIME -/* Define to 1 if on AIX 3. - System headers sometimes define this. - We just want to avoid a redefinition error message. */ +/* Enable extensions on AIX 3, Interix. */ #ifndef _ALL_SOURCE # undef _ALL_SOURCE #endif - -/* Number of bits in a file offset, on hosts where this is settable. */ -#undef _FILE_OFFSET_BITS - /* Enable GNU extensions on systems that have them. */ #ifndef _GNU_SOURCE # undef _GNU_SOURCE #endif +/* Enable threading extensions on Solaris. */ +#ifndef _POSIX_PTHREAD_SEMANTICS +# undef _POSIX_PTHREAD_SEMANTICS +#endif +/* Enable extensions on HP NonStop. */ +#ifndef _TANDEM_SOURCE +# undef _TANDEM_SOURCE +#endif +/* Enable general extensions on Solaris. */ +#ifndef __EXTENSIONS__ +# undef __EXTENSIONS__ +#endif + + +/* Number of bits in a file offset, on hosts where this is settable. */ +#undef _FILE_OFFSET_BITS /* Define to 1 to make fseeko visible on some hosts (e.g. glibc 2.2). */ #undef _LARGEFILE_SOURCE @@ -1289,20 +1288,6 @@ /* Define to 1 if you need to in order for `stat' and other things to work. */ #undef _POSIX_SOURCE -/* Enable extensions on Solaris. */ -#ifndef __EXTENSIONS__ -# undef __EXTENSIONS__ -#endif -#ifndef _POSIX_PTHREAD_SEMANTICS -# undef _POSIX_PTHREAD_SEMANTICS -#endif -#ifndef _TANDEM_SOURCE -# undef _TANDEM_SOURCE -#endif - -/* Define like PROTOTYPES; this can be used by system headers. */ -#undef __PROTOTYPES - /* Define to empty if `const' does not conform to ANSI C. */ #undef const diff --git a/include/asterisk/compiler.h b/include/asterisk/compiler.h index 15a750f9c..b2db7ffdb 100644 --- a/include/asterisk/compiler.h +++ b/include/asterisk/compiler.h @@ -68,16 +68,4 @@ /* Some older version of GNU gcc (3.3.5 on OpenBSD 4.3 for example) dont like 'NULL' as sentinel */ #define SENTINEL ((char *)NULL) -#ifdef HAVE_ATTRIBUTE_weak -#define attribute_weak __attribute__((weak)) -#else -#define attribute_weak -#endif - -#ifdef HAVE_ATTRIBUTE_weak_import -#define attribute_weak_import __attribute__((weak_import)) -#else -#define attribute_weak_import -#endif - #endif /* _ASTERISK_COMPILER_H */ diff --git a/include/asterisk/monitor.h b/include/asterisk/monitor.h index 4014939bb..e29622ea8 100644 --- a/include/asterisk/monitor.h +++ b/include/asterisk/monitor.h @@ -51,27 +51,34 @@ struct ast_channel_monitor { }; /* Start monitoring a channel */ -AST_OPTIONAL_API(int, ast_monitor_start, (struct ast_channel *chan, const char - *format_spec, const char *fname_base, int need_lock, int stream_action), - { return -1; }); +AST_OPTIONAL_API(int, ast_monitor_start, + (struct ast_channel *chan, const char *format_spec, + const char *fname_base, int need_lock, int stream_action), + { return -1; }); /* Stop monitoring a channel */ -AST_OPTIONAL_API(int, ast_monitor_stop, (struct ast_channel *chan, int - need_lock), { return -1; }); +AST_OPTIONAL_API(int, ast_monitor_stop, + (struct ast_channel *chan, int need_lock), + { return -1; }); /* Change monitoring filename of a channel */ -AST_OPTIONAL_API(int, ast_monitor_change_fname, (struct ast_channel *chan, - const char *fname_base, int need_lock), { return -1; }); +AST_OPTIONAL_API(int, ast_monitor_change_fname, + (struct ast_channel *chan, const char *fname_base, + int need_lock), + { return -1; }); -AST_OPTIONAL_API(void, ast_monitor_setjoinfiles, (struct ast_channel *chan, - int turnon), { return; }); +AST_OPTIONAL_API(void, ast_monitor_setjoinfiles, + (struct ast_channel *chan, int turnon), + { return; }); /* Pause monitoring of a channel */ -AST_OPTIONAL_API(int, ast_monitor_pause, (struct ast_channel *chan), - { return -1; }); +AST_OPTIONAL_API(int, ast_monitor_pause, + (struct ast_channel *chan), + { return -1; }); /* Unpause monitoring of a channel */ -AST_OPTIONAL_API(int, ast_monitor_unpause, (struct ast_channel *chan), - { return -1; }); +AST_OPTIONAL_API(int, ast_monitor_unpause, + (struct ast_channel *chan), + { return -1; }); #endif /* _ASTERISK_MONITOR_H */ diff --git a/include/asterisk/optional_api.h b/include/asterisk/optional_api.h index 1af596ec1..df875a849 100644 --- a/include/asterisk/optional_api.h +++ b/include/asterisk/optional_api.h @@ -32,14 +32,14 @@ * * To accomodate this situation, the AST_OPTIONAL_API macro allows an API * function to be declared in a special way, if Asterisk being built on a - * platform that supports the GCC 'weak' and 'alias' attributes. If so, - * the API function is actually a weak symbol, which means if the provider - * of the API is not loaded, the symbol can still be referenced (unlike a + * platform that supports special compiler and dynamic linker attributes. + * If so the API function will actually be a weak symbol, which means if the + * provider of the API is not loaded, the symbol can still be referenced (unlike a * strong symbol, which would cause an immediate fault if not defined when * referenced), but it will return NULL signifying the linker/loader was * not able to resolve the symbol. In addition, the macro defines a hidden * 'stub' version of the API call, using a provided function body, and uses - * the alias attribute to make the API function symbol actually resolve to + * various methods to make the API function symbol actually resolve to * that hidden stub, but only when the *real* provider of the symbol has * not been found. * @@ -57,13 +57,25 @@ * safely know that the API is not available, and to avoid using any * other APIs from the not-present provider. * + * In addition to this declaration in the header file, the actual definition of + * the API function must use the AST_OPTIONAL_API_NAME macro to (possibly) + * modify the real name of the API function, depending on the specific + * implementation requirements. The corresponding example from res_agi.c: + * + * \code + * int AST_OPTIONAL_API_NAME(ast_agi_register)(struct ast_module *mod, agi_command *cmd) + * { + * ... + * } + * \endcode + * * In the module providing the API, the AST_OPTIONAL_API macro must * be informed that it should not build the hidden stub function or * apply special aliases to the function prototype; this can be done * by defining AST_API_MODULE just before including the header file * containing the AST_OPTIONAL_API macro calls. * - * \note If the GCC 'weak' and 'alias' attributes are not available, + * \note If the platform does not provide adequate resources, * then the AST_OPTIONAL_API macro will result in a non-optional function * definition; this means that any consumers of the API functions so * defined will require that the provider of the API functions be @@ -83,17 +95,115 @@ */ #define AST_OPTIONAL_API_UNAVAILABLE INT_MIN -#if defined(HAVE_ATTRIBUTE_weak_import) && !defined(AST_API_MODULE) -#define AST_OPTIONAL_API(result, name, proto, stub) result name proto __attribute__((weak_import)); -#define AST_OPTIONAL_API_ATTR(result, attr, name, proto, stub) result name proto __attribute__((weak_import,attr)); -#elif defined(HAVE_ATTRIBUTE_weak) && defined(HAVE_ATTRIBUTE_alias) && !defined(AST_API_MODULE) && !defined(HAVE_ATTRIBUTE_weak_import) -#define AST_OPTIONAL_API(result, name, proto, stub) \ - static result __##name proto stub; \ - result __attribute__((weak, alias("__" __stringify(name)))) name proto; -#define AST_OPTIONAL_API_ATTR(result, attr, name, proto, stub) \ - static result __attribute__((attr)) __##name proto stub; \ - result __attribute__((weak, alias("__" __stringify(name)), attr)) name proto; + +#if defined(HAVE_ATTRIBUTE_weak_import) + +/* + * This is the Darwin (Mac OS/X) implementation, that only provides the + * 'weak_import' compiler attribute for weak symbols. On this platform, + * + * - The module providing the API will only provide a '__' prefixed version + * of the API function to other modules (this will be hidden from the other + * modules by the macros), so any modules compiled against older versions + * of the module that provided a non-prefixed version of the API function + * will fail to link at runtime. + * - In the API module itself, access to the API function without using a + * prefixed name is provided by a static pointer variable that holds the + * function address. + * - 'Consumer' modules of the API will use a combination of a weak_import + * symbol, a local stub function, a pointer variable and a constructor function + * (which initializes that pointer variable as the module is being loaded) + * to provide safe, optional access to the API function without any special + * code being required. + */ + +#define AST_OPTIONAL_API_NAME(name) __##name + +#if defined(AST_API_MODULE) + +#define AST_OPTIONAL_API(result, name, proto, stub) \ + result AST_OPTIONAL_API_NAME(name) proto; \ + static attribute_unused typeof(AST_OPTIONAL_API_NAME(name)) * const name = AST_OPTIONAL_API_NAME(name); + +#define AST_OPTIONAL_API_ATTR(result, attr, name, proto, stub) \ + result __attribute__((attr)) AST_OPTIONAL_API_NAME(name) proto; \ + static attribute_unused typeof(AST_OPTIONAL_API_NAME(name)) * const name = AST_OPTIONAL_API_NAME(name); + +#else + +#define AST_OPTIONAL_API(result, name, proto, stub) \ + static result __stub__##name proto stub; \ + __attribute__((weak_import)) typeof(__stub__##name) AST_OPTIONAL_API_NAME(name); \ + static attribute_unused typeof(__stub__##name) * name; \ + static void __attribute__((constructor)) __init__##name(void) { name = AST_OPTIONAL_API_NAME(name) ? : __stub__##name; } + +#define AST_OPTIONAL_API_ATTR(result, attr, name, proto, stub) \ + static __attribute__((attr)) result __stub__##name proto stub; \ + __attribute__((attr, weak_import)) typeof(__stub__##name) AST_OPTIONAL_API_NAME(name); \ + static attribute_unused __attribute__((attr)) typeof(__stub__##name) * name; \ + static void __attribute__((constructor)) __init__##name(void) { name = AST_OPTIONAL_API_NAME(name) ? : __stub__##name; } + + +#endif + +/* End of Darwin (Mac OS/X) implementation */ + +#elif defined(HAVE_ATTRIBUTE_weakref) + +/* + * This is the generic GCC implementation, used when the 'weakref' + * compiler attribute is available. On these platforms: + * + * - The module providing the API will provide a '__' prefixed version + * of the API function to other modules (this will be hidden from the other + * modules by the macros), and also a non-prefixed alias so that modules + * compiled against older versions of the module that provided a non-prefixed + * version of the API function will continue to link properly. + * - In the API module itself, access to the API function without using a + * prefixed name is provided by the non-prefixed alias described above. + * - 'Consumer' modules of the API will use a combination of a weakref + * symbol, a local stub function, a pointer variable and a constructor function + * (which initializes that pointer variable as the module is being loaded) + * to provide safe, optional access to the API function without any special + * code being required. + */ + +#define AST_OPTIONAL_API_NAME(name) __##name + +#if defined(AST_API_MODULE) + +#define AST_OPTIONAL_API(result, name, proto, stub) \ + result AST_OPTIONAL_API_NAME(name) proto; \ + __attribute__((alias(__stringify(AST_OPTIONAL_API_NAME(name))))) typeof(AST_OPTIONAL_API_NAME(name)) name; + +#define AST_OPTIONAL_API_ATTR(result, attr, name, proto, stub) \ + result __attribute__((attr)) AST_OPTIONAL_API_NAME(name) proto; \ + __attribute__((alias(__stringify(AST_OPTIONAL_API_NAME(name))))) typeof(AST_OPTIONAL_API_NAME(name)) name; + +#else + +#define AST_OPTIONAL_API(result, name, proto, stub) \ + static result __stub__##name proto stub; \ + static __attribute__((weakref(__stringify(AST_OPTIONAL_API_NAME(name))))) typeof(__stub__##name) __ref__##name; \ + static attribute_unused typeof(__stub__##name) * name; \ + static void __attribute__((constructor)) __init__##name(void) { name = __ref__##name ? : __stub__##name; } + +#define AST_OPTIONAL_API_ATTR(result, attr, name, proto, stub) \ + static __attribute__((attr)) result __stub__##name proto stub; \ + static __attribute__((attr, weakref(__stringify(AST_OPTIONAL_API_NAME(name))))) typeof(__stub__##name) __ref__##name; \ + static attribute_unused __attribute__((attr)) typeof(__stub__##name) * name; \ + static void __attribute__((constructor)) __init__##name(void) { name = __ref__##name ? : __stub__##name; } + +#endif + +/* End of GCC implementation */ + #else + +/* This is the non-optional implementation. */ + +#define AST_OPTIONAL_API_NAME(name) name + /*! * \brief Define an optional API function * @@ -108,7 +218,8 @@ * { return AST_OPTIONAL_API_UNAVAILABLE; }); * \endcode */ -#define AST_OPTIONAL_API(result, name, proto, stub) result name proto; +#define AST_OPTIONAL_API(result, name, proto, stub) result AST_OPTIONAL_API_NAME(name) proto + /*! * \brief Define an optional API function with compiler attributes * @@ -118,7 +229,10 @@ * \param proto The prototype (arguments) of the function * \param stub The code block that will be used by the hidden stub when needed */ -#define AST_OPTIONAL_API_ATTR(result, attr, name, proto, stub) result __attribute__((attr)) name proto; +#define AST_OPTIONAL_API_ATTR(result, attr, name, proto, stub) result __attribute__((attr)) AST_OPTIONAL_API_NAME(name) proto + +/* End of non-optional implementation */ + #endif #undef AST_API_MODULE diff --git a/include/asterisk/smdi.h b/include/asterisk/smdi.h index 9dbec6288..9d80c9071 100644 --- a/include/asterisk/smdi.h +++ b/include/asterisk/smdi.h @@ -85,8 +85,9 @@ struct ast_smdi_md_message { */ struct ast_smdi_interface; -AST_OPTIONAL_API(void, ast_smdi_interface_unref, (struct ast_smdi_interface - *iface), { return; }); +AST_OPTIONAL_API(void, ast_smdi_interface_unref, + (struct ast_smdi_interface *iface), + { return; }); /*! * \brief Get the next SMDI message from the queue. @@ -98,8 +99,9 @@ AST_OPTIONAL_API(void, ast_smdi_interface_unref, (struct ast_smdi_interface * * \return the next SMDI message, or NULL if there were no pending messages. */ -AST_OPTIONAL_API(struct ast_smdi_md_message *, ast_smdi_md_message_pop, (struct - ast_smdi_interface *iface), { return NULL; }); +AST_OPTIONAL_API(struct ast_smdi_md_message *, ast_smdi_md_message_pop, + (struct ast_smdi_interface *iface), + { return NULL; }); /*! * \brief Get the next SMDI message from the queue. @@ -114,7 +116,8 @@ AST_OPTIONAL_API(struct ast_smdi_md_message *, ast_smdi_md_message_pop, (struct * the timeout has expired. */ AST_OPTIONAL_API(struct ast_smdi_md_message *, ast_smdi_md_message_wait, - (struct ast_smdi_interface *iface, int timeout), { return NULL; }); + (struct ast_smdi_interface *iface, int timeout), + { return NULL; }); /*! * \brief Put an SMDI message back in the front of the queue. @@ -125,8 +128,9 @@ AST_OPTIONAL_API(struct ast_smdi_md_message *, ast_smdi_md_message_wait, * should be used if a message was popped but is not going to be processed for * some reason, and the message needs to be returned to the queue. */ -AST_OPTIONAL_API(void, ast_smdi_md_message_putback, (struct ast_smdi_interface - *iface, struct ast_smdi_md_message *msg), { return; }); +AST_OPTIONAL_API(void, ast_smdi_md_message_putback, + (struct ast_smdi_interface *iface, struct ast_smdi_md_message *msg), + { return; }); /*! * \brief Get the next SMDI message from the queue. @@ -139,7 +143,8 @@ AST_OPTIONAL_API(void, ast_smdi_md_message_putback, (struct ast_smdi_interface * \return the next SMDI message, or NULL if there were no pending messages. */ AST_OPTIONAL_API(struct ast_smdi_mwi_message *, ast_smdi_mwi_message_pop, - (struct ast_smdi_interface *iface), { return NULL; }); + (struct ast_smdi_interface *iface), + { return NULL; }); /*! * \brief Get the next SMDI message from the queue. @@ -154,10 +159,12 @@ AST_OPTIONAL_API(struct ast_smdi_mwi_message *, ast_smdi_mwi_message_pop, * the timeout has expired. */ AST_OPTIONAL_API(struct ast_smdi_mwi_message *, ast_smdi_mwi_message_wait, - (struct ast_smdi_interface *iface, int timeout), { return NULL; }); -AST_OPTIONAL_API(struct ast_smdi_mwi_message *, - ast_smdi_mwi_message_wait_station, (struct ast_smdi_interface *iface, int - timeout, const char *station), { return NULL; }); + (struct ast_smdi_interface *iface, int timeout), + { return NULL; }); + +AST_OPTIONAL_API(struct ast_smdi_mwi_message *, ast_smdi_mwi_message_wait_station, + (struct ast_smdi_interface *iface, int timeout, const char *station), + { return NULL; }); /*! * \brief Put an SMDI message back in the front of the queue. @@ -168,8 +175,9 @@ AST_OPTIONAL_API(struct ast_smdi_mwi_message *, * should be used if a message was popped but is not going to be processed for * some reason, and the message needs to be returned to the queue. */ -AST_OPTIONAL_API(void, ast_smdi_mwi_message_putback, (struct ast_smdi_interface - *iface, struct ast_smdi_mwi_message *msg), { return; }); +AST_OPTIONAL_API(void, ast_smdi_mwi_message_putback, + (struct ast_smdi_interface *iface, struct ast_smdi_mwi_message *msg), + { return; }); /*! * \brief Find an SMDI interface with the specified name. @@ -180,30 +188,35 @@ AST_OPTIONAL_API(void, ast_smdi_mwi_message_putback, (struct ast_smdi_interface * #ASTOBJ_UNREF(iface, ast_smdi_interface_destroy). */ AST_OPTIONAL_API(struct ast_smdi_interface *, ast_smdi_interface_find, - (const char *iface_name), { return NULL; }); + (const char *iface_name), + { return NULL; }); /*! * \brief Set the MWI indicator for a mailbox. * \param iface the interface to use. * \param mailbox the mailbox to use. */ -AST_OPTIONAL_API(int, ast_smdi_mwi_set, (struct ast_smdi_interface *iface, - const char *mailbox), { return -1; }); +AST_OPTIONAL_API(int, ast_smdi_mwi_set, + (struct ast_smdi_interface *iface, const char *mailbox), + { return -1; }); /*! * \brief Unset the MWI indicator for a mailbox. * \param iface the interface to use. * \param mailbox the mailbox to use. */ -AST_OPTIONAL_API(int, ast_smdi_mwi_unset, (struct ast_smdi_interface *iface, - const char *mailbox), { return -1; }); +AST_OPTIONAL_API(int, ast_smdi_mwi_unset, + (struct ast_smdi_interface *iface, const char *mailbox), + { return -1; }); /*! \brief ast_smdi_md_message destructor. */ AST_OPTIONAL_API(void, ast_smdi_md_message_destroy, - (struct ast_smdi_md_message *msg), { return; }); + (struct ast_smdi_md_message *msg), + { return; }); /*! \brief ast_smdi_mwi_message destructor. */ -AST_OPTIONAL_API(void, ast_smdi_mwi_message_destroy, (struct - ast_smdi_mwi_message *msg), { return; }); +AST_OPTIONAL_API(void, ast_smdi_mwi_message_destroy, + (struct ast_smdi_mwi_message *msg), + { return; }); #endif /* !ASTERISK_SMDI_H */ |