int vsnprintf(char *buf, int size, const char *fmt, va_list args){ int num; char *str, *end, c,*s; int read; unsigned int spec=0; str = buf; end = buf + size; if (end < buf) { end = ((void *)-1); size = end - buf; } while (*fmt) { const char *old_fmt = fmt; read = format_decode(fmt, &spec); fmt += read; if((FORMAT_TYPE(spec))==FORMAT_TYPE_NONE){ int copy = read; if (str < end) { if (copy > end - str) copy = end - str; memcpy(str, old_fmt, copy); } str += read; }else if(spec&FORMAT_FLAG_WIDTH){ //do nothing }else if(FORMAT_TYPE(spec)==FORMAT_TYPE_CHAR){ c = (unsigned char) va_arg(args, int); if (str < end) *str = c; ++str; }else if(FORMAT_TYPE(spec)==FORMAT_TYPE_STR){
return ; } /* wav_w64_analyze */ /*============================================================================== */ typedef struct { int ID ; const char *name ; } WAV_FORMAT_DESC ; #define STR(x) #x #define FORMAT_TYPE(x) { x, STR (x) } static WAV_FORMAT_DESC wave_descs [] = { FORMAT_TYPE (WAVE_FORMAT_PCM), FORMAT_TYPE (WAVE_FORMAT_MS_ADPCM), FORMAT_TYPE (WAVE_FORMAT_IEEE_FLOAT), FORMAT_TYPE (WAVE_FORMAT_VSELP), FORMAT_TYPE (WAVE_FORMAT_IBM_CVSD), FORMAT_TYPE (WAVE_FORMAT_ALAW), FORMAT_TYPE (WAVE_FORMAT_MULAW), FORMAT_TYPE (WAVE_FORMAT_OKI_ADPCM), FORMAT_TYPE (WAVE_FORMAT_IMA_ADPCM), FORMAT_TYPE (WAVE_FORMAT_MEDIASPACE_ADPCM), FORMAT_TYPE (WAVE_FORMAT_SIERRA_ADPCM), FORMAT_TYPE (WAVE_FORMAT_G723_ADPCM), FORMAT_TYPE (WAVE_FORMAT_DIGISTD), FORMAT_TYPE (WAVE_FORMAT_DIGIFIX), FORMAT_TYPE (WAVE_FORMAT_DIALOGIC_OKI_ADPCM), FORMAT_TYPE (WAVE_FORMAT_MEDIAVISION_ADPCM),