X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?p=ngircd-alex.git;a=blobdiff_plain;f=src%2Fportab%2Fportabtest.c;h=5ad37b99ca3a4effb6524e0b8ed00e4514bbc425;hp=9e6bd228bae0df847ab6d32fc52401d9bfc0aa37;hb=HEAD;hpb=f024a4992a9a38d64d0fd63283cd0c484bdec683 diff --git a/src/portab/portabtest.c b/src/portab/portabtest.c index 9e6bd228..5ad37b99 100644 --- a/src/portab/portabtest.c +++ b/src/portab/portabtest.c @@ -1,6 +1,6 @@ /* * ngIRCd -- The Next Generation IRC Daemon - * Copyright (c)2001-2013 Alexander Barton (alex@barton.de) and Contributors. + * Copyright (c)2001-2014 Alexander Barton (alex@barton.de) and Contributors. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,13 +16,12 @@ * Test program for portab.h and friends ;-) */ -#include "imp.h" #include #include #include #include -#include "exp.h" +int allow_severity = 0, deny_severity = 0; static void Panic(char *Reason) @@ -105,9 +104,10 @@ Check_strlcat(void) static void Check_strtok_r(void) { - char *ptr, *last; + char *str, *ptr, *last; ptr = strdup("12,abc"); + str = ptr; ptr = strtok_r(ptr, ",", &last); if (!ptr) @@ -124,6 +124,8 @@ Check_strtok_r(void) ptr = strtok_r(NULL, ",", &last); if (ptr) Panic("strtok_r result #3"); + + free(str); } #ifdef PROTOTYPES @@ -139,16 +141,35 @@ va_dcl { char str[5]; va_list ap; + int r; #ifdef PROTOTYPES va_start(ap, Format); #else va_start(ap); #endif - if (vsnprintf(str, sizeof(str), Format, ap) != Len) - Panic("vsnprintf return code"); + r = vsnprintf(str, sizeof(str), Format, ap); va_end(ap); - + if (r != Len) { + /* C99 states that vsnprintf() "returns the number of + * characters that would have been printed if the n were + * unlimited", but according to the Linux manual page "glibc + * until 2.0.6 would return -1 when the output was truncated", + * and other implementations (libUTIL on A/UX) even return the + * number of characters processed ... so we only test our own + * implementation and warn on errors otherwise :-/ */ +#ifdef HAVE_VSNPRINTF + fprintf(stderr, + "\n ** WARNING: The vsnprintf() function of this system isn't standard\n"); + fprintf(stderr, + " ** conformant and returns a WRONG result: %d (should be %d)! The test\n", + r, Len); + fprintf(stderr, + " ** result has been ignored but may lead to errors during execution!\n\n"); +#else + Panic("vsnprintf return code"); +#endif + } if (str[4] != '\0') Panic("vsnprintf NULL byte"); if (strlen(str) != 4) @@ -178,7 +199,7 @@ main(void) Check_strlcat(); Check_strtok_r(); Check_vsnprintf(2+10, "%s%s", "ab", "1234567890"); - + return 0; }