void set_element_free( set_element ** p_element ) { if ( p_element != NULL && (*p_element) != NULL ) { sn_free( (void**) &(*p_element)->data ); sn_free( (void**) p_element ); } }
void sn_launchee_context_unref (SnLauncheeContext *context) { context->refcount -= 1; if (context->refcount == 0) { sn_display_unref (context->display); sn_free (context->startup_id); sn_free (context); } }
void set_soft_free( set ** p_set ) { if ( p_set != NULL && (*p_set) != NULL ) { while( (*p_set)->size > 0 ) { set_element * to_be_deleted = set_pop_element( (*p_set) ); sn_free( (void**) &to_be_deleted ); } sn_free( (void**) p_set ); } }
/** * sn_display_unref: * @display: an #SnDisplay * * Decrement the reference count for @display, freeing * display if the reference count reaches zero. **/ void sn_display_unref (SnDisplay *display) { display->refcount -= 1; if (display->refcount == 0) { if (display->xmessage_funcs) sn_list_free (display->xmessage_funcs); if (display->pending_messages) sn_list_free (display->pending_messages); sn_free (display->screens); sn_free (display); } }
void sn_string_free( sn_string ** pp_string ) { if ( pp_string != NULL && (*pp_string) != NULL ) { if ( (*pp_string)->is_ref == 0 ) { sn_free( (void**) &(*pp_string)->buffer ); } (*pp_string)->len = 0; (*pp_string)->is_ref = 1; sn_free( (void**) pp_string ); } }
int sn_storageclose(snstorage *s) { if (s->env == NULL) return 0; int rcret = sp_destroy(s->env); int i = 0; while (i < s->count) { sndb *db = &s->storage[i]; if (db->name) sn_free(db->name); if (db->path) sn_free(db->path); if (db->key) sn_free(db->key); i++; } if (s->storage) sn_free(s->storage); return rcret; }
void sn_string_cat( sn_string * p_dst, const sn_string * p_src ) { if ( p_dst != NULL && p_src != NULL ) { char * old_buffer = p_dst->buffer; p_dst->buffer = (char*) malloc( (p_dst->len + p_src->len ) * sizeof( char ) ); memcpy( p_dst->buffer, old_buffer, p_dst->len ); memcpy( &p_dst->buffer[p_dst->len], p_src->buffer, p_src->len ); p_dst->len += p_src->len; sn_free( (void**) &old_buffer ); } }
void skynet_error(skynet_context *context, const char *msg, ...) { static uint32_t logger = 0; if (logger == 0) { logger = SNServer::Get()->GetHandle().FindName("logger"); } if (logger == 0) { return; } char tmp[LOG_MESSAGE_SIZE]; char *data = NULL; va_list va; va_start(va, msg); int len = sn_vsprintf(tmp, LOG_MESSAGE_SIZE, msg, va); va_end(va); if (len != -1 && len < LOG_MESSAGE_SIZE) { data = skynet_strdup(tmp); } else { int max_size = LOG_MESSAGE_SIZE; for (;;) { max_size *= 2; data = (char *)sn_malloc(max_size); va_start(va, msg); len = sn_vsprintf(data, max_size, msg, va); va_end(va); if (len != -1 && len < max_size) { break; } sn_free(data); } } sn_message smsg; if (context == NULL) { smsg.source = 0; } else { smsg.source = context->Handle(); } smsg.session = 0; smsg.data = data; smsg.sz = len | (PTYPE_TEXT << HANDLE_REMOTE_SHIFT); SNServer::Get()->ContextPush(logger, &smsg); }
void block_parameter_set_free( block_parameter_set ** p_set ) { if ( p_set != NULL && (*p_set) != NULL ) { while( (*p_set)->parameter_set.size > 0 ) { set_element * el = set_pop_element( &(*p_set)->parameter_set ); if ( el != NULL ) { block_parameter_free( (block_parameter**) &el->data ); set_element_free( &el ); } } sn_free( (void**) p_set ); } }
int main( int argc, char*argv[] ) { set * p_set = NULL; test_set_output( TEST_OUTPUT_BOTH ); p_set = set_create(); if ( test_assert_true ( p_set != NULL, "set creation" ) ) { /* create a set with 35 elements */ int i, *test_search; for( i=0; i<35; i++ ) { int * test_element = (int*) malloc( sizeof(int) ); *test_element = i; set_push_element( p_set, (void*) test_element ); if ( ! test_assert_true( p_set->size == (i + 1) , "set element pushing") ) break; } test_search = (int*) malloc( sizeof(int) ); /* search for an existing element */ *test_search = 10; test_assert_true( set_contains( p_set, test_search, &test_set_int_compare ), "set search existing" ); /* search for a non-existing element */ *test_search = 56; test_assert_true( !set_contains( p_set, test_search, &test_set_int_compare ), "set search non-existing" ); sn_free( (void**) &test_search ); set_free( &p_set ); } exit(0); }
/** * sn_launchee_context_complete: * @context: an #SnLauncheeContext * * Called by the launchee when it is fully started up and the startup * sequence should end. * **/ void sn_launchee_context_complete (SnLauncheeContext *context) { char *keys[2]; char *vals[2]; char *message; keys[0] = "ID"; keys[1] = NULL; vals[0] = context->startup_id; vals[1] = NULL; message = sn_internal_serialize_message ("remove", (const char**) keys, (const char**) vals); sn_internal_broadcast_xmessage (context->display, context->screen, sn_internal_get_net_startup_info_atom(context->display), sn_internal_get_net_startup_info_begin_atom(context->display), message); sn_free (message); }