jansson: json_pack with new format to verify required runtime version.

Add a json_pack at startup that will fail if runtime links against a
library older than jansson-2.11.

Change-Id: I101aebafe0f9407650206f7c552dad3d69377b5a
pull/13/head
Corey Farrell 6 years ago
parent 5f6890a8f9
commit 9b7b8cb155

@ -89,7 +89,7 @@ typedef AST_JSON_INT_T ast_json_int_t;
/*! /*!
* \brief Initialize the JSON library. * \brief Initialize the JSON library.
*/ */
void ast_json_init(void); int ast_json_init(void);
/*! /*!
* \brief Set custom allocators instead of the standard ast_malloc() and ast_free(). * \brief Set custom allocators instead of the standard ast_malloc() and ast_free().

@ -4059,7 +4059,7 @@ static void asterisk_daemon(int isroot, const char *runuser, const char *rungrou
} }
ast_verb(0, "PBX UUID: %s\n", pbx_uuid); ast_verb(0, "PBX UUID: %s\n", pbx_uuid);
ast_json_init(); check_init(ast_json_init(), "libjansson");
ast_ulaw_init(); ast_ulaw_init();
ast_alaw_init(); ast_alaw_init();
tdd_init(); tdd_init();

@ -693,10 +693,28 @@ struct ast_json *ast_json_ipaddr(const struct ast_sockaddr *addr, enum ast_trans
return ast_json_string_create(ast_str_buffer(string)); return ast_json_string_create(ast_str_buffer(string));
} }
void ast_json_init(void) int ast_json_init(void)
{ {
json_t *version_check;
/* Setup to use Asterisk custom allocators */ /* Setup to use Asterisk custom allocators */
ast_json_reset_alloc_funcs(); ast_json_reset_alloc_funcs();
/* We depend on functionality of jansson-2.11 but don't actually use
* any symbols. If we link at runtime to less than 2.11 this json_pack
* will return NULL. */
version_check = json_pack("{s: o?, s: o*}",
"JSON", NULL,
"Bourne", NULL);
if (!version_check) {
ast_log(LOG_ERROR, "There was a problem finding jansson 2.11 runtime libraries.\n"
"Please rebuild Asterisk using ./configure --with-jansson-bundled.\n");
return -1;
}
json_decref(version_check);
return 0;
} }
static void json_payload_destructor(void *obj) static void json_payload_destructor(void *obj)

Loading…
Cancel
Save