int SoundDecoder_Init() { size_t total_number_of_decoders; size_t i; size_t current_pos = 0; if(1 == s_isInitialized) { return 1; } if(NULL == s_errorPool) { s_errorPool = TError_CreateErrorPool(); } if(NULL == s_errorPool) { return 0; } total_number_of_decoders = sizeof(s_linkedDecoders) / sizeof(s_linkedDecoders[0]); s_availableDecoders = (const SoundDecoder_DecoderInfo **)malloc((total_number_of_decoders) * sizeof(SoundDecoder_DecoderInfo*)); if(NULL == s_availableDecoders) { SoundDecoder_SetError(ERR_OUT_OF_MEMORY); return 0; } /* Allocate memory for linked list of sound samples. */ s_listOfLoadedSamples = LinkedList_Create(); if(NULL == s_listOfLoadedSamples) { free(s_availableDecoders); s_availableDecoders = NULL; SoundDecoder_SetError(ERR_OUT_OF_MEMORY); return 0; } for(i = 0; s_linkedDecoders[i].funcs != NULL; i++) { s_linkedDecoders[i].available = s_linkedDecoders[i].funcs->init(); if(s_linkedDecoders[i].available) { s_availableDecoders[current_pos] = &(s_linkedDecoders[i].funcs->info); current_pos++; } } s_availableDecoders[current_pos] = NULL; s_isInitialized = 1; return 1; }
BOOL LinkedList_AddLast(wLinkedList* list, void* value) { wLinkedListNode* node = LinkedList_Create(list, value); if (!node) return FALSE; if (!list->tail) { list->head = list->tail = node; } else { list->tail->next = node; node->prev = list->tail; list->tail = node; } list->count++; return TRUE; }