portabtest: Actually test functions

Test functions snprintf(), strlcpy(), strlcat(), vsnprintf() for
correctness, not only existance (which was quite useless, because
if they weren't available, the program could not have been linked
at all ...).
This commit is contained in:
Alexander Barton 2014-01-01 15:57:34 +01:00
parent 18070e5381
commit d38747d951
1 changed files with 81 additions and 21 deletions

View File

@ -24,7 +24,82 @@
#include "exp.h" #include "exp.h"
static void Panic PARAMS((char *Reason)); static void
Panic(char *Reason)
{
/* Oops, something failed!? */
fprintf(stderr, "Oops, test for %s failed!?\n", Reason);
exit(1);
} /* Panic */
static void
Check_snprintf(void)
{
char str[5];
snprintf(str, sizeof(str), "%s", "1234567890");
if (str[4] != '\0')
Panic("snprintf NULL byte");
if (strlen(str) != 4)
Panic("snprintf string length");
}
static void
Check_strlcpy(void)
{
char str[5];
if (strlcpy(str, "1234567890", sizeof(str)) != 10)
Panic("strlcpy return code");
if (str[4] != '\0')
Panic("strlcpy NULL byte");
if (strlen(str) != 4)
Panic("strlcpy string length");
}
static void
Check_strlcat(void)
{
char str[5];
if (strlcpy(str, "12", sizeof(str)) != 2)
Panic("strlcpy for strlcat");
if (strlcat(str, "1234567890", sizeof(str)) != 12)
Panic("strlcat return code");
if (str[4] != '\0')
Panic("strlcat NULL byte");
if (strlen(str) != 4)
Panic("strlcat string length");
}
#ifdef PROTOTYPES
static void
Check_vsnprintf(const int Len, const char *Format, ...)
#else
static void
Check_vsnprintf(Len, Format, va_alist)
const int Len;
const char *Format;
va_dcl
#endif
{
char str[5];
va_list ap;
#ifdef PROTOTYPES
va_start(ap, Format);
#else
va_start(ap);
#endif
if (vsnprintf(str, sizeof(str), Format, ap) != Len)
Panic("vsnprintf return code");
va_end(ap);
if (str[4] != '\0')
Panic("vsnprintf NULL byte");
if (strlen(str) != 4)
Panic("vsnprintf string length");
}
GLOBAL int GLOBAL int
main(void) main(void)
@ -41,28 +116,13 @@ main(void)
if (sizeof(UINT32) != 4) if (sizeof(UINT32) != 4)
Panic("UINT32"); Panic("UINT32");
#ifdef PROTOTYPES
/* check functions */ /* check functions */
if (!snprintf) Check_snprintf();
Panic("snprintf"); Check_strlcpy();
if (!vsnprintf) Check_strlcat();
Panic("vsnprintf"); Check_vsnprintf(2+10, "%s%s", "ab", "1234567890");
if (!strlcpy)
Panic("strlcpy");
if (!strlcat)
Panic("strlcat");
#endif
/* ok, no error */
return 0; return 0;
} /* portab_check_types */ }
static void
Panic(char *Reason)
{
/* Oops, something failed!? */
fprintf(stderr, "Oops, test for %s failed!?", Reason);
exit(1);
} /* Panic */
/* -eof- */ /* -eof- */