/*Level 3 of the loop nesting*/ static IMG_VOID PVRSRVGetMiscInfoKM_RA_GetStats_ForEachVaCb(BM_HEAP *psBMHeap, va_list va) { IMG_CHAR **ppszStr; IMG_UINT32 *pui32StrLen; IMG_UINT32 ui32Mode; PVRSRV_ERROR (*pfnGetStats)(RA_ARENA *, IMG_CHAR **, IMG_UINT32 *); ppszStr = va_arg(va, IMG_CHAR**); pui32StrLen = va_arg(va, IMG_UINT32*); ui32Mode = va_arg(va, IMG_UINT32); /* Would be better to pass fn pointer in the variable args list * but MS C compiler complains with error C2066: In ANSI C, * it is not legal to cast between a function pointer and a data pointer. */ switch(ui32Mode) { case PVRSRV_MISC_INFO_MEMSTATS_PRESENT: pfnGetStats = &RA_GetStats; break; case PVRSRV_MISC_INFO_FREEMEM_PRESENT: pfnGetStats = &RA_GetStatsFreeMem; break; default: return; } if(psBMHeap->pImportArena) { pfnGetStats(psBMHeap->pImportArena, ppszStr, pui32StrLen); } if(psBMHeap->pVMArena) { pfnGetStats(psBMHeap->pVMArena, ppszStr, pui32StrLen); } }
static IMG_VOID PVRSRVGetMiscInfoKM_RA_GetStats_ForEachVaCb(BM_HEAP *psBMHeap, va_list va) { IMG_CHAR **ppszStr; IMG_UINT32 *pui32StrLen; IMG_UINT32 ui32Mode; PVRSRV_ERROR (*pfnGetStats)(RA_ARENA *, IMG_CHAR **, IMG_UINT32 *); ppszStr = va_arg(va, IMG_CHAR**); pui32StrLen = va_arg(va, IMG_UINT32*); ui32Mode = va_arg(va, IMG_UINT32); switch(ui32Mode) { case PVRSRV_MISC_INFO_MEMSTATS_PRESENT: pfnGetStats = &RA_GetStats; break; case PVRSRV_MISC_INFO_FREEMEM_PRESENT: pfnGetStats = &RA_GetStatsFreeMem; break; default: return; } if(psBMHeap->pImportArena) { pfnGetStats(psBMHeap->pImportArena, ppszStr, pui32StrLen); } if(psBMHeap->pVMArena) { pfnGetStats(psBMHeap->pVMArena, ppszStr, pui32StrLen); } }