1
0
mirror of https://gitlab.xiph.org/xiph/icecast-server.git synced 2024-12-04 14:46:30 -05:00

Update: Replaced reportxml_new() and reportxml_database_new()

This commit is contained in:
Philipp Schafft 2018-10-11 08:58:22 +00:00
parent fea817da2d
commit a242f0f77b
4 changed files with 42 additions and 36 deletions

View File

@ -232,7 +232,7 @@ void config_init_configuration(ice_config_t *configuration)
{ {
memset(configuration, 0, sizeof(ice_config_t)); memset(configuration, 0, sizeof(ice_config_t));
_set_defaults(configuration); _set_defaults(configuration);
configuration->reportxml_db = reportxml_database_new(); configuration->reportxml_db = refobject_new(reportxml_database_t);
} }
static inline void __read_int(xmlDocPtr doc, xmlNodePtr node, int *val, const char *warning) static inline void __read_int(xmlDocPtr doc, xmlNodePtr node, int *val, const char *warning)

View File

@ -661,7 +661,7 @@ reportxml_t *client_get_reportxml(const char *state_definition, const char *stat
if (!report) { if (!report) {
reportxml_node_t *rootnode, *incidentnode, *statenode; reportxml_node_t *rootnode, *incidentnode, *statenode;
report = reportxml_new(); report = refobject_new(reportxml_t);
rootnode = reportxml_get_root_node(report); rootnode = reportxml_get_root_node(report);
incidentnode = reportxml_node_new(REPORTXML_NODE_TYPE_INCIDENT, NULL, NULL, NULL); incidentnode = reportxml_node_new(REPORTXML_NODE_TYPE_INCIDENT, NULL, NULL, NULL);
statenode = reportxml_node_new(REPORTXML_NODE_TYPE_STATE, NULL, state_definition, state_akindof); statenode = reportxml_node_new(REPORTXML_NODE_TYPE_STATE, NULL, state_definition, state_akindof);

View File

@ -236,8 +236,22 @@ static void __report_free(refobject_t self, void **userdata)
refobject_unref(report->root); refobject_unref(report->root);
} }
static int __report_new(refobject_t self, const refobject_type_t *type, va_list ap)
{
reportxml_t *ret = REFOBJECT_TO_TYPE(self, reportxml_t*);
reportxml_node_t *root = reportxml_node_new(REPORTXML_NODE_TYPE_REPORT, NULL, NULL, NULL);
if (!root)
return -1;
ret->root = root;
return 0;
}
REFOBJECT_DEFINE_TYPE(reportxml_t, REFOBJECT_DEFINE_TYPE(reportxml_t,
REFOBJECT_DEFINE_TYPE_FREE(__report_free) REFOBJECT_DEFINE_TYPE_FREE(__report_free),
REFOBJECT_DEFINE_TYPE_NEW(__report_new)
); );
static reportxml_t * reportxml_new_with_root(reportxml_node_t *root) static reportxml_t * reportxml_new_with_root(reportxml_node_t *root)
@ -255,20 +269,7 @@ static reportxml_t * reportxml_new_with_root(reportxml_node_t *root)
reportxml_t * reportxml_new(void) reportxml_t * reportxml_new(void)
{ {
reportxml_node_t *root = reportxml_node_new(REPORTXML_NODE_TYPE_REPORT, NULL, NULL, NULL); return refobject_new(reportxml_t);
reportxml_t *ret;
if (!root)
return NULL;
ret = reportxml_new_with_root(root);
if (!ret) {
refobject_unref(root);
return NULL;
}
return ret;
} }
reportxml_node_t * reportxml_get_root_node(reportxml_t *report) reportxml_node_t * reportxml_get_root_node(reportxml_t *report)
@ -983,26 +984,27 @@ static int __compare_definitions(void *arg, void *a, void *b)
return ret; return ret;
} }
static int __database_new(refobject_t self, const refobject_type_t *type, va_list ap)
{
reportxml_database_t *ret = REFOBJECT_TO_TYPE(self, reportxml_database_t*);
thread_mutex_create(&(ret->lock));
ret->definitions = avl_tree_new(__compare_definitions, NULL);
if (!ret->definitions)
return -1;
return 0;
}
REFOBJECT_DEFINE_TYPE(reportxml_database_t, REFOBJECT_DEFINE_TYPE(reportxml_database_t,
REFOBJECT_DEFINE_TYPE_FREE(__database_free) REFOBJECT_DEFINE_TYPE_FREE(__database_free),
REFOBJECT_DEFINE_TYPE_NEW(__database_new)
); );
reportxml_database_t * reportxml_database_new(void) reportxml_database_t * reportxml_database_new(void)
{ {
reportxml_database_t *ret = refobject_new__new(reportxml_database_t, NULL, NULL, NULL); return refobject_new(reportxml_database_t);
if (!ret)
return NULL;
ret->definitions = avl_tree_new(__compare_definitions, NULL);
if (!ret->definitions) {
refobject_unref(ret);
return NULL;
}
thread_mutex_create(&(ret->lock));
return ret;
} }
int reportxml_database_add_report(reportxml_database_t *db, reportxml_t *report) int reportxml_database_add_report(reportxml_database_t *db, reportxml_t *report)
@ -1305,7 +1307,7 @@ reportxml_t * reportxml_database_build_report(reportxml_database_t *db
/* Empty definition? Not exactly an exciting report... */ /* Empty definition? Not exactly an exciting report... */
ICECAST_LOG_WARN("Empty definition for \"%H\". Returning empty report. This is likely an error.", id); ICECAST_LOG_WARN("Empty definition for \"%H\". Returning empty report. This is likely an error.", id);
refobject_unref(definition); refobject_unref(definition);
return reportxml_new(); return refobject_new(reportxml_t);
} }
if (type == REPORTXML_NODE_TYPE__ERROR) { if (type == REPORTXML_NODE_TYPE__ERROR) {
@ -1333,7 +1335,7 @@ reportxml_t * reportxml_database_build_report(reportxml_database_t *db
break; break;
} }
ret = reportxml_new(); ret = refobject_new(reportxml_t);
if (!ret) { if (!ret) {
refobject_unref(definition); refobject_unref(definition);
ICECAST_LOG_ERROR("Can not allocate new report. BAD."); ICECAST_LOG_ERROR("Can not allocate new report. BAD.");

View File

@ -68,7 +68,9 @@ REFOBJECT_FORWARD_TYPE(reportxml_database_t);
/* ---[ Document level ]--- */ /* ---[ Document level ]--- */
/* The document object is NOT thread safe. */ /* The document object is NOT thread safe. */
/* This creates a new, empty report XML document */ /* Depreciated: This creates a new, empty report XML document
* Do NOT use this. Use refobject_new(reportxml_t)
*/
reportxml_t * reportxml_new(void); reportxml_t * reportxml_new(void);
/* This gets the root node of a report XML document */ /* This gets the root node of a report XML document */
reportxml_node_t * reportxml_get_root_node(reportxml_t *report); reportxml_node_t * reportxml_get_root_node(reportxml_t *report);
@ -128,7 +130,9 @@ xmlNodePtr reportxml_node_get_xml_child(reportxml_node_t *node, siz
/* The database object is thread safe. */ /* The database object is thread safe. */
/* Create a new database object */ /* Depreciated: Create a new database object
* Do NOT use this. Use refobject_new(reportxml_database_t)
*/
reportxml_database_t * reportxml_database_new(void); reportxml_database_t * reportxml_database_new(void);
/* Add an report to the database */ /* Add an report to the database */
int reportxml_database_add_report(reportxml_database_t *db, reportxml_t *report); int reportxml_database_add_report(reportxml_database_t *db, reportxml_t *report);