Add wrapper for snprintf

Signed-off-by: Fabian Zwolinski <fabian.zwolinski@intel.com>
This commit is contained in:
Fabian Zwolinski
2021-12-06 13:12:09 +01:00
committed by Compute-Runtime-Automation
parent b9132ef5f5
commit 617f65c285
3 changed files with 42 additions and 1 deletions

View File

@@ -8,6 +8,7 @@
#pragma once
#include "shared/source/debug_settings/debug_settings_manager.h"
#include "shared/source/helpers/common_types.h"
#include "shared/source/helpers/string.h"
#include "shared/source/helpers/vec.h"
#include "shared/source/unified_memory/unified_memory.h"
@@ -135,7 +136,7 @@ class Context : public BaseObject<_cl_context> {
DEBUG_BREAK_IF(contextCallback == nullptr);
DEBUG_BREAK_IF(driverDiagnostics == nullptr);
char hint[DriverDiagnostics::maxHintStringSize];
snprintf(hint, DriverDiagnostics::maxHintStringSize, DriverDiagnostics::hintFormat[performanceHint], std::forward<Args>(args)..., 0);
snprintf_s(hint, DriverDiagnostics::maxHintStringSize, DriverDiagnostics::maxHintStringSize, DriverDiagnostics::hintFormat[performanceHint], std::forward<Args>(args)..., 0);
if (driverDiagnostics->validFlags(flags)) {
if (contextCallback) {
contextCallback(hint, &flags, sizeof(flags), userData);

View File

@@ -92,6 +92,28 @@ inline int memmove_s(void *dst, size_t numberOfElements, const void *src, size_t
return 0;
}
template <typename... Args>
inline int snprintf_s(char *buffer, size_t sizeOfBuffer, size_t count, const char *format, Args &&...args) {
if ((buffer == nullptr) || (format == nullptr)) {
return -EINVAL;
}
return snprintf(buffer, sizeOfBuffer, format, std::forward<Args>(args)...);
}
#endif
#if defined(_WIN32)
template <typename... Args>
inline int snprintf_s(char *buffer, size_t sizeOfBuffer, size_t count, const char *format, Args &&...args) {
if ((buffer == nullptr) || (format == nullptr)) {
return -EINVAL;
}
return _snprintf_s(buffer, sizeOfBuffer, count, format, std::forward<Args>(args)...);
}
#endif
template <typename T = char>

View File

@@ -148,3 +148,21 @@ TEST(StringHelpers, GivenParamsWhenUsingMemcpyThenReturnIsCorrect) {
}
#endif
TEST(StringHelpers, GivenParamsWhenUsingSnprintfsThenReturnIsCorrect) {
char buffer[15] = "";
const char *fmtStr = "World!";
int retVal1 = snprintf_s(buffer, sizeof(buffer), sizeof(buffer), "Hello %s", fmtStr);
ASSERT_EQ(12, retVal1);
ASSERT_EQ(0, std::strcmp("Hello World!", buffer));
int retVal2 = snprintf_s(nullptr, sizeof(buffer), sizeof(buffer), "Hello %s", fmtStr);
ASSERT_EQ(-EINVAL, retVal2);
int retVal3 = snprintf_s(buffer, sizeof(buffer), sizeof(buffer), nullptr, fmtStr);
ASSERT_EQ(-EINVAL, retVal3);
int retVal4 = snprintf_s(nullptr, sizeof(buffer), sizeof(buffer), nullptr, fmtStr);
ASSERT_EQ(-EINVAL, retVal4);
}