Commit Diff
Diff:
18070e5381b7d66963dbe990c98b06b5c601e280
d38747d951a8a5007e97693cade3551e11e50569
Commit:
d38747d951a8a5007e97693cade3551e11e50569
Tree:
3a5595b0c53b7e8a558147520f25a4b5af830c7c
Author:
Alexander Barton <alex@barton.de>
Committer:
Alexander Barton <alex@barton.de>
Date:
Wed Jan 1 14:57:34 2014 UTC
Message:
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 ...).
blob - 8284c1d027d2af09640f7924050a8148b35bffd3
blob + 4f53ce76594a27fa0d70a551c6e213e66899de47
--- src/portab/portabtest.c
+++ src/portab/portabtest.c
@@ -24,8 +24,83 @@
#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
main(void)
{
@@ -41,28 +116,13 @@ main(void)
if (sizeof(UINT32) != 4)
Panic("UINT32");
-#ifdef PROTOTYPES
/* check functions */
- if (!snprintf)
- Panic("snprintf");
- if (!vsnprintf)
- Panic("vsnprintf");
- if (!strlcpy)
- Panic("strlcpy");
- if (!strlcat)
- Panic("strlcat");
-#endif
+ Check_snprintf();
+ Check_strlcpy();
+ Check_strlcat();
+ Check_vsnprintf(2+10, "%s%s", "ab", "1234567890");
- /* ok, no error */
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- */
IRCNow