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:
parent
18070e5381
commit
d38747d951
|
@ -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- */
|
||||||
|
|
Loading…
Reference in New Issue