45 lines
830 B
Plaintext
45 lines
830 B
Plaintext
// Copyright (C) 2010, Guy Barrand. All rights reserved.
|
|
// See the file tools.license for terms.
|
|
|
|
#ifndef tools_sprintf
|
|
#define tools_sprintf
|
|
|
|
#include <string>
|
|
#include <cstdarg>
|
|
#include <cstdio>
|
|
|
|
namespace tools {
|
|
|
|
inline bool sprintf(std::string& a_string,int a_length,const char* a_format,...){
|
|
a_string.clear();
|
|
if(a_length<0) return false;
|
|
if(!a_format) return false;
|
|
char* s = new char[a_length+1];
|
|
if(!s) return false;
|
|
s[a_length] = '\0';
|
|
va_list args;
|
|
va_start(args,a_format);
|
|
#ifdef WIN32
|
|
int n = _vsnprintf(s,a_length+1,a_format,args);
|
|
#else
|
|
int n = ::vsnprintf(s,a_length+1,a_format,args);
|
|
#endif
|
|
va_end(args);
|
|
if(n>a_length) {
|
|
delete [] s;
|
|
return false;
|
|
}
|
|
if(s[a_length]!='\0') {
|
|
delete [] s;
|
|
return false;
|
|
}
|
|
a_string = s;
|
|
delete [] s;
|
|
return true;
|
|
}
|
|
|
|
|
|
}
|
|
|
|
#endif
|