Mercurial > audio-send
view OpenAL32/alThunk.c @ 19:22ac5a0367cd
finally, a first pass at ear.org
author | Robert McIntyre <rlm@mit.edu> |
---|---|
date | Thu, 03 Nov 2011 14:54:45 -0700 |
parents | f9476ff7637e |
children |
line wrap: on
line source
1 /**2 * OpenAL cross platform audio library3 * Copyright (C) 1999-2007 by authors.4 * This library is free software; you can redistribute it and/or5 * modify it under the terms of the GNU Library General Public6 * License as published by the Free Software Foundation; either7 * version 2 of the License, or (at your option) any later version.8 *9 * This library is distributed in the hope that it will be useful,10 * but WITHOUT ANY WARRANTY; without even the implied warranty of11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU12 * Library General Public License for more details.13 *14 * You should have received a copy of the GNU Library General Public15 * License along with this library; if not, write to the16 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,17 * Boston, MA 02111-1307, USA.18 * Or go to http://www.gnu.org/copyleft/lgpl.html19 */21 #include "config.h"23 #include <stdlib.h>25 #include "alMain.h"26 #include "alThunk.h"29 static ALboolean *ThunkArray;30 static ALuint ThunkArraySize;32 static CRITICAL_SECTION ThunkLock;34 void ThunkInit(void)35 {36 InitializeCriticalSection(&ThunkLock);37 ThunkArraySize = 1;38 ThunkArray = calloc(1, ThunkArraySize * sizeof(*ThunkArray));39 }41 void ThunkExit(void)42 {43 free(ThunkArray);44 ThunkArray = NULL;45 ThunkArraySize = 0;46 DeleteCriticalSection(&ThunkLock);47 }49 ALenum NewThunkEntry(ALuint *index)50 {51 ALuint i;53 EnterCriticalSection(&ThunkLock);55 for(i = 0;i < ThunkArraySize;i++)56 {57 if(ThunkArray[i] == AL_FALSE)58 break;59 }61 if(i == ThunkArraySize)62 {63 ALboolean *NewList;65 NewList = realloc(ThunkArray, ThunkArraySize*2 * sizeof(*ThunkArray));66 if(!NewList)67 {68 LeaveCriticalSection(&ThunkLock);69 ERR("Realloc failed to increase to %u enties!\n", ThunkArraySize*2);70 return AL_OUT_OF_MEMORY;71 }72 memset(&NewList[ThunkArraySize], 0, ThunkArraySize*sizeof(*ThunkArray));73 ThunkArraySize *= 2;74 ThunkArray = NewList;75 }77 ThunkArray[i] = AL_TRUE;78 *index = i+1;80 LeaveCriticalSection(&ThunkLock);82 return AL_NO_ERROR;83 }85 void FreeThunkEntry(ALuint index)86 {87 EnterCriticalSection(&ThunkLock);89 if(index > 0 && index <= ThunkArraySize)90 ThunkArray[index-1] = AL_FALSE;92 LeaveCriticalSection(&ThunkLock);93 }