[BACK]Return to portabtest.c CVS log [TXT][DIR] Up to [local] / ircnowd / src / portab

Annotation of ircnowd/src/portab/portabtest.c, Revision 1.1

1.1     ! tomglok     1: /*
        !             2:  * ngIRCd -- The Next Generation IRC Daemon
        !             3:  * Copyright (c)2001-2014 Alexander Barton (alex@barton.de) and Contributors.
        !             4:  *
        !             5:  * This program is free software; you can redistribute it and/or modify
        !             6:  * it under the terms of the GNU General Public License as published by
        !             7:  * the Free Software Foundation; either version 2 of the License, or
        !             8:  * (at your option) any later version.
        !             9:  * Please read the file COPYING, README and AUTHORS for more information.
        !            10:  */
        !            11:
        !            12: #include "portab.h"
        !            13:
        !            14: /**
        !            15:  * @file
        !            16:  * Test program for portab.h and friends ;-)
        !            17:  */
        !            18:
        !            19: #include <stdarg.h>
        !            20: #include <stdio.h>
        !            21: #include <stdlib.h>
        !            22: #include <string.h>
        !            23:
        !            24: int allow_severity = 0, deny_severity = 0;
        !            25:
        !            26: static void
        !            27: Panic(char *Reason)
        !            28: {
        !            29:        /* Oops, something failed!? */
        !            30:        fprintf(stderr, "Oops, test for %s failed!?\n", Reason);
        !            31:        exit(1);
        !            32: } /* Panic */
        !            33:
        !            34: static void
        !            35: Check_snprintf(void)
        !            36: {
        !            37:        char str[5];
        !            38:
        !            39:        snprintf(str, sizeof(str), "%s", "1234567890");
        !            40:        if (str[4] != '\0')
        !            41:                Panic("snprintf NULL byte");
        !            42:        if (strlen(str) != 4)
        !            43:                Panic("snprintf string length");
        !            44: }
        !            45:
        !            46: static void
        !            47: Check_strdup(void)
        !            48: {
        !            49:        char *ptr;
        !            50:
        !            51:        ptr = strdup("1234567890");
        !            52:        if (!ptr)
        !            53:                Panic("strdup");
        !            54:        if (ptr[10] != '\0')
        !            55:                Panic("strdup NULL byte");
        !            56:        if (strlen(ptr) != 10)
        !            57:                Panic("strdup string length");
        !            58:        free(ptr);
        !            59: }
        !            60:
        !            61: static void
        !            62: Check_strndup(void)
        !            63: {
        !            64:        char *ptr;
        !            65:
        !            66:        ptr = strndup("1234567890", 5);
        !            67:        if (!ptr)
        !            68:                Panic("strndup");
        !            69:        if (ptr[5] != '\0')
        !            70:                Panic("strndup NULL byte");
        !            71:        if (strlen(ptr) != 5)
        !            72:                Panic("strndup string length");
        !            73:        free(ptr);
        !            74: }
        !            75:
        !            76: static void
        !            77: Check_strlcpy(void)
        !            78: {
        !            79:        char str[5];
        !            80:
        !            81:        if (strlcpy(str, "1234567890", sizeof(str)) != 10)
        !            82:                Panic("strlcpy return code");
        !            83:        if (str[4] != '\0')
        !            84:                Panic("strlcpy NULL byte");
        !            85:        if (strlen(str) != 4)
        !            86:                Panic("strlcpy string length");
        !            87: }
        !            88:
        !            89: static void
        !            90: Check_strlcat(void)
        !            91: {
        !            92:        char str[5];
        !            93:
        !            94:        if (strlcpy(str, "12", sizeof(str)) != 2)
        !            95:                Panic("strlcpy for strlcat");
        !            96:        if (strlcat(str, "1234567890", sizeof(str)) != 12)
        !            97:                Panic("strlcat return code");
        !            98:        if (str[4] != '\0')
        !            99:                Panic("strlcat NULL byte");
        !           100:        if (strlen(str) != 4)
        !           101:                Panic("strlcat string length");
        !           102: }
        !           103:
        !           104: static void
        !           105: Check_strtok_r(void)
        !           106: {
        !           107:        char *str, *ptr, *last;
        !           108:
        !           109:        ptr = strdup("12,abc");
        !           110:        str = ptr;
        !           111:
        !           112:        ptr = strtok_r(ptr, ",", &last);
        !           113:        if (!ptr)
        !           114:                Panic("strtok_r result #1");
        !           115:        if (strcmp(ptr, "12") != 0)
        !           116:                Panic("strtok_r token #1");
        !           117:
        !           118:        ptr = strtok_r(NULL, ",", &last);
        !           119:        if (!ptr)
        !           120:                Panic("strtok_r result #2");
        !           121:        if (strcmp(ptr, "abc") != 0)
        !           122:                Panic("strtok_r token #2");
        !           123:
        !           124:        ptr = strtok_r(NULL, ",", &last);
        !           125:        if (ptr)
        !           126:                Panic("strtok_r result #3");
        !           127:
        !           128:        free(str);
        !           129: }
        !           130:
        !           131: #ifdef PROTOTYPES
        !           132: static void
        !           133: Check_vsnprintf(const int Len, const char *Format, ...)
        !           134: #else
        !           135: static void
        !           136: Check_vsnprintf(Len, Format, va_alist)
        !           137: const int Len;
        !           138: const char *Format;
        !           139: va_dcl
        !           140: #endif
        !           141: {
        !           142:        char str[5];
        !           143:        va_list ap;
        !           144:        int r;
        !           145:
        !           146: #ifdef PROTOTYPES
        !           147:        va_start(ap, Format);
        !           148: #else
        !           149:        va_start(ap);
        !           150: #endif
        !           151:        r = vsnprintf(str, sizeof(str), Format, ap);
        !           152:        va_end(ap);
        !           153:        if (r != Len) {
        !           154:                /* C99 states that vsnprintf() "returns the number of
        !           155:                 * characters that would have been printed if the n were
        !           156:                 * unlimited", but according to the Linux manual page "glibc
        !           157:                 * until 2.0.6 would return -1 when the output was truncated",
        !           158:                 * and other implementations (libUTIL on A/UX) even return the
        !           159:                 * number of characters processed ... so we only test our own
        !           160:                 * implementation and warn on errors otherwise :-/ */
        !           161: #ifdef HAVE_VSNPRINTF
        !           162:                fprintf(stderr,
        !           163:                        "\n ** WARNING: The vsnprintf() function of this system isn't standard\n");
        !           164:                fprintf(stderr,
        !           165:                        " ** conformant and returns a WRONG result: %d (should be %d)! The test\n",
        !           166:                        r, Len);
        !           167:                fprintf(stderr,
        !           168:                        " ** result has been ignored but may lead to errors during execution!\n\n");
        !           169: #else
        !           170:                Panic("vsnprintf return code");
        !           171: #endif
        !           172:        }
        !           173:        if (str[4] != '\0')
        !           174:                Panic("vsnprintf NULL byte");
        !           175:        if (strlen(str) != 4)
        !           176:                Panic("vsnprintf string length");
        !           177: }
        !           178:
        !           179: GLOBAL int
        !           180: main(void)
        !           181: {
        !           182:        /* validate datatypes */
        !           183:        if (false != 0)
        !           184:                Panic("false");
        !           185:        if (true != 1)
        !           186:                Panic("true");
        !           187:        if (sizeof(UINT8) != 1)
        !           188:                Panic("UINT8");
        !           189:        if (sizeof(UINT16) != 2)
        !           190:                Panic("UINT16");
        !           191:        if (sizeof(UINT32) != 4)
        !           192:                Panic("UINT32");
        !           193:
        !           194:        /* check functions */
        !           195:        Check_snprintf();
        !           196:        Check_strdup();
        !           197:        Check_strndup();
        !           198:        Check_strlcpy();
        !           199:        Check_strlcat();
        !           200:        Check_strtok_r();
        !           201:        Check_vsnprintf(2+10, "%s%s", "ab", "1234567890");
        !           202:
        !           203:        return 0;
        !           204: }
        !           205:
        !           206: /* -eof- */

CVSweb