ovr_sdk
diff LibOVR/Src/Kernel/OVR_String_FormatUtil.cpp @ 0:1b39a1b46319
initial 0.4.4
author | John Tsiombikas <nuclear@member.fsf.org> |
---|---|
date | Wed, 14 Jan 2015 06:51:16 +0200 |
parents | |
children |
line diff
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/LibOVR/Src/Kernel/OVR_String_FormatUtil.cpp Wed Jan 14 06:51:16 2015 +0200 1.3 @@ -0,0 +1,76 @@ 1.4 +/************************************************************************************ 1.5 + 1.6 +Filename : OVR_String_FormatUtil.cpp 1.7 +Content : String format functions. 1.8 +Created : February 27, 2013 1.9 +Notes : 1.10 + 1.11 +Copyright : Copyright 2014 Oculus VR, LLC All Rights reserved. 1.12 + 1.13 +Licensed under the Oculus VR Rift SDK License Version 3.2 (the "License"); 1.14 +you may not use the Oculus VR Rift SDK except in compliance with the License, 1.15 +which is provided at the time of installation or download, or which 1.16 +otherwise accompanies this software in either electronic or hard copy form. 1.17 + 1.18 +You may obtain a copy of the License at 1.19 + 1.20 +http://www.oculusvr.com/licenses/LICENSE-3.2 1.21 + 1.22 +Unless required by applicable law or agreed to in writing, the Oculus VR SDK 1.23 +distributed under the License is distributed on an "AS IS" BASIS, 1.24 +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1.25 +See the License for the specific language governing permissions and 1.26 +limitations under the License. 1.27 + 1.28 +************************************************************************************/ 1.29 + 1.30 +#include "OVR_String.h" 1.31 +#include "OVR_Log.h" 1.32 + 1.33 +namespace OVR { 1.34 + 1.35 +void StringBuffer::AppendFormat(const char* format, ...) 1.36 +{ 1.37 + va_list argList; 1.38 + char buffer[512]; 1.39 + char* bufferUsed = buffer; 1.40 + char* bufferAllocated = NULL; 1.41 + 1.42 + va_start(argList, format); 1.43 + 1.44 + #if !defined(OVR_CC_MSVC) // Non-Microsoft compilers require you to save a copy of the va_list. 1.45 + va_list argListSaved; 1.46 + va_copy(argListSaved, argList); 1.47 + #endif 1.48 + 1.49 + int requiredStrlen = OVR_vsnprintf(bufferUsed, OVR_ARRAY_COUNT(buffer), format, argList); // The large majority of the time this will succeed. 1.50 + 1.51 + if(requiredStrlen >= (int)sizeof(buffer)) // If the initial capacity wasn't enough... 1.52 + { 1.53 + bufferAllocated = (char*)OVR_ALLOC(sizeof(char) * (requiredStrlen + 1)); 1.54 + bufferUsed = bufferAllocated; 1.55 + if(bufferAllocated) 1.56 + { 1.57 + #if !defined(OVR_CC_MSVC) 1.58 + va_end(argList); 1.59 + va_copy(argList, argListSaved); 1.60 + #endif 1.61 + requiredStrlen = OVR_vsnprintf(bufferAllocated, (requiredStrlen + 1), format, argList); 1.62 + } 1.63 + } 1.64 + 1.65 + if(requiredStrlen < 0) // If there was a printf format error... 1.66 + { 1.67 + bufferUsed = NULL; 1.68 + } 1.69 + 1.70 + va_end(argList); 1.71 + 1.72 + if(bufferUsed) 1.73 + AppendString(bufferUsed); 1.74 + 1.75 + if(bufferAllocated) 1.76 + OVR_FREE(bufferAllocated); 1.77 +} 1.78 + 1.79 +} // OVR