1
0
mirror of https://github.com/pgbackrest/pgbackrest.git synced 2025-07-01 00:25:06 +02:00

Add cvtSSizeToZ() and debug macros.

This commit is contained in:
David Steele
2019-03-15 22:16:50 +04:00
parent d16bff64cd
commit b68d1d60a1
5 changed files with 40 additions and 2 deletions

View File

@ -36,6 +36,10 @@
<release-item>
<p>Make <code>strLstDup()</code> null-tolerant.</p>
</release-item>
<release-item>
<p>Add <code>cvtSSizeToZ()</code> and debug macros.</p>
</release-item>
</release-development-list>
</release-core-list>
</release>

View File

@ -206,6 +206,11 @@ size_t typeToLog(const char *typeName, char *buffer, size_t bufferSize);
#define FUNCTION_LOG_SIZE_FORMAT(value, buffer, bufferSize) \
cvtSizeToZ(value, buffer, bufferSize)
#define FUNCTION_LOG_SSIZE_TYPE \
ssize_t
#define FUNCTION_LOG_SSIZE_FORMAT(value, buffer, bufferSize) \
cvtSSizeToZ(value, buffer, bufferSize)
#define FUNCTION_LOG_UINT_TYPE \
unsigned int
#define FUNCTION_LOG_UINT_FORMAT(value, buffer, bufferSize) \

View File

@ -344,6 +344,28 @@ cvtSizeToZ(size_t value, char *buffer, size_t bufferSize)
FUNCTION_TEST_RETURN(result);
}
/***********************************************************************************************************************************
Convert ssize to zero-terminated string
***********************************************************************************************************************************/
size_t
cvtSSizeToZ(ssize_t value, char *buffer, size_t bufferSize)
{
FUNCTION_TEST_BEGIN();
FUNCTION_TEST_PARAM(SSIZE, value);
FUNCTION_TEST_PARAM_P(CHARDATA, buffer);
FUNCTION_TEST_PARAM(SIZE, bufferSize);
FUNCTION_TEST_END();
ASSERT(buffer != NULL);
size_t result = (size_t)snprintf(buffer, bufferSize, "%zd", value);
if (result >= bufferSize)
THROW(AssertError, "buffer overflow");
FUNCTION_TEST_RETURN(result);
}
/***********************************************************************************************************************************
Convert uint to zero-terminated string
***********************************************************************************************************************************/

View File

@ -26,6 +26,7 @@ int64_t cvtZToInt64Base(const char *value, int base);
size_t cvtModeToZ(mode_t value, char *buffer, size_t bufferSize);
size_t cvtSizeToZ(size_t value, char *buffer, size_t bufferSize);
size_t cvtSSizeToZ(ssize_t value, char *buffer, size_t bufferSize);
size_t cvtUIntToZ(unsigned int value, char *buffer, size_t bufferSize);
unsigned int cvtZToUInt(const char *value);

View File

@ -90,14 +90,20 @@ testRun(void)
}
// *****************************************************************************************************************************
if (testBegin("cvtSizeToZ()"))
if (testBegin("cvtSizeToZ() and cvtSSizeToZ()"))
{
char buffer[STACK_TRACE_PARAM_MAX];
TEST_ERROR(cvtSizeToZ(9999, buffer, 4), AssertError, "buffer overflow");
TEST_RESULT_INT(cvtSizeToZ(4294967295, buffer, STACK_TRACE_PARAM_MAX), 10, "convert size to string");
TEST_RESULT_UINT(cvtSizeToZ(4294967295, buffer, STACK_TRACE_PARAM_MAX), 10, "convert size to string");
TEST_RESULT_STR(buffer, "4294967295", " check buffer");
// ------------------------------------------------------------------------------------------------------------------------
TEST_ERROR(cvtSSizeToZ(-9999, buffer, 4), AssertError, "buffer overflow");
TEST_RESULT_INT(cvtSSizeToZ(-9999, buffer, STACK_TRACE_PARAM_MAX), 5, "convert ssize to string");
TEST_RESULT_STR(buffer, "-9999", " check buffer");
}
// *****************************************************************************************************************************