50#ifndef LASS_GUARDIAN_OF_INCLUSION_STDE_EXTENDED_CSTRING_H
51#define LASS_GUARDIAN_OF_INCLUSION_STDE_EXTENDED_CSTRING_H
58#if LASS_PLATFORM_TYPE == LASS_PLATFORM_TYPE_WIN32
60# pragma warning(disable: 4996)
67#if LASS_COMPILER_TYPE == LASS_COMPILER_TYPE_GCC || LASS_COMPILER_TYPE == LASS_COMPILER_TYPE_CLANG
68# define LASS_EXPERIMENTAL_ATTRIBUTE_FORMAT(archetype, string_index, first_to_check) __attribute__ ((format (archetype, string_index, first_to_check)))
70# define LASS_EXPERIMENTAL_ATTRIBUTE_FORMAT(archetype, string_index, first_to_check)
78template <
int N>
int safe_vsprintf(
char(&buffer)[N],
const char* format, va_list args) LASS_EXPERIMENTAL_ATTRIBUTE_FORMAT(printf, 2, 0);
79template <
int N>
int safe_sprintf(
char(&buffer)[N],
const char* format, ...) LASS_EXPERIMENTAL_ATTRIBUTE_FORMAT(printf, 2, 3);
82int safe_vsprintf(
char (&buffer)[N], const
char* format, va_list args)
84 const int numWritten = ::vsnprintf(buffer, N, format, args);
87 throw std::runtime_error(
"safe_vformat: encoding error");
91 throw std::length_error(
"safe_vsprintf: buffer overflow.");
98int safe_sprintf(
char (& buffer)[N],
const char* format, ...)
101 va_start(args, format);
102 const int numWritten = safe_vsprintf(buffer, format, args);
108char* safe_strcat(
char (&buffer)[N],
const char* source)
110 if (strlen(buffer) + strlen(source) >= N)
112 throw std::length_error(
"safe_strcat: buffer overflow");
114 return strcat(buffer, source);
118char* safe_strcpy(
char (&buffer)[N],
const char* source)
120 if (strlen(source) >= N)
122 throw std::length_error(
"safe_strcpy: buffer overflow");
124 return strcpy(buffer, source);
127LASS_DLL std::string LASS_CALL safe_vformat(
const char* format, va_list args) LASS_EXPERIMENTAL_ATTRIBUTE_FORMAT(printf, 1, 0);
128LASS_DLL std::string LASS_CALL safe_format(
const char* format, ...) LASS_EXPERIMENTAL_ATTRIBUTE_FORMAT(printf, 1, 2);
133#if LASS_PLATFORM_TYPE == LASS_PLATFORM_TYPE_WIN32
#define LASS_DLL
DLL interface: import or export symbols?
lass extensions to the standard library
Library for Assembled Shared Sources.