nsprpub/lib/tests/string.c

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/nsprpub/lib/tests/string.c	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,3084 @@
     1.4 +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
     1.5 +/* This Source Code Form is subject to the terms of the Mozilla Public
     1.6 + * License, v. 2.0. If a copy of the MPL was not distributed with this
     1.7 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     1.8 +
     1.9 +#include "plstr.h"
    1.10 +#include "nspr.h"
    1.11 +
    1.12 +#include <stdio.h>
    1.13 +
    1.14 +/* PL_strlen */
    1.15 +PRBool test_001(void)
    1.16 +{
    1.17 +    static struct
    1.18 +    {
    1.19 +        const char *str;
    1.20 +        PRUint32    len;
    1.21 +    } array[] =
    1.22 +      {
    1.23 +          { (const char *)0, 0 },
    1.24 +          { "", 0 },
    1.25 +          { "a", 1 },
    1.26 +          { "abcdefg", 7 },
    1.27 +          { "abcdefg\0hijk", 7 }
    1.28 +      };
    1.29 +
    1.30 +    int i;
    1.31 +
    1.32 +    printf("Test 001 (PL_strlen)      ..."); fflush(stdout);
    1.33 +
    1.34 +    for( i = 0; i < sizeof(array)/sizeof(array[0]); i++ )
    1.35 +    {
    1.36 +        if( PL_strlen(array[i].str) != array[i].len )
    1.37 +        {
    1.38 +            printf("FAIL (%d: %s->%d, %d)\n", i, 
    1.39 +                   array[i].str ? array[i].str : "(null)",
    1.40 +                   PL_strlen(array[i].str), array[i].len);
    1.41 +            return PR_FALSE;
    1.42 +        }
    1.43 +    }
    1.44 +
    1.45 +    printf("PASS\n");
    1.46 +    return PR_TRUE;
    1.47 +}
    1.48 +
    1.49 +/* PL_strnlen */
    1.50 +PRBool test_002(void)
    1.51 +{
    1.52 +    static struct
    1.53 +    {
    1.54 +        const char *str;
    1.55 +        PRUint32    max;
    1.56 +        PRUint32    len;
    1.57 +    } array[] =
    1.58 +      {
    1.59 +          { (const char *)0, 0, 0 },
    1.60 +          { (const char *)0, 12, 0 },
    1.61 +          { "", 0, 0 },
    1.62 +          { "", 12, 0 },
    1.63 +          { "a", 0, 0 },
    1.64 +          { "a", 1, 1 },
    1.65 +          { "a", 12, 1 },
    1.66 +          { "abcdefg", 0, 0 },
    1.67 +          { "abcdefg", 1, 1 },
    1.68 +          { "abcdefg", 7, 7 },
    1.69 +          { "abcdefg", 12, 7 },
    1.70 +          { "abcdefg\0hijk", 0, 0 },
    1.71 +          { "abcdefg\0hijk", 1, 1 },
    1.72 +          { "abcdefg\0hijk", 7, 7 },
    1.73 +          { "abcdefg\0hijk", 12, 7 },
    1.74 +      };
    1.75 +
    1.76 +    int i;
    1.77 +
    1.78 +    printf("Test 002 (PL_strnlen)     ..."); fflush(stdout);
    1.79 +
    1.80 +    for( i = 0; i < sizeof(array)/sizeof(array[0]); i++ )
    1.81 +    {
    1.82 +        if( PL_strnlen(array[i].str, array[i].max) != array[i].len )
    1.83 +        {
    1.84 +            printf("FAIL (%d: %s,%d->%d, %d)\n", i,
    1.85 +                   array[i].str ? array[i].str : "(null)", array[i].max,
    1.86 +                   PL_strnlen(array[i].str, array[i].max), array[i].len);
    1.87 +            return PR_FALSE;
    1.88 +        }
    1.89 +    }
    1.90 +
    1.91 +    printf("PASS\n");
    1.92 +    return PR_TRUE;
    1.93 +}
    1.94 +
    1.95 +/* PL_strcpy */
    1.96 +PRBool test_003(void)
    1.97 +{
    1.98 +    static char buffer[ 1024 ];
    1.99 +
   1.100 +    static struct
   1.101 +    {
   1.102 +        const char *str;
   1.103 +        char       *dest;
   1.104 +        char       *rv;
   1.105 +        PRBool      comp;
   1.106 +    } array[] =
   1.107 +      {
   1.108 +          { (const char *)0, (char *)0, (char *)0, PR_FALSE },
   1.109 +          { (const char *)0, buffer, (char *)0, PR_FALSE },
   1.110 +          { "", (char *)0, (char *)0, PR_FALSE },
   1.111 +          { "", buffer, buffer, PR_TRUE },
   1.112 +          { "a", (char *)0, (char *)0, PR_FALSE },
   1.113 +          { "a", buffer, buffer, PR_TRUE },
   1.114 +          { "abcdefg", (char *)0, (char *)0, PR_FALSE },
   1.115 +          { "abcdefg", buffer, buffer, PR_TRUE },
   1.116 +          { "wxyz\0abcdefg", (char *)0, (char *)0, PR_FALSE },
   1.117 +          { "wxyz\0abcdefg", buffer, buffer, PR_TRUE }
   1.118 +      };
   1.119 +
   1.120 +    int i;
   1.121 +
   1.122 +    printf("Test 003 (PL_strcpy)      ..."); fflush(stdout);
   1.123 +
   1.124 +    for( i = 0; i < sizeof(array)/sizeof(array[0]); i++ )
   1.125 +    {
   1.126 +        char *rv;
   1.127 +        const char *a = array[i].str;
   1.128 +        const char *b = (const char *)array[i].dest;
   1.129 +
   1.130 +        rv = PL_strcpy(array[i].dest, array[i].str);
   1.131 +        if( array[i].rv != rv )
   1.132 +        {
   1.133 +            printf("FAIL %d: (0x%x, %s)->0x%x\n", i, array[i].dest,
   1.134 +                   array[i].str ? array[i].str : "(null)", rv);
   1.135 +            return PR_FALSE;
   1.136 +        }
   1.137 +
   1.138 +        if( array[i].comp )
   1.139 +        {
   1.140 +            while( 1 )
   1.141 +            {
   1.142 +                if( *a != *b )
   1.143 +                {
   1.144 +                    printf("FAIL %d: %s->%.32s\n", i, 
   1.145 +                           array[i].str ? array[i].str : "(null)", 
   1.146 +                           array[i].dest ? array[i].dest : "(null)");
   1.147 +                    return PR_FALSE;
   1.148 +                }
   1.149 +
   1.150 +                if( (char)0 == *a ) break;
   1.151 +
   1.152 +                a++;
   1.153 +                b++;
   1.154 +            }
   1.155 +        }
   1.156 +    }
   1.157 +
   1.158 +    printf("PASS\n");
   1.159 +    return PR_TRUE;
   1.160 +}
   1.161 +
   1.162 +/* PL_strncpy */
   1.163 +PRBool test_004(void)
   1.164 +{
   1.165 +    static char buffer[ 1024 ];
   1.166 +
   1.167 +    static struct
   1.168 +    {
   1.169 +        const char *str;
   1.170 +        PRUint32    len;
   1.171 +        char       *dest;
   1.172 +        char       *rv;
   1.173 +        PRBool      comp;
   1.174 +        const char *result;
   1.175 +        PRBool      nulled;
   1.176 +    } array[] =
   1.177 +      {
   1.178 +          { (const char *)0, 0, (char *)0, (char *)0, PR_FALSE, (const char *)0, PR_FALSE },
   1.179 +          { (const char *)0, 0, buffer, (char *)0, PR_FALSE, (const char *)0, PR_FALSE },
   1.180 +          { (const char *)0, 1, (char *)0, (char *)0, PR_FALSE, (const char *)0, PR_FALSE },
   1.181 +          { (const char *)0, 7, (char *)0, (char *)0, PR_FALSE, (const char *)0, PR_FALSE },
   1.182 +          { (const char *)0, 1, buffer, (char *)0, PR_FALSE, (const char *)0, PR_FALSE },
   1.183 +          { (const char *)0, 7, buffer, (char *)0, PR_FALSE, (const char *)0, PR_FALSE },
   1.184 +          { "", 0, (char *)0, (char *)0, PR_FALSE, (const char *)0, PR_FALSE },
   1.185 +          { "", 0, buffer, buffer, PR_FALSE, (const char *)0, PR_FALSE },
   1.186 +          { "", 1, (char *)0, (char *)0, PR_FALSE, (const char *)0, PR_FALSE },
   1.187 +          { "", 7, (char *)0, (char *)0, PR_FALSE, (const char *)0, PR_FALSE },
   1.188 +          { "", 1, buffer, buffer, PR_TRUE, "", PR_TRUE },
   1.189 +          { "", 7, buffer, buffer, PR_TRUE, "", PR_TRUE },
   1.190 +          { "a", 0, (char *)0, (char *)0, PR_FALSE, (const char *)0, PR_FALSE },
   1.191 +          { "a", 0, buffer, buffer, PR_FALSE, (const char *)0, PR_FALSE },
   1.192 +          { "a", 1, (char *)0, (char *)0, PR_FALSE, (const char *)0, PR_FALSE },
   1.193 +          { "a", 7, (char *)0, (char *)0, PR_FALSE, (const char *)0, PR_FALSE },
   1.194 +          { "b", 1, buffer, buffer, PR_TRUE, "b", PR_FALSE },
   1.195 +          { "c", 7, buffer, buffer, PR_TRUE, "c", PR_TRUE },
   1.196 +          { "de", 0, (char *)0, (char *)0, PR_FALSE, (const char *)0, PR_FALSE },
   1.197 +          { "de", 0, buffer, buffer, PR_FALSE, (const char *)0, PR_FALSE },
   1.198 +          { "de", 1, (char *)0, (char *)0, PR_FALSE, (const char *)0, PR_FALSE },
   1.199 +          { "de", 7, (char *)0, (char *)0, PR_FALSE, (const char *)0, PR_FALSE },
   1.200 +          { "fg", 1, buffer, buffer, PR_TRUE, "f", PR_FALSE },
   1.201 +          { "hi", 7, buffer, buffer, PR_TRUE, "hi", PR_TRUE },
   1.202 +          { "jklmnopq", 0, (char *)0, (char *)0, PR_FALSE, (const char *)0, PR_FALSE },
   1.203 +          { "jklmnopq", 0, buffer, buffer, PR_FALSE, (const char *)0, PR_FALSE },
   1.204 +          { "jklmnopq", 1, (char *)0, (char *)0, PR_FALSE, (const char *)0, PR_FALSE },
   1.205 +          { "jklmnopq", 7, (char *)0, (char *)0, PR_FALSE, (const char *)0, PR_FALSE },
   1.206 +          { "rstuvwxy", 1, buffer, buffer, PR_TRUE, "r", PR_FALSE },
   1.207 +          { "zABCDEFG", 7, buffer, buffer, PR_TRUE, "zABCDEF", PR_FALSE },
   1.208 +          { "a\0XXX", 0, (char *)0, (char *)0, PR_FALSE, (const char *)0, PR_FALSE },
   1.209 +          { "a\0XXX", 0, buffer, buffer, PR_FALSE, (const char *)0, PR_FALSE },
   1.210 +          { "a\0XXX", 1, (char *)0, (char *)0, PR_FALSE, (const char *)0, PR_FALSE },
   1.211 +          { "a\0XXX", 7, (char *)0, (char *)0, PR_FALSE, (const char *)0, PR_FALSE },
   1.212 +          { "b\0XXX", 1, buffer, buffer, PR_TRUE, "b", PR_FALSE },
   1.213 +          { "c\0XXX", 7, buffer, buffer, PR_TRUE, "c", PR_TRUE },
   1.214 +          { "de\0XXX", 0, (char *)0, (char *)0, PR_FALSE, (const char *)0, PR_FALSE },
   1.215 +          { "de\0XXX", 0, buffer, buffer, PR_FALSE, (const char *)0, PR_FALSE },
   1.216 +          { "de\0XXX", 1, (char *)0, (char *)0, PR_FALSE, (const char *)0, PR_FALSE },
   1.217 +          { "de\0XXX", 7, (char *)0, (char *)0, PR_FALSE, (const char *)0, PR_FALSE },
   1.218 +          { "fg\0XXX", 1, buffer, buffer, PR_TRUE, "f", PR_FALSE },
   1.219 +          { "hi\0XXX", 7, buffer, buffer, PR_TRUE, "hi", PR_TRUE },
   1.220 +          { "jklmnopq\0XXX", 0, (char *)0, (char *)0, PR_FALSE, (const char *)0, PR_FALSE },
   1.221 +          { "jklmnopq\0XXX", 0, buffer, buffer, PR_FALSE, (const char *)0, PR_FALSE },
   1.222 +          { "jklmnopq\0XXX", 1, (char *)0, (char *)0, PR_FALSE, (const char *)0, PR_FALSE },
   1.223 +          { "jklmnopq\0XXX", 7, (char *)0, (char *)0, PR_FALSE, (const char *)0, PR_FALSE },
   1.224 +          { "rstuvwxy\0XXX", 1, buffer, buffer, PR_TRUE, "r", PR_FALSE },
   1.225 +          { "zABCDEFG\0XXX", 7, buffer, buffer, PR_TRUE, "zABCDEF", PR_FALSE },
   1.226 +      };
   1.227 +
   1.228 +    int i;
   1.229 +
   1.230 +    printf("Test 004 (PL_strncpy)     ..."); fflush(stdout);
   1.231 +
   1.232 +    for( i = 0; i < sizeof(array)/sizeof(array[0]); i++ )
   1.233 +    {
   1.234 +        char *rv;
   1.235 +        int j;
   1.236 +
   1.237 +        for( j = 0; j < sizeof(buffer); j++ )
   1.238 +            buffer[j] = '-';
   1.239 +
   1.240 +        rv = PL_strncpy(array[i].dest, array[i].str, array[i].len);
   1.241 +        if( array[i].rv != rv )
   1.242 +        {
   1.243 +            printf("FAIL %d: (0x%x, %s, %lu)->0x%x\n", i, array[i].dest,
   1.244 +                   array[i].str ? array[i].str : "(null)", array[i].len, rv);
   1.245 +            return PR_FALSE;
   1.246 +        }
   1.247 +
   1.248 +        if( array[i].comp )
   1.249 +        {
   1.250 +            const char *a = array[i].result;
   1.251 +            const char *b = array[i].dest;
   1.252 +
   1.253 +            while( *a )
   1.254 +            {
   1.255 +                if( *a != *b )
   1.256 +                {
   1.257 +                    printf("FAIL %d: %s != %.32s\n", i, 
   1.258 +                           array[i].result, array[i].dest);
   1.259 +                    return PR_FALSE;
   1.260 +                }
   1.261 +
   1.262 +                a++;
   1.263 +                b++;
   1.264 +            }
   1.265 +
   1.266 +            if( array[i].nulled )
   1.267 +            {
   1.268 +                if( *b != '\0' )
   1.269 +                {
   1.270 +                    printf("FAIL %d: not terminated\n", i);
   1.271 +                    return PR_FALSE;
   1.272 +                }
   1.273 +            }
   1.274 +            else
   1.275 +            {
   1.276 +                if( *b != '-' )
   1.277 +                {
   1.278 +                    printf("FAIL %d: overstepped\n", i);
   1.279 +                    return PR_FALSE;
   1.280 +                }
   1.281 +            }
   1.282 +        }
   1.283 +    }
   1.284 +                
   1.285 +    printf("PASS\n");
   1.286 +    return PR_TRUE;
   1.287 +}
   1.288 +
   1.289 +/* PL_strncpyz */
   1.290 +PRBool test_005(void)
   1.291 +{
   1.292 +    static char buffer[ 1024 ];
   1.293 +
   1.294 +    static struct
   1.295 +    {
   1.296 +        const char *str;
   1.297 +        PRUint32    len;
   1.298 +        char       *dest;
   1.299 +        char       *rv;
   1.300 +        PRBool      comp;
   1.301 +        const char *result;
   1.302 +    } array[] =
   1.303 +      {
   1.304 +          { (const char *)0, 0, (char *)0, (char *)0, PR_FALSE, (const char *)0 },
   1.305 +          { (const char *)0, 0, buffer, (char *)0, PR_FALSE, (const char *)0 },
   1.306 +          { (const char *)0, 1, (char *)0, (char *)0, PR_FALSE, (const char *)0 },
   1.307 +          { (const char *)0, 7, (char *)0, (char *)0, PR_FALSE, (const char *)0 },
   1.308 +          { (const char *)0, 1, buffer, (char *)0, PR_FALSE, (const char *)0 },
   1.309 +          { (const char *)0, 7, buffer, (char *)0, PR_FALSE, (const char *)0 },
   1.310 +          { "", 0, (char *)0, (char *)0, PR_FALSE, (const char *)0 },
   1.311 +          { "", 0, buffer, (char *)0, PR_FALSE, (const char *)0 },
   1.312 +          { "", 1, (char *)0, (char *)0, PR_FALSE, (const char *)0 },
   1.313 +          { "", 7, (char *)0, (char *)0, PR_FALSE, (const char *)0 },
   1.314 +          { "", 1, buffer, buffer, PR_TRUE, "" },
   1.315 +          { "", 7, buffer, buffer, PR_TRUE, "" },
   1.316 +          { "a", 0, (char *)0, (char *)0, PR_FALSE, (const char *)0 },
   1.317 +          { "a", 0, buffer, (char *)0, PR_FALSE, (const char *)0 },
   1.318 +          { "a", 1, (char *)0, (char *)0, PR_FALSE, (const char *)0 },
   1.319 +          { "a", 7, (char *)0, (char *)0, PR_FALSE, (const char *)0 },
   1.320 +          { "b", 1, buffer, buffer, PR_TRUE, "" },
   1.321 +          { "c", 7, buffer, buffer, PR_TRUE, "c" },
   1.322 +          { "de", 0, (char *)0, (char *)0, PR_FALSE, (const char *)0 },
   1.323 +          { "de", 0, buffer, (char *)0, PR_FALSE, (const char *)0 },
   1.324 +          { "de", 1, (char *)0, (char *)0, PR_FALSE, (const char *)0 },
   1.325 +          { "de", 7, (char *)0, (char *)0, PR_FALSE, (const char *)0 },
   1.326 +          { "fg", 1, buffer, buffer, PR_TRUE, "" },
   1.327 +          { "hi", 7, buffer, buffer, PR_TRUE, "hi" },
   1.328 +          { "jklmnopq", 0, (char *)0, (char *)0, PR_FALSE, (const char *)0 },
   1.329 +          { "jklmnopq", 0, buffer, (char *)0, PR_FALSE, (const char *)0 },
   1.330 +          { "jklmnopq", 1, (char *)0, (char *)0, PR_FALSE, (const char *)0 },
   1.331 +          { "jklmnopq", 7, (char *)0, (char *)0, PR_FALSE, (const char *)0 },
   1.332 +          { "rstuvwxy", 1, buffer, buffer, PR_TRUE, "" },
   1.333 +          { "zABCDEFG", 7, buffer, buffer, PR_TRUE, "zABCDE" },
   1.334 +          { "a\0XXX", 0, (char *)0, (char *)0, PR_FALSE, (const char *)0 },
   1.335 +          { "a\0XXX", 0, buffer, (char *)0, PR_FALSE, (const char *)0 },
   1.336 +          { "a\0XXX", 1, (char *)0, (char *)0, PR_FALSE, (const char *)0 },
   1.337 +          { "a\0XXX", 7, (char *)0, (char *)0, PR_FALSE, (const char *)0 },
   1.338 +          { "b\0XXX", 1, buffer, buffer, PR_TRUE, "" },
   1.339 +          { "c\0XXX", 7, buffer, buffer, PR_TRUE, "c" },
   1.340 +          { "de\0XXX", 0, (char *)0, (char *)0, PR_FALSE, (const char *)0 },
   1.341 +          { "de\0XXX", 0, buffer, (char *)0, PR_FALSE, (const char *)0 },
   1.342 +          { "de\0XXX", 1, (char *)0, (char *)0, PR_FALSE, (const char *)0 },
   1.343 +          { "de\0XXX", 7, (char *)0, (char *)0, PR_FALSE, (const char *)0 },
   1.344 +          { "fg\0XXX", 1, buffer, buffer, PR_TRUE, "" },
   1.345 +          { "hi\0XXX", 7, buffer, buffer, PR_TRUE, "hi" },
   1.346 +          { "jklmnopq\0XXX", 0, (char *)0, (char *)0, PR_FALSE, (const char *)0 },
   1.347 +          { "jklmnopq\0XXX", 0, buffer, (char *)0, PR_FALSE, (const char *)0 },
   1.348 +          { "jklmnopq\0XXX", 1, (char *)0, (char *)0, PR_FALSE, (const char *)0 },
   1.349 +          { "jklmnopq\0XXX", 7, (char *)0, (char *)0, PR_FALSE, (const char *)0 },
   1.350 +          { "rstuvwxy\0XXX", 1, buffer, buffer, PR_TRUE, "" },
   1.351 +          { "zABCDEFG\0XXX", 7, buffer, buffer, PR_TRUE, "zABCDE" },
   1.352 +      };
   1.353 +
   1.354 +    int i;
   1.355 +
   1.356 +    printf("Test 005 (PL_strncpyz)    ..."); fflush(stdout);
   1.357 +
   1.358 +    for( i = 0; i < sizeof(array)/sizeof(array[0]); i++ )
   1.359 +    {
   1.360 +        char *rv;
   1.361 +        int j;
   1.362 +
   1.363 +        for( j = 0; j < sizeof(buffer); j++ )
   1.364 +            buffer[j] = '-';
   1.365 +
   1.366 +        rv = PL_strncpyz(array[i].dest, array[i].str, array[i].len);
   1.367 +        if( array[i].rv != rv )
   1.368 +        {
   1.369 +            printf("FAIL %d: (0x%x, %s, %lu)->0x%x\n", i, array[i].dest,
   1.370 +                   array[i].str ? array[i].str : "(null)", array[i].len, rv);
   1.371 +            return PR_FALSE;
   1.372 +        }
   1.373 +
   1.374 +        if( array[i].comp )
   1.375 +        {
   1.376 +            const char *a = array[i].result;
   1.377 +            const char *b = array[i].dest;
   1.378 +
   1.379 +            while( 1 )
   1.380 +            {
   1.381 +                if( *a != *b )
   1.382 +                {
   1.383 +                    printf("FAIL %d: %s != %.32s\n", i, 
   1.384 +                           array[i].result, array[i].dest);
   1.385 +                    return PR_FALSE;
   1.386 +                }
   1.387 +
   1.388 +                if( (char)0 == *a ) break;
   1.389 +
   1.390 +                a++;
   1.391 +                b++;
   1.392 +            }
   1.393 +        }
   1.394 +    }
   1.395 +                
   1.396 +    printf("PASS\n");
   1.397 +    return PR_TRUE;
   1.398 +}
   1.399 +
   1.400 +/* PL_strdup */
   1.401 +PRBool test_006(void)
   1.402 +{
   1.403 +    static const char *array[] =
   1.404 +    {
   1.405 +        (const char *)0,
   1.406 +        "",
   1.407 +        "a",
   1.408 +        "abcdefg"
   1.409 +    };
   1.410 +
   1.411 +    int i;
   1.412 +
   1.413 +    printf("Test 006 (PL_strdup)      ..."); fflush(stdout);
   1.414 +
   1.415 +    for( i = 0; i < sizeof(array)/sizeof(array[0]); i++ )
   1.416 +    {
   1.417 +        char *rv = PL_strdup(array[i]);
   1.418 +
   1.419 +        if( (char *)0 == rv )
   1.420 +        {
   1.421 +            printf("FAIL %d: 0x%x -> 0\n", i, array[i]);
   1.422 +            return PR_FALSE;
   1.423 +        }
   1.424 +
   1.425 +        if( (const char *)0 == array[i] )
   1.426 +        {
   1.427 +            if( (char)0 != *rv )
   1.428 +            {
   1.429 +                printf("FAIL %d: (const char *)0 -> %.32s\n", i, rv);
   1.430 +                return PR_FALSE;
   1.431 +            }
   1.432 +        }
   1.433 +        else
   1.434 +        {
   1.435 +            const char *a = array[i];
   1.436 +            const char *b = (const char *)rv;
   1.437 +
   1.438 +            while( 1 )
   1.439 +            {
   1.440 +                if( *a != *b )
   1.441 +                {
   1.442 +                    printf("FAIL %d: %s != %.32s\n", i, array[i], rv);
   1.443 +                    return PR_FALSE;
   1.444 +                }
   1.445 +
   1.446 +                if( (char)0 == *a ) break;
   1.447 +
   1.448 +                a++;
   1.449 +                b++;
   1.450 +            }
   1.451 +
   1.452 +        }
   1.453 +        PL_strfree(rv);
   1.454 +    }
   1.455 +
   1.456 +    printf("PASS\n");
   1.457 +    return PR_TRUE;
   1.458 +}
   1.459 +
   1.460 +/* PL_strndup */
   1.461 +PRBool test_007(void)
   1.462 +{
   1.463 +    static struct
   1.464 +    {
   1.465 +        const char *str;
   1.466 +        PRUint32    len;
   1.467 +        const char *result;
   1.468 +    } array[] =
   1.469 +      {
   1.470 +          { (const char *)0, 0, "" },
   1.471 +          { (const char *)0, 1, "" },
   1.472 +          { (const char *)0, 7, "" },
   1.473 +          { "", 0, "" },
   1.474 +          { "", 1, "" },
   1.475 +          { "", 7, "" },
   1.476 +          { "a", 0, "" },
   1.477 +          { "a", 1, "a" },
   1.478 +          { "a", 7, "a" },
   1.479 +          { "ab", 0, "" },
   1.480 +          { "ab", 1, "a" },
   1.481 +          { "ab", 7, "ab" },
   1.482 +          { "abcdefg", 0, "" },
   1.483 +          { "abcdefg", 1, "a" },
   1.484 +          { "abcdefg", 7, "abcdefg" },
   1.485 +          { "abcdefghijk", 0, "" },
   1.486 +          { "abcdefghijk", 1, "a" },
   1.487 +          { "abcdefghijk", 7, "abcdefg" },
   1.488 +          { "abcdef\0ghijk", 0, "" },
   1.489 +          { "abcdef\0ghijk", 1, "a" },
   1.490 +          { "abcdef\0ghijk", 7, "abcdef" }
   1.491 +      };
   1.492 +
   1.493 +    int i;
   1.494 +
   1.495 +    printf("Test 007 (PL_strndup)     ..."); fflush(stdout);
   1.496 +
   1.497 +    for( i = 0; i < sizeof(array)/sizeof(array[0]); i++ )
   1.498 +    {
   1.499 +        char *rv = PL_strndup(array[i].str, array[i].len);
   1.500 +        const char *a;
   1.501 +        const char *b;
   1.502 +
   1.503 +        if( (char *)0 == rv )
   1.504 +        {
   1.505 +            printf("FAIL %d: %s,%lu -> 0\n", i, 
   1.506 +                   array[i].str ? array[i].str : "(null)", array[i].len);
   1.507 +            return PR_FALSE;
   1.508 +        }
   1.509 +
   1.510 +        a = array[i].result;
   1.511 +        b = (const char *)rv;
   1.512 +
   1.513 +        while( 1 )
   1.514 +        {
   1.515 +            if( *a != *b )
   1.516 +            {
   1.517 +                printf("FAIL %d: %s != %.32s\n", i, array[i].result, rv);
   1.518 +                return PR_FALSE;
   1.519 +            }
   1.520 +
   1.521 +            if( (char)0 == *a ) break;
   1.522 +
   1.523 +            a++;
   1.524 +            b++;
   1.525 +        }
   1.526 +
   1.527 +        free(rv);
   1.528 +    }
   1.529 +
   1.530 +    printf("PASS\n");
   1.531 +    return PR_TRUE;
   1.532 +}
   1.533 +
   1.534 +/* PL_strcat */
   1.535 +PRBool test_008(void)
   1.536 +{
   1.537 +    static struct
   1.538 +    {
   1.539 +        const char *first;
   1.540 +        const char *second;
   1.541 +        const char *result;
   1.542 +    } array[] =
   1.543 +      {
   1.544 +          { (const char *)0, (const char *)0, (const char *)0 },
   1.545 +          { (const char *)0, "xyz", (const char *)0 },
   1.546 +          { "", (const char *)0, "" },
   1.547 +          { "", "", "" },
   1.548 +          { "ab", "", "ab" },
   1.549 +          { "cd", "ef", "cdef" },
   1.550 +          { "gh\0X", "", "gh" },
   1.551 +          { "ij\0X", "kl", "ijkl" },
   1.552 +          { "mn\0X", "op\0X", "mnop" },
   1.553 +          { "qr", "st\0X", "qrst" },
   1.554 +          { "uv\0X", "wx\0X", "uvwx" }
   1.555 +      };
   1.556 +
   1.557 +    int i;
   1.558 +
   1.559 +    printf("Test 008 (PL_strcat)      ..."); fflush(stdout);
   1.560 +
   1.561 +    for( i = 0; i < sizeof(array)/sizeof(array[0]); i++ )
   1.562 +    {
   1.563 +        char buffer[ 1024 ];
   1.564 +        int j;
   1.565 +        char *rv;
   1.566 +
   1.567 +        for( j = 0; j < sizeof(buffer); j++ )
   1.568 +            buffer[j] = '-';
   1.569 +
   1.570 +        if( (const char *)0 != array[i].first )
   1.571 +            (void)PL_strcpy(buffer, array[i].first);
   1.572 +
   1.573 +        rv = PL_strcat(((const char *)0 == array[i].first) ? (char *)0 : buffer,
   1.574 +                       array[i].second);
   1.575 +
   1.576 +        if( (const char *)0 == array[i].result )
   1.577 +        {
   1.578 +            if( (char *)0 != rv )
   1.579 +            {
   1.580 +                printf("FAIL %d: %s+%s -> %.32s, not zero\n", i,
   1.581 +                       array[i].first ? array[i].first : "(null)",
   1.582 +                       array[i].second ? array[i].second : "(null)",
   1.583 +                       rv);
   1.584 +                return PR_FALSE;
   1.585 +            }
   1.586 +        }
   1.587 +        else
   1.588 +        {
   1.589 +            if( (char *)0 == rv )
   1.590 +            {
   1.591 +                printf("FAIL %d: %s+%s -> null, not %s\n", i,
   1.592 +                       array[i].first ? array[i].first : "(null)",
   1.593 +                       array[i].second ? array[i].second : "(null)",
   1.594 +                       array[i].result);
   1.595 +                return PR_FALSE;
   1.596 +            }
   1.597 +            else
   1.598 +            {
   1.599 +                const char *a = array[i].result;
   1.600 +                const char *b = (const char *)rv;
   1.601 +
   1.602 +                while( 1 )
   1.603 +                {
   1.604 +                    if( *a != *b )
   1.605 +                    {
   1.606 +                        printf("FAIL %d: %s+%s -> %.32s, not %s\n", i,
   1.607 +                               array[i].first ? array[i].first : "(null)",
   1.608 +                               array[i].second ? array[i].second : "(null)",
   1.609 +                               rv, array[i].result);
   1.610 +                        return PR_FALSE;
   1.611 +                    }
   1.612 +
   1.613 +                    if( (char)0 == *a ) break;
   1.614 +
   1.615 +                    a++;
   1.616 +                    b++;
   1.617 +                }
   1.618 +            }
   1.619 +        }
   1.620 +    }
   1.621 +
   1.622 +    printf("PASS\n");
   1.623 +    return PR_TRUE;
   1.624 +}
   1.625 +
   1.626 +/* PL_strncat */
   1.627 +PRBool test_009(void)
   1.628 +{
   1.629 +    static struct
   1.630 +    {
   1.631 +        const char *first;
   1.632 +        const char *second;
   1.633 +        PRUint32    length;
   1.634 +        PRBool      nulled;
   1.635 +        const char *result;
   1.636 +    } array[] = 
   1.637 +      {
   1.638 +          { (const char *)0, (const char *)0, 0, PR_FALSE, (const char *)0 },
   1.639 +          { (const char *)0, (const char *)0, 1, PR_FALSE, (const char *)0 },
   1.640 +          { (const char *)0, (const char *)0, 7, PR_FALSE, (const char *)0 },
   1.641 +          { (const char *)0, "", 0, PR_FALSE, (const char *)0 },
   1.642 +          { (const char *)0, "", 1, PR_FALSE, (const char *)0 },
   1.643 +          { (const char *)0, "", 7, PR_FALSE, (const char *)0 },
   1.644 +          { (const char *)0, "stuff", 0, PR_FALSE, (const char *)0 },
   1.645 +          { (const char *)0, "stuff", 1, PR_FALSE, (const char *)0 },
   1.646 +          { (const char *)0, "stuff", 7, PR_FALSE, (const char *)0 },
   1.647 +          { "", (const char *)0, 0, PR_TRUE, "" },
   1.648 +          { "", (const char *)0, 1, PR_TRUE, "" },
   1.649 +          { "", (const char *)0, 7, PR_TRUE, "" },
   1.650 +          { "", "", 0, PR_TRUE, "" },
   1.651 +          { "", "", 1, PR_TRUE, "" },
   1.652 +          { "", "", 7, PR_TRUE, "" },
   1.653 +          { "", "abcdefgh", 0, PR_TRUE, "" },
   1.654 +          { "", "abcdefgh", 1, PR_FALSE, "a" },
   1.655 +          { "", "abcdefgh", 7, PR_FALSE, "abcdefg" },
   1.656 +          { "xyz", (const char *)0, 0, PR_TRUE, "xyz" },
   1.657 +          { "xyz", (const char *)0, 1, PR_TRUE, "xyz" },
   1.658 +          { "xyz", (const char *)0, 7, PR_TRUE, "xyz" },
   1.659 +          { "xyz", "", 0, PR_TRUE, "xyz" },
   1.660 +          { "xyz", "", 1, PR_TRUE, "xyz" },
   1.661 +          { "xyz", "", 7, PR_TRUE, "xyz" },
   1.662 +          { "xyz", "abcdefgh", 0, PR_TRUE, "xyz" },
   1.663 +          { "xyz", "abcdefgh", 1, PR_FALSE, "xyza" },
   1.664 +          { "xyz", "abcdefgh", 7, PR_FALSE, "xyzabcdefg" }
   1.665 +      };
   1.666 +
   1.667 +    int i;
   1.668 +
   1.669 +    printf("Test 009 (PL_strncat)     ..."); fflush(stdout);
   1.670 +
   1.671 +    for( i = 0; i < sizeof(array)/sizeof(array[0]); i++ )
   1.672 +    {
   1.673 +        char buffer[ 1024 ];
   1.674 +        int j;
   1.675 +        char *rv;
   1.676 +
   1.677 +        for( j = 0; j < sizeof(buffer); j++ )
   1.678 +            buffer[j] = '-';
   1.679 +
   1.680 +        if( (const char *)0 != array[i].first )
   1.681 +            (void)PL_strcpy(buffer, array[i].first);
   1.682 +
   1.683 +        rv = PL_strncat(((const char *)0 == array[i].first) ? (char *)0 : buffer,
   1.684 +                         array[i].second, array[i].length);
   1.685 +
   1.686 +        if( (const char *)0 == array[i].result )
   1.687 +        {
   1.688 +            if( (char *)0 != rv )
   1.689 +            {
   1.690 +                printf("FAIL %d: %s+%s/%lu -> %.32s, not zero\n", i,
   1.691 +                       array[i].first ? array[i].first : "(null)",
   1.692 +                       array[i].second ? array[i].second : "(null)",
   1.693 +                       array[i].length, rv);
   1.694 +                return PR_FALSE;
   1.695 +            }
   1.696 +        }
   1.697 +        else
   1.698 +        {
   1.699 +            if( (char *)0 == rv )
   1.700 +            {
   1.701 +                printf("FAIL %d: %s+%s/%lu -> null, not %s\n", i,
   1.702 +                       array[i].first ? array[i].first : "(null)",
   1.703 +                       array[i].second ? array[i].second : "(null)",
   1.704 +                       array[i].length, array[i].result);
   1.705 +                return PR_FALSE;
   1.706 +            }
   1.707 +            else
   1.708 +            {
   1.709 +                const char *a = array[i].result;
   1.710 +                const char *b = (const char *)rv;
   1.711 +
   1.712 +                while( *a )
   1.713 +                {
   1.714 +                    if( *a != *b )
   1.715 +                    {
   1.716 +                        printf("FAIL %d: %s+%s/%lu -> %.32s, not %s\n", i,
   1.717 +                               array[i].first ? array[i].first : "(null)",
   1.718 +                               array[i].second ? array[i].second : "(null)",
   1.719 +                               array[i].length, rv, array[i].result);
   1.720 +                        return PR_FALSE;
   1.721 +                    }
   1.722 +
   1.723 +                    a++;
   1.724 +                    b++;
   1.725 +                }
   1.726 +
   1.727 +                if( array[i].nulled )
   1.728 +                {
   1.729 +                    if( (char)0 != *b )
   1.730 +                    {
   1.731 +                        printf("FAIL %d: %s+%s/%lu -> not nulled\n", i,
   1.732 +                               array[i].first ? array[i].first : "(null)",
   1.733 +                               array[i].second ? array[i].second : "(null)",
   1.734 +                               array[i].length);
   1.735 +                        return PR_FALSE;
   1.736 +                    }
   1.737 +                }
   1.738 +                else
   1.739 +                {
   1.740 +                    if( (char)0 == *b )
   1.741 +                    {
   1.742 +                        printf("FAIL %d: %s+%s/%lu -> overrun\n", i,
   1.743 +                               array[i].first ? array[i].first : "(null)",
   1.744 +                               array[i].second ? array[i].second : "(null)",
   1.745 +                               array[i].length);
   1.746 +                        return PR_FALSE;
   1.747 +                    }
   1.748 +                }
   1.749 +            }
   1.750 +        }
   1.751 +    }
   1.752 +
   1.753 +    printf("PASS\n");
   1.754 +    return PR_TRUE;
   1.755 +}
   1.756 +
   1.757 +/* PL_strcatn */
   1.758 +PRBool test_010(void)
   1.759 +{
   1.760 +    static struct
   1.761 +    {
   1.762 +        const char *first;
   1.763 +        const char *second;
   1.764 +        PRUint32    length;
   1.765 +        const char *result;
   1.766 +    } array[] = 
   1.767 +      {
   1.768 +          { (const char *)0, (const char *)0, 0, (const char *)0 },
   1.769 +          { (const char *)0, (const char *)0, 1, (const char *)0 },
   1.770 +          { (const char *)0, (const char *)0, 7, (const char *)0 },
   1.771 +          { (const char *)0, "", 0, (const char *)0 },
   1.772 +          { (const char *)0, "", 1, (const char *)0 },
   1.773 +          { (const char *)0, "", 7, (const char *)0 },
   1.774 +          { (const char *)0, "stuff", 0, (const char *)0 },
   1.775 +          { (const char *)0, "stuff", 1, (const char *)0 },
   1.776 +          { (const char *)0, "stuff", 7, (const char *)0 },
   1.777 +          { "", (const char *)0, 0, "" },
   1.778 +          { "", (const char *)0, 1, "" },
   1.779 +          { "", (const char *)0, 7, "" },
   1.780 +          { "", "", 0, "" },
   1.781 +          { "", "", 1, "" },
   1.782 +          { "", "", 7, "" },
   1.783 +          { "", "abcdefgh", 0, "" },
   1.784 +          { "", "abcdefgh", 1, "" },
   1.785 +          { "", "abcdefgh", 7, "abcdef" },
   1.786 +          { "xyz", (const char *)0, 0, "xyz" },
   1.787 +          { "xyz", (const char *)0, 1, "xyz" },
   1.788 +          { "xyz", (const char *)0, 7, "xyz" },
   1.789 +          { "xyz", "", 0, "xyz" },
   1.790 +          { "xyz", "", 1, "xyz" },
   1.791 +          { "xyz", "", 7, "xyz" },
   1.792 +          { "xyz", "abcdefgh", 0, "xyz" },
   1.793 +          { "xyz", "abcdefgh", 1, "xyz" },
   1.794 +          { "xyz", "abcdefgh", 7, "xyzabc" }
   1.795 +      };
   1.796 +
   1.797 +    int i;
   1.798 +
   1.799 +    printf("Test 010 (PL_strcatn)     ..."); fflush(stdout);
   1.800 +
   1.801 +    for( i = 0; i < sizeof(array)/sizeof(array[0]); i++ )
   1.802 +    {
   1.803 +        char buffer[ 1024 ];
   1.804 +        int j;
   1.805 +        char *rv;
   1.806 +
   1.807 +        for( j = 0; j < sizeof(buffer); j++ )
   1.808 +            buffer[j] = '-';
   1.809 +
   1.810 +        if( (const char *)0 != array[i].first )
   1.811 +            (void)PL_strcpy(buffer, array[i].first);
   1.812 +
   1.813 +        rv = PL_strcatn(((const char *)0 == array[i].first) ? (char *)0 : buffer,
   1.814 +                        array[i].length, array[i].second);
   1.815 +
   1.816 +        if( (const char *)0 == array[i].result )
   1.817 +        {
   1.818 +            if( (char *)0 != rv )
   1.819 +            {
   1.820 +                printf("FAIL %d: %s+%s/%lu -> %.32s, not zero\n", i,
   1.821 +                       array[i].first ? array[i].first : "(null)",
   1.822 +                       array[i].second ? array[i].second : "(null)",
   1.823 +                       array[i].length, rv);
   1.824 +                return PR_FALSE;
   1.825 +            }
   1.826 +        }
   1.827 +        else
   1.828 +        {
   1.829 +            if( (char *)0 == rv )
   1.830 +            {
   1.831 +                printf("FAIL %d: %s+%s/%lu -> null, not %s\n", i,
   1.832 +                       array[i].first ? array[i].first : "(null)",
   1.833 +                       array[i].second ? array[i].second : "(null)",
   1.834 +                       array[i].length, array[i].result);
   1.835 +                return PR_FALSE;
   1.836 +            }
   1.837 +            else
   1.838 +            {
   1.839 +                const char *a = array[i].result;
   1.840 +                const char *b = (const char *)rv;
   1.841 +
   1.842 +                while( 1 )
   1.843 +                {
   1.844 +                    if( *a != *b )
   1.845 +                    {
   1.846 +                        printf("FAIL %d: %s+%s/%lu -> %.32s, not %s\n", i,
   1.847 +                               array[i].first ? array[i].first : "(null)",
   1.848 +                               array[i].second ? array[i].second : "(null)",
   1.849 +                               array[i].length, rv, array[i].result);
   1.850 +                        return PR_FALSE;
   1.851 +                    }
   1.852 +
   1.853 +                    if( (char)0 == *a ) break;
   1.854 +
   1.855 +                    a++;
   1.856 +                    b++;
   1.857 +                }
   1.858 +            }
   1.859 +        }
   1.860 +    }
   1.861 +
   1.862 +    printf("PASS\n");
   1.863 +    return PR_TRUE;
   1.864 +}
   1.865 +
   1.866 +/* PL_strcmp */
   1.867 +PRBool test_011(void)
   1.868 +{
   1.869 +    static struct
   1.870 +    {
   1.871 +        const char *one;
   1.872 +        const char *two;
   1.873 +        PRIntn      sign;
   1.874 +    } array[] =
   1.875 +      {
   1.876 +          { (const char *)0, (const char *)0, 0 },
   1.877 +          { (const char *)0, "word", -1 },
   1.878 +          { "word", (const char *)0, 1 },
   1.879 +          { "word", "word", 0 },
   1.880 +          { "aZYXVUT", "bZYXVUT", -1 },
   1.881 +          { "aZYXVUT", "bAAAAAA", -1 },
   1.882 +          { "a", "aa", -1 },
   1.883 +          { "a", "a", 0 },
   1.884 +          { "a", "A", 1 },
   1.885 +          { "aaaaa", "baaaa", -1 },
   1.886 +          { "aaaaa", "abaaa", -1 },
   1.887 +          { "aaaaa", "aabaa", -1 },
   1.888 +          { "aaaaa", "aaaba", -1 },
   1.889 +          { "aaaaa", "aaaab", -1 },
   1.890 +          { "bZYXVUT", "aZYXVUT", 1 },
   1.891 +          { "bAAAAAA", "aZYXVUT", 1 },
   1.892 +          { "aa", "a", 1 },
   1.893 +          { "A", "a", -1 },
   1.894 +          { "baaaa", "aaaaa", 1 },
   1.895 +          { "abaaa", "aaaaa", 1 },
   1.896 +          { "aabaa", "aaaaa", 1 },
   1.897 +          { "aaaba", "aaaaa", 1 },
   1.898 +          { "aaaab", "aaaaa", 1 },
   1.899 +          { "word", "Word", 1 },
   1.900 +          { "word", "wOrd", 1 },
   1.901 +          { "word", "woRd", 1 },
   1.902 +          { "word", "worD", 1 },
   1.903 +          { "WORD", "wORD", -1 },
   1.904 +          { "WORD", "WoRD", -1 },
   1.905 +          { "WORD", "WOrD", -1 },
   1.906 +          { "WORD", "WORd", -1 }
   1.907 +      };
   1.908 +
   1.909 +    int i;
   1.910 +
   1.911 +    printf("Test 011 (PL_strcmp)      ..."); fflush(stdout);
   1.912 +
   1.913 +    for( i = 0; i < sizeof(array)/sizeof(array[0]); i++ )
   1.914 +    {
   1.915 +        PRIntn rv = PL_strcmp(array[i].one, array[i].two);
   1.916 +
   1.917 +        switch( array[i].sign )
   1.918 +        {
   1.919 +            case -1:
   1.920 +                if( rv < 0 ) continue;
   1.921 +                break;
   1.922 +            case 1:
   1.923 +                if( rv > 0 ) continue;
   1.924 +                break;
   1.925 +            case 0:
   1.926 +                if( 0 == rv ) continue;
   1.927 +                break;
   1.928 +            default:
   1.929 +                PR_NOT_REACHED("static data inconsistancy");
   1.930 +                break;
   1.931 +        }
   1.932 +
   1.933 +        printf("FAIL %d: %s-%s -> %d, not %d\n", i,
   1.934 +               array[i].one ? array[i].one : "(null)",
   1.935 +               array[i].two ? array[i].two : "(null)",
   1.936 +               rv, array[i].sign);
   1.937 +        return PR_FALSE;
   1.938 +    }
   1.939 +
   1.940 +    printf("PASS\n");
   1.941 +    return PR_TRUE;
   1.942 +}
   1.943 +
   1.944 +/* PL_strncmp */
   1.945 +PRBool test_012(void)
   1.946 +{
   1.947 +    static struct
   1.948 +    {
   1.949 +        const char *one;
   1.950 +        const char *two;
   1.951 +        PRUint32    max;
   1.952 +        PRIntn      sign;
   1.953 +    } array[] =
   1.954 +      {
   1.955 +          { (const char *)0, (const char *)0, 0, 0 },
   1.956 +          { (const char *)0, (const char *)0, 1, 0 },
   1.957 +          { (const char *)0, (const char *)0, 4, 0 },
   1.958 +          { (const char *)0, "word", 0, -1 },
   1.959 +          { (const char *)0, "word", 1, -1 },
   1.960 +          { (const char *)0, "word", 4, -1 },
   1.961 +          { "word", (const char *)0, 0, 1 },
   1.962 +          { "word", (const char *)0, 1, 1 },
   1.963 +          { "word", (const char *)0, 4, 1 },
   1.964 +          { "word", "word", 0, 0 },
   1.965 +          { "word", "word", 1, 0 },
   1.966 +          { "word", "word", 3, 0 },
   1.967 +          { "word", "word", 5, 0 },
   1.968 +          { "aZYXVUT", "bZYXVUT", 0, 0 },
   1.969 +          { "aZYXVUT", "bZYXVUT", 1, -1 },
   1.970 +          { "aZYXVUT", "bZYXVUT", 4, -1 },
   1.971 +          { "aZYXVUT", "bZYXVUT", 9, -1 },
   1.972 +          { "aZYXVUT", "bAAAAAA", 0, 0 },
   1.973 +          { "aZYXVUT", "bAAAAAA", 1, -1 },
   1.974 +          { "aZYXVUT", "bAAAAAA", 4, -1 },
   1.975 +          { "aZYXVUT", "bAAAAAA", 5, -1 },
   1.976 +          { "a", "aa", 0, 0 },
   1.977 +          { "a", "aa", 1, 0 },
   1.978 +          { "a", "aa", 4, -1 },
   1.979 +          { "a", "a", 0, 0 },
   1.980 +          { "a", "a", 1, 0 },
   1.981 +          { "a", "a", 4, 0 },
   1.982 +          { "a", "A", 0, 0 },
   1.983 +          { "a", "A", 1, 1 },
   1.984 +          { "a", "A", 4, 1 },
   1.985 +          { "aaaaa", "baaaa", 0, 0 },
   1.986 +          { "aaaaa", "baaaa", 1, -1 },
   1.987 +          { "aaaaa", "baaaa", 4, -1 },
   1.988 +          { "aaaaa", "abaaa", 0, 0 },
   1.989 +          { "aaaaa", "abaaa", 1, 0 },
   1.990 +          { "aaaaa", "abaaa", 4, -1 },
   1.991 +          { "aaaaa", "aabaa", 0, 0 },
   1.992 +          { "aaaaa", "aabaa", 1, 0 },
   1.993 +          { "aaaaa", "aabaa", 4, -1 },
   1.994 +          { "aaaaa", "aaaba", 0, 0 },
   1.995 +          { "aaaaa", "aaaba", 1, 0 },
   1.996 +          { "aaaaa", "aaaba", 4, -1 },
   1.997 +          { "aaaaa", "aaaab", 0, 0 },
   1.998 +          { "aaaaa", "aaaab", 1, 0 },
   1.999 +          { "aaaaa", "aaaab", 4, 0 },
  1.1000 +          { "bZYXVUT", "aZYXVUT", 0, 0 },
  1.1001 +          { "bZYXVUT", "aZYXVUT", 1, 1 },
  1.1002 +          { "bZYXVUT", "aZYXVUT", 4, 1 },
  1.1003 +          { "bAAAAAA", "aZYXVUT", 0, 0 },
  1.1004 +          { "bAAAAAA", "aZYXVUT", 1, 1 },
  1.1005 +          { "bAAAAAA", "aZYXVUT", 4, 1 },
  1.1006 +          { "aa", "a", 0, 0 },
  1.1007 +          { "aa", "a", 1, 0 },
  1.1008 +          { "aa", "a", 4, 1 },
  1.1009 +          { "A", "a", 0, 0 },
  1.1010 +          { "A", "a", 1, -1 },
  1.1011 +          { "A", "a", 4, -1 },
  1.1012 +          { "baaaa", "aaaaa", 0, 0 },
  1.1013 +          { "baaaa", "aaaaa", 1, 1 },
  1.1014 +          { "baaaa", "aaaaa", 4, 1 },
  1.1015 +          { "abaaa", "aaaaa", 0, 0 },
  1.1016 +          { "abaaa", "aaaaa", 1, 0 },
  1.1017 +          { "abaaa", "aaaaa", 4, 1 },
  1.1018 +          { "aabaa", "aaaaa", 0, 0 },
  1.1019 +          { "aabaa", "aaaaa", 1, 0 },
  1.1020 +          { "aabaa", "aaaaa", 4, 1 },
  1.1021 +          { "aaaba", "aaaaa", 0, 0 },
  1.1022 +          { "aaaba", "aaaaa", 1, 0 },
  1.1023 +          { "aaaba", "aaaaa", 4, 1 },
  1.1024 +          { "aaaab", "aaaaa", 0, 0 },
  1.1025 +          { "aaaab", "aaaaa", 1, 0 },
  1.1026 +          { "aaaab", "aaaaa", 4, 0 },
  1.1027 +          { "word", "Word", 0, 0 },
  1.1028 +          { "word", "Word", 1, 1 },
  1.1029 +          { "word", "Word", 3, 1 },
  1.1030 +          { "word", "wOrd", 0, 0 },
  1.1031 +          { "word", "wOrd", 1, 0 },
  1.1032 +          { "word", "wOrd", 3, 1 },
  1.1033 +          { "word", "woRd", 0, 0 },
  1.1034 +          { "word", "woRd", 1, 0 },
  1.1035 +          { "word", "woRd", 3, 1 },
  1.1036 +          { "word", "worD", 0, 0 },
  1.1037 +          { "word", "worD", 1, 0 },
  1.1038 +          { "word", "worD", 3, 0 },
  1.1039 +          { "WORD", "wORD", 0, 0 },
  1.1040 +          { "WORD", "wORD", 1, -1 },
  1.1041 +          { "WORD", "wORD", 3, -1 },
  1.1042 +          { "WORD", "WoRD", 0, 0 },
  1.1043 +          { "WORD", "WoRD", 1, 0 },
  1.1044 +          { "WORD", "WoRD", 3, -1 },
  1.1045 +          { "WORD", "WOrD", 0, 0 },
  1.1046 +          { "WORD", "WOrD", 1, 0 },
  1.1047 +          { "WORD", "WOrD", 3, -1 },
  1.1048 +          { "WORD", "WORd", 0, 0 },
  1.1049 +          { "WORD", "WORd", 1, 0 },
  1.1050 +          { "WORD", "WORd", 3, 0 }
  1.1051 +
  1.1052 +      };
  1.1053 +
  1.1054 +    int i;
  1.1055 +
  1.1056 +    printf("Test 012 (PL_strncmp)     ..."); fflush(stdout);
  1.1057 +
  1.1058 +    for( i = 0; i < sizeof(array)/sizeof(array[0]); i++ )
  1.1059 +    {
  1.1060 +        PRIntn rv = PL_strncmp(array[i].one, array[i].two, array[i].max);
  1.1061 +
  1.1062 +        switch( array[i].sign )
  1.1063 +        {
  1.1064 +            case -1:
  1.1065 +                if( rv < 0 ) continue;
  1.1066 +                break;
  1.1067 +            case 1:
  1.1068 +                if( rv > 0 ) continue;
  1.1069 +                break;
  1.1070 +            case 0:
  1.1071 +                if( 0 == rv ) continue;
  1.1072 +                break;
  1.1073 +            default:
  1.1074 +                PR_NOT_REACHED("static data inconsistancy");
  1.1075 +                break;
  1.1076 +        }
  1.1077 +
  1.1078 +        printf("FAIL %d: %s-%s/%ld -> %d, not %d\n", i,
  1.1079 +               array[i].one ? array[i].one : "(null)",
  1.1080 +               array[i].two ? array[i].two : "(null)",
  1.1081 +               array[i].max, rv, array[i].sign);
  1.1082 +        return PR_FALSE;
  1.1083 +    }
  1.1084 +
  1.1085 +    printf("PASS\n");
  1.1086 +    return PR_TRUE;
  1.1087 +}
  1.1088 +
  1.1089 +/* PL_strcasecmp */
  1.1090 +PRBool test_013(void)
  1.1091 +{
  1.1092 +    static struct
  1.1093 +    {
  1.1094 +        const char *one;
  1.1095 +        const char *two;
  1.1096 +        PRIntn      sign;
  1.1097 +    } array[] =
  1.1098 +      {
  1.1099 +          { (const char *)0, (const char *)0, 0 },
  1.1100 +          { (const char *)0, "word", -1 },
  1.1101 +          { "word", (const char *)0, 1 },
  1.1102 +          { "word", "word", 0 },
  1.1103 +          { "aZYXVUT", "bZYXVUT", -1 },
  1.1104 +          { "aZYXVUT", "bAAAAAA", -1 },
  1.1105 +          { "a", "aa", -1 },
  1.1106 +          { "a", "a", 0 },
  1.1107 +          { "a", "A", 0 },
  1.1108 +          { "aaaaa", "baaaa", -1 },
  1.1109 +          { "aaaaa", "abaaa", -1 },
  1.1110 +          { "aaaaa", "aabaa", -1 },
  1.1111 +          { "aaaaa", "aaaba", -1 },
  1.1112 +          { "aaaaa", "aaaab", -1 },
  1.1113 +          { "bZYXVUT", "aZYXVUT", 1 },
  1.1114 +          { "bAAAAAA", "aZYXVUT", 1 },
  1.1115 +          { "aa", "a", 1 },
  1.1116 +          { "A", "a", 0 },
  1.1117 +          { "baaaa", "aaaaa", 1 },
  1.1118 +          { "abaaa", "aaaaa", 1 },
  1.1119 +          { "aabaa", "aaaaa", 1 },
  1.1120 +          { "aaaba", "aaaaa", 1 },
  1.1121 +          { "aaaab", "aaaaa", 1 },
  1.1122 +          { "word", "Word", 0 },
  1.1123 +          { "word", "wOrd", 0 },
  1.1124 +          { "word", "woRd", 0 },
  1.1125 +          { "word", "worD", 0 },
  1.1126 +          { "WORD", "wORD", 0 },
  1.1127 +          { "WORD", "WoRD", 0 },
  1.1128 +          { "WORD", "WOrD", 0 },
  1.1129 +          { "WORD", "WORd", 0 }
  1.1130 +      };
  1.1131 +
  1.1132 +    int i;
  1.1133 +
  1.1134 +    printf("Test 013 (PL_strcasecmp)  ..."); fflush(stdout);
  1.1135 +
  1.1136 +    for( i = 0; i < sizeof(array)/sizeof(array[0]); i++ )
  1.1137 +    {
  1.1138 +        PRIntn rv = PL_strcasecmp(array[i].one, array[i].two);
  1.1139 +
  1.1140 +        switch( array[i].sign )
  1.1141 +        {
  1.1142 +            case -1:
  1.1143 +                if( rv < 0 ) continue;
  1.1144 +                break;
  1.1145 +            case 1:
  1.1146 +                if( rv > 0 ) continue;
  1.1147 +                break;
  1.1148 +            case 0:
  1.1149 +                if( 0 == rv ) continue;
  1.1150 +                break;
  1.1151 +            default:
  1.1152 +                PR_NOT_REACHED("static data inconsistancy");
  1.1153 +                break;
  1.1154 +        }
  1.1155 +
  1.1156 +        printf("FAIL %d: %s-%s -> %d, not %d\n", i,
  1.1157 +               array[i].one ? array[i].one : "(null)",
  1.1158 +               array[i].two ? array[i].two : "(null)",
  1.1159 +               rv, array[i].sign);
  1.1160 +        return PR_FALSE;
  1.1161 +    }
  1.1162 +
  1.1163 +    printf("PASS\n");
  1.1164 +    return PR_TRUE;
  1.1165 +}
  1.1166 +
  1.1167 +/* PL_strncasecmp */
  1.1168 +PRBool test_014(void)
  1.1169 +{
  1.1170 +    static struct
  1.1171 +    {
  1.1172 +        const char *one;
  1.1173 +        const char *two;
  1.1174 +        PRUint32    max;
  1.1175 +        PRIntn      sign;
  1.1176 +    } array[] =
  1.1177 +      {
  1.1178 +          { (const char *)0, (const char *)0, 0, 0 },
  1.1179 +          { (const char *)0, (const char *)0, 1, 0 },
  1.1180 +          { (const char *)0, (const char *)0, 4, 0 },
  1.1181 +          { (const char *)0, "word", 0, -1 },
  1.1182 +          { (const char *)0, "word", 1, -1 },
  1.1183 +          { (const char *)0, "word", 4, -1 },
  1.1184 +          { "word", (const char *)0, 0, 1 },
  1.1185 +          { "word", (const char *)0, 1, 1 },
  1.1186 +          { "word", (const char *)0, 4, 1 },
  1.1187 +          { "word", "word", 0, 0 },
  1.1188 +          { "word", "word", 1, 0 },
  1.1189 +          { "word", "word", 3, 0 },
  1.1190 +          { "word", "word", 5, 0 },
  1.1191 +          { "aZYXVUT", "bZYXVUT", 0, 0 },
  1.1192 +          { "aZYXVUT", "bZYXVUT", 1, -1 },
  1.1193 +          { "aZYXVUT", "bZYXVUT", 4, -1 },
  1.1194 +          { "aZYXVUT", "bZYXVUT", 9, -1 },
  1.1195 +          { "aZYXVUT", "bAAAAAA", 0, 0 },
  1.1196 +          { "aZYXVUT", "bAAAAAA", 1, -1 },
  1.1197 +          { "aZYXVUT", "bAAAAAA", 4, -1 },
  1.1198 +          { "aZYXVUT", "bAAAAAA", 5, -1 },
  1.1199 +          { "a", "aa", 0, 0 },
  1.1200 +          { "a", "aa", 1, 0 },
  1.1201 +          { "a", "aa", 4, -1 },
  1.1202 +          { "a", "a", 0, 0 },
  1.1203 +          { "a", "a", 1, 0 },
  1.1204 +          { "a", "a", 4, 0 },
  1.1205 +          { "a", "A", 0, 0 },
  1.1206 +          { "a", "A", 1, 0 },
  1.1207 +          { "a", "A", 4, 0 },
  1.1208 +          { "aaaaa", "baaaa", 0, 0 },
  1.1209 +          { "aaaaa", "baaaa", 1, -1 },
  1.1210 +          { "aaaaa", "baaaa", 4, -1 },
  1.1211 +          { "aaaaa", "abaaa", 0, 0 },
  1.1212 +          { "aaaaa", "abaaa", 1, 0 },
  1.1213 +          { "aaaaa", "abaaa", 4, -1 },
  1.1214 +          { "aaaaa", "aabaa", 0, 0 },
  1.1215 +          { "aaaaa", "aabaa", 1, 0 },
  1.1216 +          { "aaaaa", "aabaa", 4, -1 },
  1.1217 +          { "aaaaa", "aaaba", 0, 0 },
  1.1218 +          { "aaaaa", "aaaba", 1, 0 },
  1.1219 +          { "aaaaa", "aaaba", 4, -1 },
  1.1220 +          { "aaaaa", "aaaab", 0, 0 },
  1.1221 +          { "aaaaa", "aaaab", 1, 0 },
  1.1222 +          { "aaaaa", "aaaab", 4, 0 },
  1.1223 +          { "bZYXVUT", "aZYXVUT", 0, 0 },
  1.1224 +          { "bZYXVUT", "aZYXVUT", 1, 1 },
  1.1225 +          { "bZYXVUT", "aZYXVUT", 4, 1 },
  1.1226 +          { "bAAAAAA", "aZYXVUT", 0, 0 },
  1.1227 +          { "bAAAAAA", "aZYXVUT", 1, 1 },
  1.1228 +          { "bAAAAAA", "aZYXVUT", 4, 1 },
  1.1229 +          { "aa", "a", 0, 0 },
  1.1230 +          { "aa", "a", 1, 0 },
  1.1231 +          { "aa", "a", 4, 1 },
  1.1232 +          { "A", "a", 0, 0 },
  1.1233 +          { "A", "a", 1, 0 },
  1.1234 +          { "A", "a", 4, 0 },
  1.1235 +          { "baaaa", "aaaaa", 0, 0 },
  1.1236 +          { "baaaa", "aaaaa", 1, 1 },
  1.1237 +          { "baaaa", "aaaaa", 4, 1 },
  1.1238 +          { "abaaa", "aaaaa", 0, 0 },
  1.1239 +          { "abaaa", "aaaaa", 1, 0 },
  1.1240 +          { "abaaa", "aaaaa", 4, 1 },
  1.1241 +          { "aabaa", "aaaaa", 0, 0 },
  1.1242 +          { "aabaa", "aaaaa", 1, 0 },
  1.1243 +          { "aabaa", "aaaaa", 4, 1 },
  1.1244 +          { "aaaba", "aaaaa", 0, 0 },
  1.1245 +          { "aaaba", "aaaaa", 1, 0 },
  1.1246 +          { "aaaba", "aaaaa", 4, 1 },
  1.1247 +          { "aaaab", "aaaaa", 0, 0 },
  1.1248 +          { "aaaab", "aaaaa", 1, 0 },
  1.1249 +          { "aaaab", "aaaaa", 4, 0 },
  1.1250 +          { "word", "Word", 0, 0 },
  1.1251 +          { "word", "Word", 1, 0 },
  1.1252 +          { "word", "Word", 3, 0 },
  1.1253 +          { "word", "wOrd", 0, 0 },
  1.1254 +          { "word", "wOrd", 1, 0 },
  1.1255 +          { "word", "wOrd", 3, 0 },
  1.1256 +          { "word", "woRd", 0, 0 },
  1.1257 +          { "word", "woRd", 1, 0 },
  1.1258 +          { "word", "woRd", 3, 0 },
  1.1259 +          { "word", "worD", 0, 0 },
  1.1260 +          { "word", "worD", 1, 0 },
  1.1261 +          { "word", "worD", 3, 0 },
  1.1262 +          { "WORD", "wORD", 0, 0 },
  1.1263 +          { "WORD", "wORD", 1, 0 },
  1.1264 +          { "WORD", "wORD", 3, 0 },
  1.1265 +          { "WORD", "WoRD", 0, 0 },
  1.1266 +          { "WORD", "WoRD", 1, 0 },
  1.1267 +          { "WORD", "WoRD", 3, 0 },
  1.1268 +          { "WORD", "WOrD", 0, 0 },
  1.1269 +          { "WORD", "WOrD", 1, 0 },
  1.1270 +          { "WORD", "WOrD", 3, 0 },
  1.1271 +          { "WORD", "WORd", 0, 0 },
  1.1272 +          { "WORD", "WORd", 1, 0 },
  1.1273 +          { "WORD", "WORd", 3, 0 }
  1.1274 +      };
  1.1275 +
  1.1276 +    int i;
  1.1277 +
  1.1278 +    printf("Test 014 (PL_strncasecmp) ..."); fflush(stdout);
  1.1279 +
  1.1280 +    for( i = 0; i < sizeof(array)/sizeof(array[0]); i++ )
  1.1281 +    {
  1.1282 +        PRIntn rv = PL_strncasecmp(array[i].one, array[i].two, array[i].max);
  1.1283 +
  1.1284 +        switch( array[i].sign )
  1.1285 +        {
  1.1286 +            case -1:
  1.1287 +                if( rv < 0 ) continue;
  1.1288 +                break;
  1.1289 +            case 1:
  1.1290 +                if( rv > 0 ) continue;
  1.1291 +                break;
  1.1292 +            case 0:
  1.1293 +                if( 0 == rv ) continue;
  1.1294 +                break;
  1.1295 +            default:
  1.1296 +                PR_NOT_REACHED("static data inconsistancy");
  1.1297 +                break;
  1.1298 +        }
  1.1299 +
  1.1300 +        printf("FAIL %d: %s-%s/%ld -> %d, not %d\n", i,
  1.1301 +               array[i].one ? array[i].one : "(null)",
  1.1302 +               array[i].two ? array[i].two : "(null)",
  1.1303 +               array[i].max, rv, array[i].sign);
  1.1304 +        return PR_FALSE;
  1.1305 +    }
  1.1306 +
  1.1307 +    printf("PASS\n");
  1.1308 +    return PR_TRUE;
  1.1309 +}
  1.1310 +
  1.1311 +/* PL_strchr */
  1.1312 +PRBool test_015(void)
  1.1313 +{
  1.1314 +    static struct
  1.1315 +    {
  1.1316 +        const char *str;
  1.1317 +        char        chr;
  1.1318 +        PRBool      ret;
  1.1319 +        PRUint32    off;
  1.1320 +    } array[] =
  1.1321 +      {
  1.1322 +          { (const char *)0, 'a', PR_FALSE, 0 },
  1.1323 +          { (const char *)0, '\0', PR_FALSE, 0 },
  1.1324 +          { "abcdefg", 'a', PR_TRUE, 0 },
  1.1325 +          { "abcdefg", 'b', PR_TRUE, 1 },
  1.1326 +          { "abcdefg", 'c', PR_TRUE, 2 },
  1.1327 +          { "abcdefg", 'd', PR_TRUE, 3 },
  1.1328 +          { "abcdefg", 'e', PR_TRUE, 4 },
  1.1329 +          { "abcdefg", 'f', PR_TRUE, 5 },
  1.1330 +          { "abcdefg", 'g', PR_TRUE, 6 },
  1.1331 +          { "abcdefg", 'h', PR_FALSE, 0 },
  1.1332 +          { "abcdefg", '\0', PR_TRUE, 7 },
  1.1333 +          { "abcdefg", 'A', PR_FALSE, 0 },
  1.1334 +          { "abcdefg", 'B', PR_FALSE, 0 },
  1.1335 +          { "abcdefg", 'C', PR_FALSE, 0 },
  1.1336 +          { "abcdefg", 'D', PR_FALSE, 0 },
  1.1337 +          { "abcdefg", 'E', PR_FALSE, 0 },
  1.1338 +          { "abcdefg", 'F', PR_FALSE, 0 },
  1.1339 +          { "abcdefg", 'G', PR_FALSE, 0 },
  1.1340 +          { "abcdefg", 'H', PR_FALSE, 0 },
  1.1341 +          { "abcdefgabcdefg", 'a', PR_TRUE, 0 },
  1.1342 +          { "abcdefgabcdefg", 'b', PR_TRUE, 1 },
  1.1343 +          { "abcdefgabcdefg", 'c', PR_TRUE, 2 },
  1.1344 +          { "abcdefgabcdefg", 'd', PR_TRUE, 3 },
  1.1345 +          { "abcdefgabcdefg", 'e', PR_TRUE, 4 },
  1.1346 +          { "abcdefgabcdefg", 'f', PR_TRUE, 5 },
  1.1347 +          { "abcdefgabcdefg", 'g', PR_TRUE, 6 },
  1.1348 +          { "abcdefgabcdefg", 'h', PR_FALSE, 0 },
  1.1349 +          { "abcdefgabcdefg", '\0', PR_TRUE, 14 }
  1.1350 +      };
  1.1351 +
  1.1352 +    int i;
  1.1353 +
  1.1354 +    printf("Test 015 (PL_strchr)      ..."); fflush(stdout);
  1.1355 +
  1.1356 +    for( i = 0; i < sizeof(array)/sizeof(array[0]); i++ )
  1.1357 +    {
  1.1358 +        char *rv = PL_strchr(array[i].str, array[i].chr);
  1.1359 +
  1.1360 +        if( PR_FALSE == array[i].ret )
  1.1361 +        {
  1.1362 +            if( (char *)0 != rv )
  1.1363 +            {
  1.1364 +                printf("FAIL %d: %s,%c -> %.32s, not zero\n", i, array[i].str,
  1.1365 +                       array[i].chr, rv);
  1.1366 +                return PR_FALSE;
  1.1367 +            }
  1.1368 +        }
  1.1369 +        else
  1.1370 +        {
  1.1371 +            if( (char *)0 == rv )
  1.1372 +            {
  1.1373 +                printf("FAIL %d: %s,%c -> null, not +%lu\n", i, array[i].str,
  1.1374 +                       array[i].chr, array[i].off);
  1.1375 +                return PR_FALSE;
  1.1376 +            }
  1.1377 +
  1.1378 +            if( &array[i].str[ array[i].off ] != rv )
  1.1379 +            {
  1.1380 +                printf("FAIL %d: %s,%c -> 0x%x, not 0x%x+%lu\n", i, array[i].str,
  1.1381 +                       array[i].chr, rv, array[i].str, array[i].off);
  1.1382 +                return PR_FALSE;
  1.1383 +            }
  1.1384 +        }
  1.1385 +    }
  1.1386 +
  1.1387 +    printf("PASS\n");
  1.1388 +    return PR_TRUE;
  1.1389 +}
  1.1390 +
  1.1391 +/* PL_strrchr */
  1.1392 +PRBool test_016(void)
  1.1393 +{
  1.1394 +    static struct
  1.1395 +    {
  1.1396 +        const char *str;
  1.1397 +        char        chr;
  1.1398 +        PRBool      ret;
  1.1399 +        PRUint32    off;
  1.1400 +    } array[] =
  1.1401 +      {
  1.1402 +          { (const char *)0, 'a', PR_FALSE, 0 },
  1.1403 +          { (const char *)0, '\0', PR_FALSE, 0 },
  1.1404 +          { "abcdefg", 'a', PR_TRUE, 0 },
  1.1405 +          { "abcdefg", 'b', PR_TRUE, 1 },
  1.1406 +          { "abcdefg", 'c', PR_TRUE, 2 },
  1.1407 +          { "abcdefg", 'd', PR_TRUE, 3 },
  1.1408 +          { "abcdefg", 'e', PR_TRUE, 4 },
  1.1409 +          { "abcdefg", 'f', PR_TRUE, 5 },
  1.1410 +          { "abcdefg", 'g', PR_TRUE, 6 },
  1.1411 +          { "abcdefg", 'h', PR_FALSE, 0 },
  1.1412 +          { "abcdefg", '\0', PR_TRUE, 7 },
  1.1413 +          { "abcdefg", 'A', PR_FALSE, 0 },
  1.1414 +          { "abcdefg", 'B', PR_FALSE, 0 },
  1.1415 +          { "abcdefg", 'C', PR_FALSE, 0 },
  1.1416 +          { "abcdefg", 'D', PR_FALSE, 0 },
  1.1417 +          { "abcdefg", 'E', PR_FALSE, 0 },
  1.1418 +          { "abcdefg", 'F', PR_FALSE, 0 },
  1.1419 +          { "abcdefg", 'G', PR_FALSE, 0 },
  1.1420 +          { "abcdefg", 'H', PR_FALSE, 0 },
  1.1421 +          { "abcdefgabcdefg", 'a', PR_TRUE, 7 },
  1.1422 +          { "abcdefgabcdefg", 'b', PR_TRUE, 8 },
  1.1423 +          { "abcdefgabcdefg", 'c', PR_TRUE, 9 },
  1.1424 +          { "abcdefgabcdefg", 'd', PR_TRUE, 10 },
  1.1425 +          { "abcdefgabcdefg", 'e', PR_TRUE, 11 },
  1.1426 +          { "abcdefgabcdefg", 'f', PR_TRUE, 12 },
  1.1427 +          { "abcdefgabcdefg", 'g', PR_TRUE, 13 },
  1.1428 +          { "abcdefgabcdefg", 'h', PR_FALSE, 0 },
  1.1429 +          { "abcdefgabcdefg", '\0', PR_TRUE, 14 }
  1.1430 +      };
  1.1431 +
  1.1432 +    int i;
  1.1433 +
  1.1434 +    printf("Test 016 (PL_strrchr)     ..."); fflush(stdout);
  1.1435 +
  1.1436 +    for( i = 0; i < sizeof(array)/sizeof(array[0]); i++ )
  1.1437 +    {
  1.1438 +        char *rv = PL_strrchr(array[i].str, array[i].chr);
  1.1439 +
  1.1440 +        if( PR_FALSE == array[i].ret )
  1.1441 +        {
  1.1442 +            if( (char *)0 != rv )
  1.1443 +            {
  1.1444 +                printf("FAIL %d: %s,%c -> %.32s, not zero\n", i, array[i].str,
  1.1445 +                       array[i].chr, rv);
  1.1446 +                return PR_FALSE;
  1.1447 +            }
  1.1448 +        }
  1.1449 +        else
  1.1450 +        {
  1.1451 +            if( (char *)0 == rv )
  1.1452 +            {
  1.1453 +                printf("FAIL %d: %s,%c -> null, not +%lu\n", i, array[i].str,
  1.1454 +                       array[i].chr, array[i].off);
  1.1455 +                return PR_FALSE;
  1.1456 +            }
  1.1457 +
  1.1458 +            if( &array[i].str[ array[i].off ] != rv )
  1.1459 +            {
  1.1460 +                printf("FAIL %d: %s,%c -> 0x%x, not 0x%x+%lu\n", i, array[i].str,
  1.1461 +                       array[i].chr, rv, array[i].str, array[i].off);
  1.1462 +                return PR_FALSE;
  1.1463 +            }
  1.1464 +        }
  1.1465 +    }
  1.1466 +
  1.1467 +    printf("PASS\n");
  1.1468 +    return PR_TRUE;
  1.1469 +}
  1.1470 +
  1.1471 +/* PL_strnchr */
  1.1472 +PRBool test_017(void)
  1.1473 +{
  1.1474 +    static struct
  1.1475 +    {
  1.1476 +        const char *str;
  1.1477 +        char        chr;
  1.1478 +        PRUint32    max;
  1.1479 +        PRBool      ret;
  1.1480 +        PRUint32    off;
  1.1481 +    } array[] =
  1.1482 +      {
  1.1483 +          { (const char *)0, 'a', 2, PR_FALSE, 0 },
  1.1484 +          { (const char *)0, '\0', 2, PR_FALSE, 0 },
  1.1485 +          { "abcdefg", 'a', 5, PR_TRUE, 0 },
  1.1486 +          { "abcdefg", 'b', 5, PR_TRUE, 1 },
  1.1487 +          { "abcdefg", 'c', 5, PR_TRUE, 2 },
  1.1488 +          { "abcdefg", 'd', 5, PR_TRUE, 3 },
  1.1489 +          { "abcdefg", 'e', 5, PR_TRUE, 4 },
  1.1490 +          { "abcdefg", 'f', 5, PR_FALSE, 0 },
  1.1491 +          { "abcdefg", 'g', 5, PR_FALSE, 0 },
  1.1492 +          { "abcdefg", 'h', 5, PR_FALSE, 0 },
  1.1493 +          { "abcdefg", '\0', 5, PR_FALSE, 0 },
  1.1494 +          { "abcdefg", '\0', 15, PR_TRUE, 7 },
  1.1495 +          { "abcdefg", 'A', 5, PR_FALSE, 0 },
  1.1496 +          { "abcdefg", 'B', 5, PR_FALSE, 0 },
  1.1497 +          { "abcdefg", 'C', 5, PR_FALSE, 0 },
  1.1498 +          { "abcdefg", 'D', 5, PR_FALSE, 0 },
  1.1499 +          { "abcdefg", 'E', 5, PR_FALSE, 0 },
  1.1500 +          { "abcdefg", 'F', 5, PR_FALSE, 0 },
  1.1501 +          { "abcdefg", 'G', 5, PR_FALSE, 0 },
  1.1502 +          { "abcdefg", 'H', 5, PR_FALSE, 0 },
  1.1503 +          { "abcdefgabcdefg", 'a', 10, PR_TRUE, 0 },
  1.1504 +          { "abcdefgabcdefg", 'b', 10, PR_TRUE, 1 },
  1.1505 +          { "abcdefgabcdefg", 'c', 10, PR_TRUE, 2 },
  1.1506 +          { "abcdefgabcdefg", 'd', 10, PR_TRUE, 3 },
  1.1507 +          { "abcdefgabcdefg", 'e', 10, PR_TRUE, 4 },
  1.1508 +          { "abcdefgabcdefg", 'f', 10, PR_TRUE, 5 },
  1.1509 +          { "abcdefgabcdefg", 'g', 10, PR_TRUE, 6 },
  1.1510 +          { "abcdefgabcdefg", 'h', 10, PR_FALSE, 0 },
  1.1511 +          { "abcdefgabcdefg", '\0', 10, PR_FALSE, 0 },
  1.1512 +          { "abcdefgabcdefg", '\0', 14, PR_FALSE, 0 },
  1.1513 +          { "abcdefgabcdefg", '\0', 15, PR_TRUE, 14 }
  1.1514 +      };
  1.1515 +
  1.1516 +    int i;
  1.1517 +
  1.1518 +    printf("Test 017 (PL_strnchr)     ..."); fflush(stdout);
  1.1519 +
  1.1520 +    for( i = 0; i < sizeof(array)/sizeof(array[0]); i++ )
  1.1521 +    {
  1.1522 +        char *rv = PL_strnchr(array[i].str, array[i].chr, array[i].max);
  1.1523 +
  1.1524 +        if( PR_FALSE == array[i].ret )
  1.1525 +        {
  1.1526 +            if( (char *)0 != rv )
  1.1527 +            {
  1.1528 +                printf("FAIL %d: %s,%c/%lu -> %.32s, not zero\n", i, array[i].str,
  1.1529 +                       array[i].chr, array[i].max, rv);
  1.1530 +                return PR_FALSE;
  1.1531 +            }
  1.1532 +        }
  1.1533 +        else
  1.1534 +        {
  1.1535 +            if( (char *)0 == rv )
  1.1536 +            {
  1.1537 +                printf("FAIL %d: %s,%c/%lu -> null, not +%lu\n", i, array[i].str,
  1.1538 +                       array[i].chr, array[i].max, array[i].off);
  1.1539 +                return PR_FALSE;
  1.1540 +            }
  1.1541 +
  1.1542 +            if( &array[i].str[ array[i].off ] != rv )
  1.1543 +            {
  1.1544 +                printf("FAIL %d: %s,%c/%lu -> 0x%x, not 0x%x+%lu\n", i, array[i].str,
  1.1545 +                       array[i].chr, array[i].max, rv, array[i].str, array[i].off);
  1.1546 +                return PR_FALSE;
  1.1547 +            }
  1.1548 +        }
  1.1549 +    }
  1.1550 +
  1.1551 +    printf("PASS\n");
  1.1552 +    return PR_TRUE;
  1.1553 +}
  1.1554 +
  1.1555 +/* PL_strnrchr */
  1.1556 +PRBool test_018(void)
  1.1557 +{
  1.1558 +    static struct
  1.1559 +    {
  1.1560 +        const char *str;
  1.1561 +        char        chr;
  1.1562 +        PRUint32    max;
  1.1563 +        PRBool      ret;
  1.1564 +        PRUint32    off;
  1.1565 +    } array[] =
  1.1566 +      {
  1.1567 +          { (const char *)0, 'a', 2, PR_FALSE, 0 },
  1.1568 +          { (const char *)0, '\0', 2, PR_FALSE, 0 },
  1.1569 +          { "abcdefg", 'a', 5, PR_TRUE, 0 },
  1.1570 +          { "abcdefg", 'b', 5, PR_TRUE, 1 },
  1.1571 +          { "abcdefg", 'c', 5, PR_TRUE, 2 },
  1.1572 +          { "abcdefg", 'd', 5, PR_TRUE, 3 },
  1.1573 +          { "abcdefg", 'e', 5, PR_TRUE, 4 },
  1.1574 +          { "abcdefg", 'f', 5, PR_FALSE, 0 },
  1.1575 +          { "abcdefg", 'g', 5, PR_FALSE, 0 },
  1.1576 +          { "abcdefg", 'h', 5, PR_FALSE, 0 },
  1.1577 +          { "abcdefg", '\0', 5, PR_FALSE, 0 },
  1.1578 +          { "abcdefg", '\0', 15, PR_TRUE, 7 },
  1.1579 +          { "abcdefg", 'A', 5, PR_FALSE, 0 },
  1.1580 +          { "abcdefg", 'B', 5, PR_FALSE, 0 },
  1.1581 +          { "abcdefg", 'C', 5, PR_FALSE, 0 },
  1.1582 +          { "abcdefg", 'D', 5, PR_FALSE, 0 },
  1.1583 +          { "abcdefg", 'E', 5, PR_FALSE, 0 },
  1.1584 +          { "abcdefg", 'F', 5, PR_FALSE, 0 },
  1.1585 +          { "abcdefg", 'G', 5, PR_FALSE, 0 },
  1.1586 +          { "abcdefg", 'H', 5, PR_FALSE, 0 },
  1.1587 +          { "abcdefgabcdefg", 'a', 10, PR_TRUE, 7 },
  1.1588 +          { "abcdefgabcdefg", 'b', 10, PR_TRUE, 8 },
  1.1589 +          { "abcdefgabcdefg", 'c', 10, PR_TRUE, 9 },
  1.1590 +          { "abcdefgabcdefg", 'd', 10, PR_TRUE, 3 },
  1.1591 +          { "abcdefgabcdefg", 'e', 10, PR_TRUE, 4 },
  1.1592 +          { "abcdefgabcdefg", 'f', 10, PR_TRUE, 5 },
  1.1593 +          { "abcdefgabcdefg", 'g', 10, PR_TRUE, 6 },
  1.1594 +          { "abcdefgabcdefg", 'h', 10, PR_FALSE, 0 },
  1.1595 +          { "abcdefgabcdefg", '\0', 10, PR_FALSE, 0 },
  1.1596 +          { "abcdefgabcdefg", '\0', 14, PR_FALSE, 0 },
  1.1597 +          { "abcdefgabcdefg", '\0', 15, PR_TRUE, 14 }
  1.1598 +      };
  1.1599 +
  1.1600 +    int i;
  1.1601 +
  1.1602 +    printf("Test 018 (PL_strnrchr)    ..."); fflush(stdout);
  1.1603 +
  1.1604 +    for( i = 0; i < sizeof(array)/sizeof(array[0]); i++ )
  1.1605 +    {
  1.1606 +        char *rv = PL_strnrchr(array[i].str, array[i].chr, array[i].max);
  1.1607 +
  1.1608 +        if( PR_FALSE == array[i].ret )
  1.1609 +        {
  1.1610 +            if( (char *)0 != rv )
  1.1611 +            {
  1.1612 +                printf("FAIL %d: %s,%c/%lu -> %.32s, not zero\n", i, array[i].str,
  1.1613 +                       array[i].chr, array[i].max, rv);
  1.1614 +                return PR_FALSE;
  1.1615 +            }
  1.1616 +        }
  1.1617 +        else
  1.1618 +        {
  1.1619 +            if( (char *)0 == rv )
  1.1620 +            {
  1.1621 +                printf("FAIL %d: %s,%c/%lu -> null, not +%lu\n", i, array[i].str,
  1.1622 +                       array[i].chr, array[i].max, array[i].off);
  1.1623 +                return PR_FALSE;
  1.1624 +            }
  1.1625 +
  1.1626 +            if( &array[i].str[ array[i].off ] != rv )
  1.1627 +            {
  1.1628 +                printf("FAIL %d: %s,%c/%lu -> 0x%x, not 0x%x+%lu\n", i, array[i].str,
  1.1629 +                       array[i].chr, array[i].max, rv, array[i].str, array[i].off);
  1.1630 +                return PR_FALSE;
  1.1631 +            }
  1.1632 +        }
  1.1633 +    }
  1.1634 +
  1.1635 +    printf("PASS\n");
  1.1636 +    return PR_TRUE;
  1.1637 +}
  1.1638 +
  1.1639 +/* PL_strpbrk */
  1.1640 +PRBool test_019(void)
  1.1641 +{
  1.1642 +    static struct
  1.1643 +    {
  1.1644 +        const char *str;
  1.1645 +        const char *chrs;
  1.1646 +        PRBool      ret;
  1.1647 +        PRUint32    off;
  1.1648 +    } array[] =
  1.1649 +      {
  1.1650 +          { (const char *)0, (const char *)0, PR_FALSE, 0 },
  1.1651 +          { (const char *)0, "abc", PR_FALSE, 0 },
  1.1652 +          { "abc", (const char *)0, PR_FALSE, 0 },
  1.1653 +          { "abcdefg", "", PR_FALSE, 0 },
  1.1654 +          { "", "aeiou", PR_FALSE, 0 },
  1.1655 +          { "abcdefg", "ae", PR_TRUE, 0 },
  1.1656 +          { "abcdefg", "ei", PR_TRUE, 4 },
  1.1657 +          { "abcdefg", "io", PR_FALSE, 0 },
  1.1658 +          { "abcdefg", "bcd", PR_TRUE, 1 },
  1.1659 +          { "abcdefg", "cbd", PR_TRUE, 1 },
  1.1660 +          { "abcdefg", "dbc", PR_TRUE, 1 },
  1.1661 +          { "abcdefg", "ghi", PR_TRUE, 6 },
  1.1662 +          { "abcdefg", "AE", PR_FALSE, 0 },
  1.1663 +          { "abcdefg", "EI", PR_FALSE, 0 },
  1.1664 +          { "abcdefg", "IO", PR_FALSE, 0 },
  1.1665 +          { "abcdefg", "BCD", PR_FALSE, 0 },
  1.1666 +          { "abcdefg", "CBD", PR_FALSE, 0 },
  1.1667 +          { "abcdefg", "DBC", PR_FALSE, 0 },
  1.1668 +          { "abcdefg", "GHI", PR_FALSE, 0 },
  1.1669 +          { "abcdefgabcdefg", "ae", PR_TRUE, 0 },
  1.1670 +          { "abcdefgabcdefg", "ei", PR_TRUE, 4 },
  1.1671 +          { "abcdefgabcdefg", "io", PR_FALSE, 0 },
  1.1672 +          { "abcdefgabcdefg", "bcd", PR_TRUE, 1 },
  1.1673 +          { "abcdefgabcdefg", "cbd", PR_TRUE, 1 },
  1.1674 +          { "abcdefgabcdefg", "dbc", PR_TRUE, 1 },
  1.1675 +          { "abcdefgabcdefg", "ghi", PR_TRUE, 6 },
  1.1676 +          { "abcdefgabcdefg", "AE", PR_FALSE, 0 },
  1.1677 +          { "abcdefgabcdefg", "EI", PR_FALSE, 0 },
  1.1678 +          { "abcdefgabcdefg", "IO", PR_FALSE, 0 },
  1.1679 +          { "abcdefgabcdefg", "BCD", PR_FALSE, 0 },
  1.1680 +          { "abcdefgabcdefg", "CBD", PR_FALSE, 0 },
  1.1681 +          { "abcdefgabcdefg", "DBC", PR_FALSE, 0 },
  1.1682 +          { "abcdefgabcdefg", "GHI", PR_FALSE, 0 }
  1.1683 +      };
  1.1684 +
  1.1685 +    int i;
  1.1686 +
  1.1687 +    printf("Test 019 (PL_strpbrk)     ..."); fflush(stdout);
  1.1688 +
  1.1689 +    for( i = 0; i < sizeof(array)/sizeof(array[0]); i++ )
  1.1690 +    {
  1.1691 +        char *rv = PL_strpbrk(array[i].str, array[i].chrs);
  1.1692 +
  1.1693 +        if( PR_FALSE == array[i].ret )
  1.1694 +        {
  1.1695 +            if( (char *)0 != rv )
  1.1696 +            {
  1.1697 +                printf("FAIL %d: %s,%s -> %.32s, not null\n", i, 
  1.1698 +                       array[i].str ? array[i].str : "(null)",
  1.1699 +                       array[i].chrs ? array[i].chrs : "(null)", 
  1.1700 +                       rv);
  1.1701 +                return PR_FALSE;
  1.1702 +            }
  1.1703 +        }
  1.1704 +        else
  1.1705 +        {
  1.1706 +            if( (char *)0 == rv )
  1.1707 +            {
  1.1708 +                printf("FAIL %d: %s,%s -> null, not +%lu\n", i,
  1.1709 +                       array[i].str ? array[i].str : "(null)",
  1.1710 +                       array[i].chrs ? array[i].chrs : "(null)", 
  1.1711 +                       array[i].off);
  1.1712 +                return PR_FALSE;
  1.1713 +            }
  1.1714 +
  1.1715 +            if( &array[i].str[ array[i].off ] != rv )
  1.1716 +            {
  1.1717 +                printf("FAIL %d: %s,%s -> 0x%x, not 0x%x+%lu\n", i,
  1.1718 +                       array[i].str ? array[i].str : "(null)",
  1.1719 +                       array[i].chrs ? array[i].chrs : "(null)", 
  1.1720 +                       rv, array[i].str, array[i].off);
  1.1721 +                return PR_FALSE;
  1.1722 +            }
  1.1723 +        }
  1.1724 +    }
  1.1725 +
  1.1726 +    printf("PASS\n");
  1.1727 +    return PR_TRUE;
  1.1728 +}
  1.1729 +
  1.1730 +/* PL_strprbrk */
  1.1731 +PRBool test_020(void)
  1.1732 +{
  1.1733 +    static struct
  1.1734 +    {
  1.1735 +        const char *str;
  1.1736 +        const char *chrs;
  1.1737 +        PRBool      ret;
  1.1738 +        PRUint32    off;
  1.1739 +    } array[] =
  1.1740 +      {
  1.1741 +          { (const char *)0, (const char *)0, PR_FALSE, 0 },
  1.1742 +          { (const char *)0, "abc", PR_FALSE, 0 },
  1.1743 +          { "abc", (const char *)0, PR_FALSE, 0 },
  1.1744 +          { "abcdefg", "", PR_FALSE, 0 },
  1.1745 +          { "", "aeiou", PR_FALSE, 0 },
  1.1746 +          { "abcdefg", "ae", PR_TRUE, 4 },
  1.1747 +          { "abcdefg", "ei", PR_TRUE, 4 },
  1.1748 +          { "abcdefg", "io", PR_FALSE, 0 },
  1.1749 +          { "abcdefg", "bcd", PR_TRUE, 3 },
  1.1750 +          { "abcdefg", "cbd", PR_TRUE, 3 },
  1.1751 +          { "abcdefg", "dbc", PR_TRUE, 3 },
  1.1752 +          { "abcdefg", "ghi", PR_TRUE, 6 },
  1.1753 +          { "abcdefg", "AE", PR_FALSE, 0 },
  1.1754 +          { "abcdefg", "EI", PR_FALSE, 0 },
  1.1755 +          { "abcdefg", "IO", PR_FALSE, 0 },
  1.1756 +          { "abcdefg", "BCD", PR_FALSE, 0 },
  1.1757 +          { "abcdefg", "CBD", PR_FALSE, 0 },
  1.1758 +          { "abcdefg", "DBC", PR_FALSE, 0 },
  1.1759 +          { "abcdefg", "GHI", PR_FALSE, 0 },
  1.1760 +          { "abcdefgabcdefg", "ae", PR_TRUE, 11 },
  1.1761 +          { "abcdefgabcdefg", "ei", PR_TRUE, 11 },
  1.1762 +          { "abcdefgabcdefg", "io", PR_FALSE, 0 },
  1.1763 +          { "abcdefgabcdefg", "bcd", PR_TRUE, 10 },
  1.1764 +          { "abcdefgabcdefg", "cbd", PR_TRUE, 10 },
  1.1765 +          { "abcdefgabcdefg", "dbc", PR_TRUE, 10 },
  1.1766 +          { "abcdefgabcdefg", "ghi", PR_TRUE, 13 },
  1.1767 +          { "abcdefgabcdefg", "AE", PR_FALSE, 0 },
  1.1768 +          { "abcdefgabcdefg", "EI", PR_FALSE, 0 },
  1.1769 +          { "abcdefgabcdefg", "IO", PR_FALSE, 0 },
  1.1770 +          { "abcdefgabcdefg", "BCD", PR_FALSE, 0 },
  1.1771 +          { "abcdefgabcdefg", "CBD", PR_FALSE, 0 },
  1.1772 +          { "abcdefgabcdefg", "DBC", PR_FALSE, 0 },
  1.1773 +          { "abcdefgabcdefg", "GHI", PR_FALSE, 0 }
  1.1774 +      };
  1.1775 +
  1.1776 +    int i;
  1.1777 +
  1.1778 +    printf("Test 020 (PL_strprbrk)    ..."); fflush(stdout);
  1.1779 +
  1.1780 +    for( i = 0; i < sizeof(array)/sizeof(array[0]); i++ )
  1.1781 +    {
  1.1782 +        char *rv = PL_strprbrk(array[i].str, array[i].chrs);
  1.1783 +
  1.1784 +        if( PR_FALSE == array[i].ret )
  1.1785 +        {
  1.1786 +            if( (char *)0 != rv )
  1.1787 +            {
  1.1788 +                printf("FAIL %d: %s,%s -> %.32s, not null\n", i, 
  1.1789 +                       array[i].str ? array[i].str : "(null)",
  1.1790 +                       array[i].chrs ? array[i].chrs : "(null)", 
  1.1791 +                       rv);
  1.1792 +                return PR_FALSE;
  1.1793 +            }
  1.1794 +        }
  1.1795 +        else
  1.1796 +        {
  1.1797 +            if( (char *)0 == rv )
  1.1798 +            {
  1.1799 +                printf("FAIL %d: %s,%s -> null, not +%lu\n", i,
  1.1800 +                       array[i].str ? array[i].str : "(null)",
  1.1801 +                       array[i].chrs ? array[i].chrs : "(null)", 
  1.1802 +                       array[i].off);
  1.1803 +                return PR_FALSE;
  1.1804 +            }
  1.1805 +
  1.1806 +            if( &array[i].str[ array[i].off ] != rv )
  1.1807 +            {
  1.1808 +                printf("FAIL %d: %s,%s -> 0x%x, not 0x%x+%lu\n", i,
  1.1809 +                       array[i].str ? array[i].str : "(null)",
  1.1810 +                       array[i].chrs ? array[i].chrs : "(null)", 
  1.1811 +                       rv, array[i].str, array[i].off);
  1.1812 +                return PR_FALSE;
  1.1813 +            }
  1.1814 +        }
  1.1815 +    }
  1.1816 +
  1.1817 +    printf("PASS\n");
  1.1818 +    return PR_TRUE;
  1.1819 +}
  1.1820 +                       
  1.1821 +/* PL_strnpbrk */
  1.1822 +PRBool test_021(void)
  1.1823 +{
  1.1824 +    static struct
  1.1825 +    {
  1.1826 +        const char *str;
  1.1827 +        const char *chrs;
  1.1828 +        PRUint32    max;
  1.1829 +        PRBool      ret;
  1.1830 +        PRUint32    off;
  1.1831 +    } array[] =
  1.1832 +      {
  1.1833 +          { (const char *)0, (const char *)0, 3, PR_FALSE, 0 },
  1.1834 +          { (const char *)0, "abc", 3, PR_FALSE, 0 },
  1.1835 +          { "abc", (const char *)0, 3, PR_FALSE, 0 },
  1.1836 +          { "abcdefg", "", 3, PR_FALSE, 0 },
  1.1837 +          { "", "aeiou", 3, PR_FALSE, 0 },
  1.1838 +          { "abcdefg", "ae", 0, PR_FALSE, 0 },
  1.1839 +          { "abcdefg", "ae", 1, PR_TRUE, 0 },
  1.1840 +          { "abcdefg", "ae", 4, PR_TRUE, 0 },
  1.1841 +          { "abcdefg", "ae", 5, PR_TRUE, 0 },
  1.1842 +          { "abcdefg", "ae", 6, PR_TRUE, 0 },
  1.1843 +          { "abcdefg", "ei", 4, PR_FALSE, 0 },
  1.1844 +          { "abcdefg", "io", 10, PR_FALSE, 0 },
  1.1845 +          { "abcdefg", "bcd", 2, PR_TRUE, 1 },
  1.1846 +          { "abcdefg", "cbd", 2, PR_TRUE, 1 },
  1.1847 +          { "abcdefg", "dbc", 2, PR_TRUE, 1 },
  1.1848 +          { "abcdefg", "ghi", 6, PR_FALSE, 0 },
  1.1849 +          { "abcdefg", "ghi", 7, PR_TRUE, 6 },
  1.1850 +          { "abcdefg", "AE", 9, PR_FALSE, 0 },
  1.1851 +          { "abcdefg", "EI", 9, PR_FALSE, 0 },
  1.1852 +          { "abcdefg", "IO", 9, PR_FALSE, 0 },
  1.1853 +          { "abcdefg", "BCD", 9, PR_FALSE, 0 },
  1.1854 +          { "abcdefg", "CBD", 9, PR_FALSE, 0 },
  1.1855 +          { "abcdefg", "DBC", 9, PR_FALSE, 0 },
  1.1856 +          { "abcdefg", "GHI", 9, PR_FALSE, 0 },
  1.1857 +          { "abcdefgabcdefg", "ae", 10, PR_TRUE, 0 },
  1.1858 +          { "abcdefgabcdefg", "ei", 10, PR_TRUE, 4 },
  1.1859 +          { "abcdefgabcdefg", "io", 10, PR_FALSE, 0 },
  1.1860 +          { "abcdefgabcdefg", "bcd", 10, PR_TRUE, 1 },
  1.1861 +          { "abcdefgabcdefg", "cbd", 10, PR_TRUE, 1 },
  1.1862 +          { "abcdefgabcdefg", "dbc", 10, PR_TRUE, 1 },
  1.1863 +          { "abcdefgabcdefg", "ghi", 10, PR_TRUE, 6 },
  1.1864 +          { "abcdefgabcdefg", "AE", 10, PR_FALSE, 0 },
  1.1865 +          { "abcdefgabcdefg", "EI", 10, PR_FALSE, 0 },
  1.1866 +          { "abcdefgabcdefg", "IO", 10, PR_FALSE, 0 },
  1.1867 +          { "abcdefgabcdefg", "BCD", 10, PR_FALSE, 0 },
  1.1868 +          { "abcdefgabcdefg", "CBD", 10, PR_FALSE, 0 },
  1.1869 +          { "abcdefgabcdefg", "DBC", 10, PR_FALSE, 0 },
  1.1870 +          { "abcdefgabcdefg", "GHI", 10, PR_FALSE, 0 }
  1.1871 +      };
  1.1872 +
  1.1873 +    int i;
  1.1874 +
  1.1875 +    printf("Test 021 (PL_strnpbrk)    ..."); fflush(stdout);
  1.1876 +
  1.1877 +    for( i = 0; i < sizeof(array)/sizeof(array[0]); i++ )
  1.1878 +    {
  1.1879 +        char *rv = PL_strnpbrk(array[i].str, array[i].chrs, array[i].max);
  1.1880 +
  1.1881 +        if( PR_FALSE == array[i].ret )
  1.1882 +        {
  1.1883 +            if( (char *)0 != rv )
  1.1884 +            {
  1.1885 +                printf("FAIL %d: %s,%s/%lu -> %.32s, not null\n", i, 
  1.1886 +                       array[i].str ? array[i].str : "(null)",
  1.1887 +                       array[i].chrs ? array[i].chrs : "(null)", 
  1.1888 +                       array[i].max, rv);
  1.1889 +                return PR_FALSE;
  1.1890 +            }
  1.1891 +        }
  1.1892 +        else
  1.1893 +        {
  1.1894 +            if( (char *)0 == rv )
  1.1895 +            {
  1.1896 +                printf("FAIL %d: %s,%s/%lu -> null, not +%lu\n", i,
  1.1897 +                       array[i].str ? array[i].str : "(null)",
  1.1898 +                       array[i].chrs ? array[i].chrs : "(null)", 
  1.1899 +                       array[i].max, array[i].off);
  1.1900 +                return PR_FALSE;
  1.1901 +            }
  1.1902 +
  1.1903 +            if( &array[i].str[ array[i].off ] != rv )
  1.1904 +            {
  1.1905 +                printf("FAIL %d: %s,%s/%lu -> 0x%x, not 0x%x+%lu\n", i,
  1.1906 +                       array[i].str ? array[i].str : "(null)",
  1.1907 +                       array[i].chrs ? array[i].chrs : "(null)", 
  1.1908 +                       array[i].max, rv, array[i].str, array[i].off);
  1.1909 +                return PR_FALSE;
  1.1910 +            }
  1.1911 +        }
  1.1912 +    }
  1.1913 +
  1.1914 +    printf("PASS\n");
  1.1915 +    return PR_TRUE;
  1.1916 +}
  1.1917 +
  1.1918 +/* PL_strnprbrk */
  1.1919 +PRBool test_022(void)
  1.1920 +{
  1.1921 +    static struct
  1.1922 +    {
  1.1923 +        const char *str;
  1.1924 +        const char *chrs;
  1.1925 +        PRUint32    max;
  1.1926 +        PRBool      ret;
  1.1927 +        PRUint32    off;
  1.1928 +    } array[] =
  1.1929 +      {
  1.1930 +          { (const char *)0, (const char *)0, 3, PR_FALSE, 0 },
  1.1931 +          { (const char *)0, "abc", 3, PR_FALSE, 0 },
  1.1932 +          { "abc", (const char *)0, 3, PR_FALSE, 0 },
  1.1933 +          { "abcdefg", "", 3, PR_FALSE, 0 },
  1.1934 +          { "", "aeiou", 3, PR_FALSE, 0 },
  1.1935 +          { "abcdefg", "ae", 0, PR_FALSE, 0 },
  1.1936 +          { "abcdefg", "ae", 1, PR_TRUE, 0 },
  1.1937 +          { "abcdefg", "ae", 4, PR_TRUE, 0 },
  1.1938 +          { "abcdefg", "ae", 5, PR_TRUE, 4 },
  1.1939 +          { "abcdefg", "ae", 6, PR_TRUE,  4 },
  1.1940 +          { "abcdefg", "ei", 4, PR_FALSE, 0 },
  1.1941 +          { "abcdefg", "io", 10, PR_FALSE, 0 },
  1.1942 +          { "abcdefg", "bcd", 2, PR_TRUE, 1 },
  1.1943 +          { "abcdefg", "cbd", 2, PR_TRUE, 1 },
  1.1944 +          { "abcdefg", "dbc", 2, PR_TRUE, 1 },
  1.1945 +          { "abcdefg", "bcd", 3, PR_TRUE, 2 },
  1.1946 +          { "abcdefg", "cbd", 3, PR_TRUE, 2 },
  1.1947 +          { "abcdefg", "dbc", 3, PR_TRUE, 2 },
  1.1948 +          { "abcdefg", "bcd", 5, PR_TRUE, 3 },
  1.1949 +          { "abcdefg", "cbd", 5, PR_TRUE, 3 },
  1.1950 +          { "abcdefg", "dbc", 5, PR_TRUE, 3 },
  1.1951 +          { "abcdefg", "bcd", 15, PR_TRUE, 3 },
  1.1952 +          { "abcdefg", "cbd", 15, PR_TRUE, 3 },
  1.1953 +          { "abcdefg", "dbc", 15, PR_TRUE, 3 },
  1.1954 +          { "abcdefg", "ghi", 6, PR_FALSE, 0 },
  1.1955 +          { "abcdefg", "ghi", 7, PR_TRUE, 6 },
  1.1956 +          { "abcdefg", "AE", 9, PR_FALSE, 0 },
  1.1957 +          { "abcdefg", "EI", 9, PR_FALSE, 0 },
  1.1958 +          { "abcdefg", "IO", 9, PR_FALSE, 0 },
  1.1959 +          { "abcdefg", "BCD", 9, PR_FALSE, 0 },
  1.1960 +          { "abcdefg", "CBD", 9, PR_FALSE, 0 },
  1.1961 +          { "abcdefg", "DBC", 9, PR_FALSE, 0 },
  1.1962 +          { "abcdefg", "GHI", 9, PR_FALSE, 0 },
  1.1963 +          { "abcdefgabcdefg", "ae", 10, PR_TRUE, 7 },
  1.1964 +          { "abcdefgabcdefg", "ei", 10, PR_TRUE, 4 },
  1.1965 +          { "abcdefgabcdefg", "io", 10, PR_FALSE, 0 },
  1.1966 +          { "abcdefgabcdefg", "bcd", 10, PR_TRUE, 9 },
  1.1967 +          { "abcdefgabcdefg", "cbd", 10, PR_TRUE, 9 },
  1.1968 +          { "abcdefgabcdefg", "dbc", 10, PR_TRUE, 9 },
  1.1969 +          { "abcdefgabcdefg", "ghi", 10, PR_TRUE, 6 },
  1.1970 +          { "abcdefgabcdefg", "AE", 10, PR_FALSE, 0 },
  1.1971 +          { "abcdefgabcdefg", "EI", 10, PR_FALSE, 0 },
  1.1972 +          { "abcdefgabcdefg", "IO", 10, PR_FALSE, 0 },
  1.1973 +          { "abcdefgabcdefg", "BCD", 10, PR_FALSE, 0 },
  1.1974 +          { "abcdefgabcdefg", "CBD", 10, PR_FALSE, 0 },
  1.1975 +          { "abcdefgabcdefg", "DBC", 10, PR_FALSE, 0 },
  1.1976 +          { "abcdefgabcdefg", "GHI", 10, PR_FALSE, 0 }
  1.1977 +      };
  1.1978 +
  1.1979 +    int i;
  1.1980 +
  1.1981 +    printf("Test 022 (PL_strnprbrk)   ..."); fflush(stdout);
  1.1982 +
  1.1983 +    for( i = 0; i < sizeof(array)/sizeof(array[0]); i++ )
  1.1984 +    {
  1.1985 +        char *rv = PL_strnprbrk(array[i].str, array[i].chrs, array[i].max);
  1.1986 +
  1.1987 +        if( PR_FALSE == array[i].ret )
  1.1988 +        {
  1.1989 +            if( (char *)0 != rv )
  1.1990 +            {
  1.1991 +                printf("FAIL %d: %s,%s/%lu -> %.32s, not null\n", i, 
  1.1992 +                       array[i].str ? array[i].str : "(null)",
  1.1993 +                       array[i].chrs ? array[i].chrs : "(null)", 
  1.1994 +                       array[i].max, rv);
  1.1995 +                return PR_FALSE;
  1.1996 +            }
  1.1997 +        }
  1.1998 +        else
  1.1999 +        {
  1.2000 +            if( (char *)0 == rv )
  1.2001 +            {
  1.2002 +                printf("FAIL %d: %s,%s/%lu -> null, not +%lu\n", i,
  1.2003 +                       array[i].str ? array[i].str : "(null)",
  1.2004 +                       array[i].chrs ? array[i].chrs : "(null)", 
  1.2005 +                       array[i].max, array[i].off);
  1.2006 +                return PR_FALSE;
  1.2007 +            }
  1.2008 +
  1.2009 +            if( &array[i].str[ array[i].off ] != rv )
  1.2010 +            {
  1.2011 +                printf("FAIL %d: %s,%s/%lu -> 0x%x, not 0x%x+%lu\n", i,
  1.2012 +                       array[i].str ? array[i].str : "(null)",
  1.2013 +                       array[i].chrs ? array[i].chrs : "(null)", 
  1.2014 +                       array[i].max, rv, array[i].str, array[i].off);
  1.2015 +                return PR_FALSE;
  1.2016 +            }
  1.2017 +        }
  1.2018 +    }
  1.2019 +
  1.2020 +    printf("PASS\n");
  1.2021 +    return PR_TRUE;
  1.2022 +}
  1.2023 +
  1.2024 +/* PL_strstr */
  1.2025 +PRBool test_023(void)
  1.2026 +{
  1.2027 +    static struct
  1.2028 +    {
  1.2029 +        const char *str;
  1.2030 +        const char *sub;
  1.2031 +        PRBool      ret;
  1.2032 +        PRUint32    off;
  1.2033 +    } array[] =
  1.2034 +      {
  1.2035 +          { (const char *)0, (const char *)0, PR_FALSE, 0 },
  1.2036 +          { (const char *)0, "blah", PR_FALSE, 0 },
  1.2037 +          { "blah-de-blah", (const char *)0, PR_FALSE, 0 },
  1.2038 +          { "blah-de-blah", "blah", PR_TRUE, 0 },
  1.2039 +          { "", "blah", PR_FALSE, 0 },
  1.2040 +          { "blah-de-blah", "", PR_FALSE, 0 },
  1.2041 +          { "abcdefg", "a", PR_TRUE, 0 },
  1.2042 +          { "abcdefg", "c", PR_TRUE, 2 },
  1.2043 +          { "abcdefg", "e", PR_TRUE, 4 },
  1.2044 +          { "abcdefg", "g", PR_TRUE, 6 },
  1.2045 +          { "abcdefg", "i", PR_FALSE, 0 },
  1.2046 +          { "abcdefg", "ab", PR_TRUE, 0 },
  1.2047 +          { "abcdefg", "cd", PR_TRUE, 2 },
  1.2048 +          { "abcdefg", "ef", PR_TRUE, 4 },
  1.2049 +          { "abcdefg", "gh", PR_FALSE, 0 },
  1.2050 +          { "abcdabc", "bc", PR_TRUE, 1 },
  1.2051 +          { "abcdefg", "abcdefg", PR_TRUE, 0 },
  1.2052 +          { "abcdefgabcdefg", "a", PR_TRUE, 0 },
  1.2053 +          { "abcdefgabcdefg", "c", PR_TRUE, 2 },
  1.2054 +          { "abcdefgabcdefg", "e", PR_TRUE, 4 },
  1.2055 +          { "abcdefgabcdefg", "g", PR_TRUE, 6 },
  1.2056 +          { "abcdefgabcdefg", "i", PR_FALSE, 0 },
  1.2057 +          { "abcdefgabcdefg", "ab", PR_TRUE, 0 },
  1.2058 +          { "abcdefgabcdefg", "cd", PR_TRUE, 2 },
  1.2059 +          { "abcdefgabcdefg", "ef", PR_TRUE, 4 },
  1.2060 +          { "abcdefgabcdefg", "gh", PR_FALSE, 0 },
  1.2061 +          { "abcdabcabcdabc", "bc", PR_TRUE, 1 },
  1.2062 +          { "abcdefgabcdefg", "abcdefg", PR_TRUE, 0 },
  1.2063 +          { "ABCDEFG", "a", PR_FALSE, 0 },
  1.2064 +          { "ABCDEFG", "c", PR_FALSE, 0 },
  1.2065 +          { "ABCDEFG", "e", PR_FALSE, 0 },
  1.2066 +          { "ABCDEFG", "g", PR_FALSE, 0 },
  1.2067 +          { "ABCDEFG", "i", PR_FALSE, 0 },
  1.2068 +          { "ABCDEFG", "ab", PR_FALSE, 0 },
  1.2069 +          { "ABCDEFG", "cd", PR_FALSE, 0 },
  1.2070 +          { "ABCDEFG", "ef", PR_FALSE, 0 },
  1.2071 +          { "ABCDEFG", "gh", PR_FALSE, 0 },
  1.2072 +          { "ABCDABC", "bc", PR_FALSE, 0 },
  1.2073 +          { "ABCDEFG", "abcdefg", PR_FALSE, 0 },
  1.2074 +          { "ABCDEFGABCDEFG", "a", PR_FALSE, 0 },
  1.2075 +          { "ABCDEFGABCDEFG", "c", PR_FALSE, 0 },
  1.2076 +          { "ABCDEFGABCDEFG", "e", PR_FALSE, 0 },
  1.2077 +          { "ABCDEFGABCDEFG", "g", PR_FALSE, 0 },
  1.2078 +          { "ABCDEFGABCDEFG", "i", PR_FALSE, 0 },
  1.2079 +          { "ABCDEFGABCDEFG", "ab", PR_FALSE, 0 },
  1.2080 +          { "ABCDEFGABCDEFG", "cd", PR_FALSE, 0 },
  1.2081 +          { "ABCDEFGABCDEFG", "ef", PR_FALSE, 0 },
  1.2082 +          { "ABCDEFGABCDEFG", "gh", PR_FALSE, 0 },
  1.2083 +          { "ABCDABCABCDABC", "bc", PR_FALSE, 0 },
  1.2084 +          { "ABCDEFGABCDEFG", "abcdefg", PR_FALSE, 0 }
  1.2085 +      };
  1.2086 +
  1.2087 +    int i;
  1.2088 +
  1.2089 +    printf("Test 023 (PL_strstr)      ..."); fflush(stdout);
  1.2090 +
  1.2091 +    for( i = 0; i < sizeof(array)/sizeof(array[0]); i++ )
  1.2092 +    {
  1.2093 +        char *rv = PL_strstr(array[i].str, array[i].sub);
  1.2094 +
  1.2095 +        if( PR_FALSE == array[i].ret )
  1.2096 +        {
  1.2097 +            if( (char *)0 != rv )
  1.2098 +            {
  1.2099 +                printf("FAIL %d: %s,%s -> %.32s, not null\n", i,
  1.2100 +                       array[i].str ? array[i].str : "(null)",
  1.2101 +                       array[i].sub ? array[i].sub : "(null)",
  1.2102 +                       rv);
  1.2103 +                return PR_FALSE;
  1.2104 +            }
  1.2105 +        }
  1.2106 +        else
  1.2107 +        {
  1.2108 +            if( (char *)0 == rv )
  1.2109 +            {
  1.2110 +                printf("FAIL %d: %s,%s -> null, not 0x%x+%lu\n", i,
  1.2111 +                       array[i].str ? array[i].str : "(null)",
  1.2112 +                       array[i].sub ? array[i].sub : "(null)",
  1.2113 +                       array[i].str, array[i].off);
  1.2114 +                return PR_FALSE;
  1.2115 +            }
  1.2116 +
  1.2117 +            if( &array[i].str[ array[i].off ] != rv )
  1.2118 +            {
  1.2119 +                printf("FAIL %d: %s,%s -> 0x%x, not 0x%x+%lu\n", i, 
  1.2120 +                       array[i].str ? array[i].str : "(null)",
  1.2121 +                       array[i].sub ? array[i].sub : "(null)",
  1.2122 +                       rv, array[i].str, array[i].off);
  1.2123 +                return PR_FALSE;
  1.2124 +            }
  1.2125 +        }
  1.2126 +    }
  1.2127 +
  1.2128 +    printf("PASS\n");
  1.2129 +    return PR_TRUE;
  1.2130 +}
  1.2131 +
  1.2132 +/* PL_strrstr */
  1.2133 +PRBool test_024(void)
  1.2134 +{
  1.2135 +    static struct
  1.2136 +    {
  1.2137 +        const char *str;
  1.2138 +        const char *sub;
  1.2139 +        PRBool      ret;
  1.2140 +        PRUint32    off;
  1.2141 +    } array[] =
  1.2142 +      {
  1.2143 +          { (const char *)0, (const char *)0, PR_FALSE, 0 },
  1.2144 +          { (const char *)0, "blah", PR_FALSE, 0 },
  1.2145 +          { "blah-de-blah", (const char *)0, PR_FALSE, 0 },
  1.2146 +          { "blah-de-blah", "blah", PR_TRUE, 8 },
  1.2147 +          { "", "blah", PR_FALSE, 0 },
  1.2148 +          { "blah-de-blah", "", PR_FALSE, 0 },
  1.2149 +          { "abcdefg", "a", PR_TRUE, 0 },
  1.2150 +          { "abcdefg", "c", PR_TRUE, 2 },
  1.2151 +          { "abcdefg", "e", PR_TRUE, 4 },
  1.2152 +          { "abcdefg", "g", PR_TRUE, 6 },
  1.2153 +          { "abcdefg", "i", PR_FALSE, 0 },
  1.2154 +          { "abcdefg", "ab", PR_TRUE, 0 },
  1.2155 +          { "abcdefg", "cd", PR_TRUE, 2 },
  1.2156 +          { "abcdefg", "ef", PR_TRUE, 4 },
  1.2157 +          { "abcdefg", "gh", PR_FALSE, 0 },
  1.2158 +          { "abcdabc", "bc", PR_TRUE, 5 },
  1.2159 +          { "abcdefg", "abcdefg", PR_TRUE, 0 },
  1.2160 +          { "abcdefgabcdefg", "a", PR_TRUE, 7 },
  1.2161 +          { "abcdefgabcdefg", "c", PR_TRUE, 9 },
  1.2162 +          { "abcdefgabcdefg", "e", PR_TRUE, 11 },
  1.2163 +          { "abcdefgabcdefg", "g", PR_TRUE, 13 },
  1.2164 +          { "abcdefgabcdefg", "i", PR_FALSE, 0 },
  1.2165 +          { "abcdefgabcdefg", "ab", PR_TRUE, 7 },
  1.2166 +          { "abcdefgabcdefg", "cd", PR_TRUE, 9 },
  1.2167 +          { "abcdefgabcdefg", "ef", PR_TRUE, 11 },
  1.2168 +          { "abcdefgabcdefg", "gh", PR_FALSE, 0 },
  1.2169 +          { "abcdabcabcdabc", "bc", PR_TRUE, 12 },
  1.2170 +          { "abcdefgabcdefg", "abcdefg", PR_TRUE, 7 },
  1.2171 +          { "ABCDEFG", "a", PR_FALSE, 0 },
  1.2172 +          { "ABCDEFG", "c", PR_FALSE, 0 },
  1.2173 +          { "ABCDEFG", "e", PR_FALSE, 0 },
  1.2174 +          { "ABCDEFG", "g", PR_FALSE, 0 },
  1.2175 +          { "ABCDEFG", "i", PR_FALSE, 0 },
  1.2176 +          { "ABCDEFG", "ab", PR_FALSE, 0 },
  1.2177 +          { "ABCDEFG", "cd", PR_FALSE, 0 },
  1.2178 +          { "ABCDEFG", "ef", PR_FALSE, 0 },
  1.2179 +          { "ABCDEFG", "gh", PR_FALSE, 0 },
  1.2180 +          { "ABCDABC", "bc", PR_FALSE, 0 },
  1.2181 +          { "ABCDEFG", "abcdefg", PR_FALSE, 0 },
  1.2182 +          { "ABCDEFGABCDEFG", "a", PR_FALSE, 0 },
  1.2183 +          { "ABCDEFGABCDEFG", "c", PR_FALSE, 0 },
  1.2184 +          { "ABCDEFGABCDEFG", "e", PR_FALSE, 0 },
  1.2185 +          { "ABCDEFGABCDEFG", "g", PR_FALSE, 0 },
  1.2186 +          { "ABCDEFGABCDEFG", "i", PR_FALSE, 0 },
  1.2187 +          { "ABCDEFGABCDEFG", "ab", PR_FALSE, 0 },
  1.2188 +          { "ABCDEFGABCDEFG", "cd", PR_FALSE, 0 },
  1.2189 +          { "ABCDEFGABCDEFG", "ef", PR_FALSE, 0 },
  1.2190 +          { "ABCDEFGABCDEFG", "gh", PR_FALSE, 0 },
  1.2191 +          { "ABCDABCABCDABC", "bc", PR_FALSE, 0 },
  1.2192 +          { "ABCDEFGABCDEFG", "abcdefg", PR_FALSE, 0 }
  1.2193 +      };
  1.2194 +
  1.2195 +    int i;
  1.2196 +
  1.2197 +    printf("Test 024 (PL_strrstr)     ..."); fflush(stdout);
  1.2198 +
  1.2199 +    for( i = 0; i < sizeof(array)/sizeof(array[0]); i++ )
  1.2200 +    {
  1.2201 +        char *rv = PL_strrstr(array[i].str, array[i].sub);
  1.2202 +
  1.2203 +        if( PR_FALSE == array[i].ret )
  1.2204 +        {
  1.2205 +            if( (char *)0 != rv )
  1.2206 +            {
  1.2207 +                printf("FAIL %d: %s,%s -> %.32s, not null\n", i,
  1.2208 +                       array[i].str ? array[i].str : "(null)",
  1.2209 +                       array[i].sub ? array[i].sub : "(null)",
  1.2210 +                       rv);
  1.2211 +                return PR_FALSE;
  1.2212 +            }
  1.2213 +        }
  1.2214 +        else
  1.2215 +        {
  1.2216 +            if( (char *)0 == rv )
  1.2217 +            {
  1.2218 +                printf("FAIL %d: %s,%s -> null, not 0x%x+%lu\n", i,
  1.2219 +                       array[i].str ? array[i].str : "(null)",
  1.2220 +                       array[i].sub ? array[i].sub : "(null)",
  1.2221 +                       array[i].str, array[i].off);
  1.2222 +                return PR_FALSE;
  1.2223 +            }
  1.2224 +
  1.2225 +            if( &array[i].str[ array[i].off ] != rv )
  1.2226 +            {
  1.2227 +                printf("FAIL %d: %s,%s -> 0x%x, not 0x%x+%lu\n", i, 
  1.2228 +                       array[i].str ? array[i].str : "(null)",
  1.2229 +                       array[i].sub ? array[i].sub : "(null)",
  1.2230 +                       rv, array[i].str, array[i].off);
  1.2231 +                return PR_FALSE;
  1.2232 +            }
  1.2233 +        }
  1.2234 +    }
  1.2235 +
  1.2236 +    printf("PASS\n");
  1.2237 +    return PR_TRUE;
  1.2238 +}
  1.2239 +
  1.2240 +/* PL_strnstr */
  1.2241 +PRBool test_025(void)
  1.2242 +{
  1.2243 +    static struct
  1.2244 +    {
  1.2245 +        const char *str;
  1.2246 +        const char *sub;
  1.2247 +        PRUint32    max;
  1.2248 +        PRBool      ret;
  1.2249 +        PRUint32    off;
  1.2250 +    } array[] =
  1.2251 +      {
  1.2252 +          { (const char *)0, (const char *)0, 12, PR_FALSE, 0 },
  1.2253 +          { (const char *)0, "blah", 12, PR_FALSE, 0 },
  1.2254 +          { "blah-de-blah", (const char *)0, 12, PR_FALSE, 0 },
  1.2255 +          { "blah-de-blah", "blah", 0, PR_FALSE, 0 },
  1.2256 +          { "blah-de-blah", "blah", 2, PR_FALSE, 0 },
  1.2257 +          { "blah-de-blah", "blah", 3, PR_FALSE, 0 },
  1.2258 +          { "blah-de-blah", "blah", 4, PR_TRUE, 0 },
  1.2259 +          { "blah-de-blah", "blah", 5, PR_TRUE, 0 },
  1.2260 +          { "blah-de-blah", "blah", 12, PR_TRUE, 0 },
  1.2261 +          { "", "blah", 12, PR_FALSE, 0 },
  1.2262 +          { "blah-de-blah", "", 12, PR_FALSE, 0 },
  1.2263 +          { "abcdefg", "a", 5, PR_TRUE, 0 },
  1.2264 +          { "abcdefg", "c", 5, PR_TRUE, 2 },
  1.2265 +          { "abcdefg", "e", 5, PR_TRUE, 4 },
  1.2266 +          { "abcdefg", "g", 5, PR_FALSE, 0 },
  1.2267 +          { "abcdefg", "i", 5, PR_FALSE, 0 },
  1.2268 +          { "abcdefg", "ab", 5, PR_TRUE, 0 },
  1.2269 +          { "abcdefg", "cd", 5, PR_TRUE, 2 },
  1.2270 +          { "abcdefg", "ef", 5, PR_FALSE, 0 },
  1.2271 +          { "abcdefg", "gh", 5, PR_FALSE, 0 },
  1.2272 +          { "abcdabc", "bc", 5, PR_TRUE, 1 },
  1.2273 +          { "abcdabc", "bc", 6, PR_TRUE, 1 },
  1.2274 +          { "abcdabc", "bc", 7, PR_TRUE, 1 },
  1.2275 +          { "abcdefg", "abcdefg", 6, PR_FALSE, 0 },
  1.2276 +          { "abcdefg", "abcdefg", 7, PR_TRUE, 0 },
  1.2277 +          { "abcdefg", "abcdefg", 8, PR_TRUE, 0 },
  1.2278 +          { "abcdefgabcdefg", "a", 12, PR_TRUE, 0 },
  1.2279 +          { "abcdefgabcdefg", "c", 12, PR_TRUE, 2 },
  1.2280 +          { "abcdefgabcdefg", "e", 12, PR_TRUE, 4 },
  1.2281 +          { "abcdefgabcdefg", "g", 12, PR_TRUE, 6 },
  1.2282 +          { "abcdefgabcdefg", "i", 12, PR_FALSE, 0 },
  1.2283 +          { "abcdefgabcdefg", "ab", 12, PR_TRUE, 0 },
  1.2284 +          { "abcdefgabcdefg", "cd", 12, PR_TRUE, 2 },
  1.2285 +          { "abcdefgabcdefg", "ef", 12, PR_TRUE, 4 },
  1.2286 +          { "abcdefgabcdefg", "gh", 12, PR_FALSE, 0 },
  1.2287 +          { "abcdabcabcdabc", "bc", 5, PR_TRUE, 1 },
  1.2288 +          { "abcdabcabcdabc", "bc", 6, PR_TRUE, 1 },
  1.2289 +          { "abcdabcabcdabc", "bc", 7, PR_TRUE, 1 },
  1.2290 +          { "abcdefgabcdefg", "abcdefg", 6, PR_FALSE, 0 },
  1.2291 +          { "abcdefgabcdefg", "abcdefg", 7, PR_TRUE, 0 },
  1.2292 +          { "abcdefgabcdefg", "abcdefg", 8, PR_TRUE, 0 },
  1.2293 +          { "ABCDEFG", "a", 5, PR_FALSE, 0 },
  1.2294 +          { "ABCDEFG", "c", 5, PR_FALSE, 0 },
  1.2295 +          { "ABCDEFG", "e", 5, PR_FALSE, 0 },
  1.2296 +          { "ABCDEFG", "g", 5, PR_FALSE, 0 },
  1.2297 +          { "ABCDEFG", "i", 5, PR_FALSE, 0 },
  1.2298 +          { "ABCDEFG", "ab", 5, PR_FALSE, 0 },
  1.2299 +          { "ABCDEFG", "cd", 5, PR_FALSE, 0 },
  1.2300 +          { "ABCDEFG", "ef", 5, PR_FALSE, 0 },
  1.2301 +          { "ABCDEFG", "gh", 5, PR_FALSE, 0 },
  1.2302 +          { "ABCDABC", "bc", 5, PR_FALSE, 0 },
  1.2303 +          { "ABCDABC", "bc", 6, PR_FALSE, 0 },
  1.2304 +          { "ABCDABC", "bc", 7, PR_FALSE, 0 },
  1.2305 +          { "ABCDEFG", "abcdefg", 6, PR_FALSE, 0 },
  1.2306 +          { "ABCDEFG", "abcdefg", 7, PR_FALSE, 0 },
  1.2307 +          { "ABCDEFG", "abcdefg", 8, PR_FALSE, 0 },
  1.2308 +          { "ABCDEFGABCDEFG", "a", 12, PR_FALSE, 0 },
  1.2309 +          { "ABCDEFGABCDEFG", "c", 12, PR_FALSE, 0 },
  1.2310 +          { "ABCDEFGABCDEFG", "e", 12, PR_FALSE, 0 },
  1.2311 +          { "ABCDEFGABCDEFG", "g", 12, PR_FALSE, 0 },
  1.2312 +          { "ABCDEFGABCDEFG", "i", 12, PR_FALSE, 0 },
  1.2313 +          { "ABCDEFGABCDEFG", "ab", 12, PR_FALSE, 0 },
  1.2314 +          { "ABCDEFGABCDEFG", "cd", 12, PR_FALSE, 0 },
  1.2315 +          { "ABCDEFGABCDEFG", "ef", 12, PR_FALSE, 0 },
  1.2316 +          { "ABCDEFGABCDEFG", "gh", 12, PR_FALSE, 0 },
  1.2317 +          { "ABCDABCABCDABC", "bc", 5, PR_FALSE, 0 },
  1.2318 +          { "ABCDABCABCDABC", "bc", 6, PR_FALSE, 0 },
  1.2319 +          { "ABCDABCABCDABC", "bc", 7, PR_FALSE,  },
  1.2320 +          { "ABCDEFGABCDEFG", "abcdefg", 6, PR_FALSE, 0 },
  1.2321 +          { "ABCDEFGABCDEFG", "abcdefg", 7, PR_FALSE, 0 },
  1.2322 +          { "ABCDEFGABCDEFG", "abcdefg", 8, PR_FALSE, 0 }
  1.2323 +      };
  1.2324 +
  1.2325 +    int i;
  1.2326 +
  1.2327 +    printf("Test 025 (PL_strnstr)     ..."); fflush(stdout);
  1.2328 +
  1.2329 +    for( i = 0; i < sizeof(array)/sizeof(array[0]); i++ )
  1.2330 +    {
  1.2331 +        char *rv = PL_strnstr(array[i].str, array[i].sub, array[i].max);
  1.2332 +
  1.2333 +        if( PR_FALSE == array[i].ret )
  1.2334 +        {
  1.2335 +            if( (char *)0 != rv )
  1.2336 +            {
  1.2337 +                printf("FAIL %d: %s,%s/%lu -> %.32s, not null\n", i,
  1.2338 +                       array[i].str ? array[i].str : "(null)",
  1.2339 +                       array[i].sub ? array[i].sub : "(null)",
  1.2340 +                       array[i].max, rv);
  1.2341 +                return PR_FALSE;
  1.2342 +            }
  1.2343 +        }
  1.2344 +        else
  1.2345 +        {
  1.2346 +            if( (char *)0 == rv )
  1.2347 +            {
  1.2348 +                printf("FAIL %d: %s,%s/%lu -> null, not 0x%x+%lu\n", i,
  1.2349 +                       array[i].str ? array[i].str : "(null)",
  1.2350 +                       array[i].sub ? array[i].sub : "(null)",
  1.2351 +                       array[i].max, array[i].str, array[i].off);
  1.2352 +                return PR_FALSE;
  1.2353 +            }
  1.2354 +
  1.2355 +            if( &array[i].str[ array[i].off ] != rv )
  1.2356 +            {
  1.2357 +                printf("FAIL %d: %s,%s/%lu -> 0x%x, not 0x%x+%lu\n", i, 
  1.2358 +                       array[i].str ? array[i].str : "(null)",
  1.2359 +                       array[i].sub ? array[i].sub : "(null)",
  1.2360 +                       array[i].max, rv, array[i].str, array[i].off);
  1.2361 +                return PR_FALSE;
  1.2362 +            }
  1.2363 +        }
  1.2364 +    }
  1.2365 +
  1.2366 +    printf("PASS\n");
  1.2367 +    return PR_TRUE;
  1.2368 +}
  1.2369 +
  1.2370 +/* PL_strnrstr */
  1.2371 +PRBool test_026(void)
  1.2372 +{
  1.2373 +    static struct
  1.2374 +    {
  1.2375 +        const char *str;
  1.2376 +        const char *sub;
  1.2377 +        PRUint32    max;
  1.2378 +        PRBool      ret;
  1.2379 +        PRUint32    off;
  1.2380 +    } array[] =
  1.2381 +      {
  1.2382 +          { (const char *)0, (const char *)0, 12, PR_FALSE, 0 },
  1.2383 +          { (const char *)0, "blah", 12, PR_FALSE, 0 },
  1.2384 +          { "blah-de-blah", (const char *)0, 12, PR_FALSE, 0 },
  1.2385 +          { "blah-de-blah", "blah", 0, PR_FALSE, 0 },
  1.2386 +          { "blah-de-blah", "blah", 2, PR_FALSE, 0 },
  1.2387 +          { "blah-de-blah", "blah", 3, PR_FALSE, 0 },
  1.2388 +          { "blah-de-blah", "blah", 4, PR_TRUE, 0 },
  1.2389 +          { "blah-de-blah", "blah", 5, PR_TRUE, 0 },
  1.2390 +          { "blah-de-blah", "blah", 11, PR_TRUE, 0 },
  1.2391 +          { "blah-de-blah", "blah", 12, PR_TRUE, 8 },
  1.2392 +          { "blah-de-blah", "blah", 13, PR_TRUE, 8 },
  1.2393 +          { "", "blah", 12, PR_FALSE, 0 },
  1.2394 +          { "blah-de-blah", "", 12, PR_FALSE, 0 },
  1.2395 +          { "abcdefg", "a", 5, PR_TRUE, 0 },
  1.2396 +          { "abcdefg", "c", 5, PR_TRUE, 2 },
  1.2397 +          { "abcdefg", "e", 5, PR_TRUE, 4 },
  1.2398 +          { "abcdefg", "g", 5, PR_FALSE, 0 },
  1.2399 +          { "abcdefg", "i", 5, PR_FALSE, 0 },
  1.2400 +          { "abcdefg", "ab", 5, PR_TRUE, 0 },
  1.2401 +          { "abcdefg", "cd", 5, PR_TRUE, 2 },
  1.2402 +          { "abcdefg", "ef", 5, PR_FALSE, 0 },
  1.2403 +          { "abcdefg", "gh", 5, PR_FALSE, 0 },
  1.2404 +          { "abcdabc", "bc", 5, PR_TRUE, 1 },
  1.2405 +          { "abcdabc", "bc", 6, PR_TRUE, 1 },
  1.2406 +          { "abcdabc", "bc", 7, PR_TRUE, 5 },
  1.2407 +          { "abcdefg", "abcdefg", 6, PR_FALSE, 0 },
  1.2408 +          { "abcdefg", "abcdefg", 7, PR_TRUE, 0 },
  1.2409 +          { "abcdefg", "abcdefg", 8, PR_TRUE, 0 },
  1.2410 +          { "abcdefgabcdefg", "a", 12, PR_TRUE, 7 },
  1.2411 +          { "abcdefgabcdefg", "c", 12, PR_TRUE, 9 },
  1.2412 +          { "abcdefgabcdefg", "e", 12, PR_TRUE, 11 },
  1.2413 +          { "abcdefgabcdefg", "g", 12, PR_TRUE, 6 },
  1.2414 +          { "abcdefgabcdefg", "i", 12, PR_FALSE, 0 },
  1.2415 +          { "abcdefgabcdefg", "ab", 12, PR_TRUE, 7 },
  1.2416 +          { "abcdefgabcdefg", "cd", 12, PR_TRUE, 9 },
  1.2417 +          { "abcdefgabcdefg", "ef", 12, PR_TRUE, 4 },
  1.2418 +          { "abcdefgabcdefg", "gh", 12, PR_FALSE, 0 },
  1.2419 +          { "abcdabcabcdabc", "bc", 12, PR_TRUE, 8 },
  1.2420 +          { "abcdabcabcdabc", "bc", 13, PR_TRUE, 8 },
  1.2421 +          { "abcdabcabcdabc", "bc", 14, PR_TRUE, 12 },
  1.2422 +          { "abcdefgabcdefg", "abcdefg", 13, PR_TRUE, 0 },
  1.2423 +          { "abcdefgabcdefg", "abcdefg", 14, PR_TRUE, 7 },
  1.2424 +          { "abcdefgabcdefg", "abcdefg", 15, PR_TRUE, 7 },
  1.2425 +          { "ABCDEFG", "a", 5, PR_FALSE, 0 },
  1.2426 +          { "ABCDEFG", "c", 5, PR_FALSE, 0 },
  1.2427 +          { "ABCDEFG", "e", 5, PR_FALSE, 0 },
  1.2428 +          { "ABCDEFG", "g", 5, PR_FALSE, 0 },
  1.2429 +          { "ABCDEFG", "i", 5, PR_FALSE, 0 },
  1.2430 +          { "ABCDEFG", "ab", 5, PR_FALSE, 0 },
  1.2431 +          { "ABCDEFG", "cd", 5, PR_FALSE, 0 },
  1.2432 +          { "ABCDEFG", "ef", 5, PR_FALSE, 0 },
  1.2433 +          { "ABCDEFG", "gh", 5, PR_FALSE, 0 },
  1.2434 +          { "ABCDABC", "bc", 5, PR_FALSE, 0 },
  1.2435 +          { "ABCDABC", "bc", 6, PR_FALSE, 0 },
  1.2436 +          { "ABCDABC", "bc", 7, PR_FALSE, 0 },
  1.2437 +          { "ABCDEFG", "abcdefg", 6, PR_FALSE, 0 },
  1.2438 +          { "ABCDEFG", "abcdefg", 7, PR_FALSE, 0 },
  1.2439 +          { "ABCDEFG", "abcdefg", 8, PR_FALSE, 0 },
  1.2440 +          { "ABCDEFGABCDEFG", "a", 12, PR_FALSE, 0 },
  1.2441 +          { "ABCDEFGABCDEFG", "c", 12, PR_FALSE, 0 },
  1.2442 +          { "ABCDEFGABCDEFG", "e", 12, PR_FALSE, 0 },
  1.2443 +          { "ABCDEFGABCDEFG", "g", 12, PR_FALSE, 0 },
  1.2444 +          { "ABCDEFGABCDEFG", "i", 12, PR_FALSE, 0 },
  1.2445 +          { "ABCDEFGABCDEFG", "ab", 12, PR_FALSE, 0 },
  1.2446 +          { "ABCDEFGABCDEFG", "cd", 12, PR_FALSE, 0 },
  1.2447 +          { "ABCDEFGABCDEFG", "ef", 12, PR_FALSE, 0 },
  1.2448 +          { "ABCDEFGABCDEFG", "gh", 12, PR_FALSE, 0 },
  1.2449 +          { "ABCDABCABCDABC", "bc", 12, PR_FALSE, 0 },
  1.2450 +          { "ABCDABCABCDABC", "bc", 13, PR_FALSE, 0 },
  1.2451 +          { "ABCDABCABCDABC", "bc", 14, PR_FALSE, 0 },
  1.2452 +          { "ABCDEFGABCDEFG", "abcdefg", 13, PR_FALSE, 0 },
  1.2453 +          { "ABCDEFGABCDEFG", "abcdefg", 14, PR_FALSE, 0 },
  1.2454 +          { "ABCDEFGABCDEFG", "abcdefg", 15, PR_FALSE, 0 }
  1.2455 +      };
  1.2456 +
  1.2457 +    int i;
  1.2458 +
  1.2459 +    printf("Test 026 (PL_strnrstr)    ..."); fflush(stdout);
  1.2460 +
  1.2461 +    for( i = 0; i < sizeof(array)/sizeof(array[0]); i++ )
  1.2462 +    {
  1.2463 +        char *rv = PL_strnrstr(array[i].str, array[i].sub, array[i].max);
  1.2464 +
  1.2465 +        if( PR_FALSE == array[i].ret )
  1.2466 +        {
  1.2467 +            if( (char *)0 != rv )
  1.2468 +            {
  1.2469 +                printf("FAIL %d: %s,%s/%lu -> %.32s, not null\n", i,
  1.2470 +                       array[i].str ? array[i].str : "(null)",
  1.2471 +                       array[i].sub ? array[i].sub : "(null)",
  1.2472 +                       array[i].max, rv);
  1.2473 +                return PR_FALSE;
  1.2474 +            }
  1.2475 +        }
  1.2476 +        else
  1.2477 +        {
  1.2478 +            if( (char *)0 == rv )
  1.2479 +            {
  1.2480 +                printf("FAIL %d: %s,%s/%lu -> null, not 0x%x+%lu\n", i,
  1.2481 +                       array[i].str ? array[i].str : "(null)",
  1.2482 +                       array[i].sub ? array[i].sub : "(null)",
  1.2483 +                       array[i].max, array[i].str, array[i].off);
  1.2484 +                return PR_FALSE;
  1.2485 +            }
  1.2486 +
  1.2487 +            if( &array[i].str[ array[i].off ] != rv )
  1.2488 +            {
  1.2489 +                printf("FAIL %d: %s,%s/%lu -> 0x%x, not 0x%x+%lu\n", i, 
  1.2490 +                       array[i].str ? array[i].str : "(null)",
  1.2491 +                       array[i].sub ? array[i].sub : "(null)",
  1.2492 +                       array[i].max, rv, array[i].str, array[i].off);
  1.2493 +                return PR_FALSE;
  1.2494 +            }
  1.2495 +        }
  1.2496 +    }
  1.2497 +
  1.2498 +    printf("PASS\n");
  1.2499 +    return PR_TRUE;
  1.2500 +}
  1.2501 +
  1.2502 +/* PL_strcasestr */
  1.2503 +PRBool test_027(void)
  1.2504 +{
  1.2505 +    static struct
  1.2506 +    {
  1.2507 +        const char *str;
  1.2508 +        const char *sub;
  1.2509 +        PRBool      ret;
  1.2510 +        PRUint32    off;
  1.2511 +    } array[] =
  1.2512 +      {
  1.2513 +          { (const char *)0, (const char *)0, PR_FALSE, 0 },
  1.2514 +          { (const char *)0, "blah", PR_FALSE, 0 },
  1.2515 +          { "blah-de-blah", (const char *)0, PR_FALSE, 0 },
  1.2516 +          { "blah-de-blah", "blah", PR_TRUE, 0 },
  1.2517 +          { "", "blah", PR_FALSE, 0 },
  1.2518 +          { "blah-de-blah", "", PR_FALSE, 0 },
  1.2519 +          { "abcdefg", "a", PR_TRUE, 0 },
  1.2520 +          { "abcdefg", "c", PR_TRUE, 2 },
  1.2521 +          { "abcdefg", "e", PR_TRUE, 4 },
  1.2522 +          { "abcdefg", "g", PR_TRUE, 6 },
  1.2523 +          { "abcdefg", "i", PR_FALSE, 0 },
  1.2524 +          { "abcdefg", "ab", PR_TRUE, 0 },
  1.2525 +          { "abcdefg", "cd", PR_TRUE, 2 },
  1.2526 +          { "abcdefg", "ef", PR_TRUE, 4 },
  1.2527 +          { "abcdefg", "gh", PR_FALSE, 0 },
  1.2528 +          { "abcdabc", "bc", PR_TRUE, 1 },
  1.2529 +          { "abcdefg", "abcdefg", PR_TRUE, 0 },
  1.2530 +          { "abcdefgabcdefg", "a", PR_TRUE, 0 },
  1.2531 +          { "abcdefgabcdefg", "c", PR_TRUE, 2 },
  1.2532 +          { "abcdefgabcdefg", "e", PR_TRUE, 4 },
  1.2533 +          { "abcdefgabcdefg", "g", PR_TRUE, 6 },
  1.2534 +          { "abcdefgabcdefg", "i", PR_FALSE, 0 },
  1.2535 +          { "abcdefgabcdefg", "ab", PR_TRUE, 0 },
  1.2536 +          { "abcdefgabcdefg", "cd", PR_TRUE, 2 },
  1.2537 +          { "abcdefgabcdefg", "ef", PR_TRUE, 4 },
  1.2538 +          { "abcdefgabcdefg", "gh", PR_FALSE, 0 },
  1.2539 +          { "abcdabcabcdabc", "bc", PR_TRUE, 1 },
  1.2540 +          { "abcdefgabcdefg", "abcdefg", PR_TRUE, 0 },
  1.2541 +          { "ABCDEFG", "a", PR_TRUE, 0 },
  1.2542 +          { "ABCDEFG", "c", PR_TRUE, 2 },
  1.2543 +          { "ABCDEFG", "e", PR_TRUE, 4 },
  1.2544 +          { "ABCDEFG", "g", PR_TRUE, 6 },
  1.2545 +          { "ABCDEFG", "i", PR_FALSE, 0 },
  1.2546 +          { "ABCDEFG", "ab", PR_TRUE, 0 },
  1.2547 +          { "ABCDEFG", "cd", PR_TRUE, 2 },
  1.2548 +          { "ABCDEFG", "ef", PR_TRUE, 4 },
  1.2549 +          { "ABCDEFG", "gh", PR_FALSE, 0 },
  1.2550 +          { "ABCDABC", "bc", PR_TRUE, 1 },
  1.2551 +          { "ABCDEFG", "abcdefg", PR_TRUE, 0 },
  1.2552 +          { "ABCDEFGABCDEFG", "a", PR_TRUE, 0 },
  1.2553 +          { "ABCDEFGABCDEFG", "c", PR_TRUE, 2 },
  1.2554 +          { "ABCDEFGABCDEFG", "e", PR_TRUE, 4 },
  1.2555 +          { "ABCDEFGABCDEFG", "g", PR_TRUE, 6 },
  1.2556 +          { "ABCDEFGABCDEFG", "i", PR_FALSE, 0 },
  1.2557 +          { "ABCDEFGABCDEFG", "ab", PR_TRUE, 0 },
  1.2558 +          { "ABCDEFGABCDEFG", "cd", PR_TRUE, 2 },
  1.2559 +          { "ABCDEFGABCDEFG", "ef", PR_TRUE, 4 },
  1.2560 +          { "ABCDEFGABCDEFG", "gh", PR_FALSE, 0 },
  1.2561 +          { "ABCDABCABCDABC", "bc", PR_TRUE, 1 },
  1.2562 +          { "ABCDEFGABCDEFG", "abcdefg", PR_TRUE, 0 }
  1.2563 +      };
  1.2564 +
  1.2565 +    int i;
  1.2566 +
  1.2567 +    printf("Test 027 (PL_strcasestr)  ..."); fflush(stdout);
  1.2568 +
  1.2569 +    for( i = 0; i < sizeof(array)/sizeof(array[0]); i++ )
  1.2570 +    {
  1.2571 +        char *rv = PL_strcasestr(array[i].str, array[i].sub);
  1.2572 +
  1.2573 +        if( PR_FALSE == array[i].ret )
  1.2574 +        {
  1.2575 +            if( (char *)0 != rv )
  1.2576 +            {
  1.2577 +                printf("FAIL %d: %s,%s -> %.32s, not null\n", i,
  1.2578 +                       array[i].str ? array[i].str : "(null)",
  1.2579 +                       array[i].sub ? array[i].sub : "(null)",
  1.2580 +                       rv);
  1.2581 +                return PR_FALSE;
  1.2582 +            }
  1.2583 +        }
  1.2584 +        else
  1.2585 +        {
  1.2586 +            if( (char *)0 == rv )
  1.2587 +            {
  1.2588 +                printf("FAIL %d: %s,%s -> null, not 0x%x+%lu\n", i,
  1.2589 +                       array[i].str ? array[i].str : "(null)",
  1.2590 +                       array[i].sub ? array[i].sub : "(null)",
  1.2591 +                       array[i].str, array[i].off);
  1.2592 +                return PR_FALSE;
  1.2593 +            }
  1.2594 +
  1.2595 +            if( &array[i].str[ array[i].off ] != rv )
  1.2596 +            {
  1.2597 +                printf("FAIL %d: %s,%s -> 0x%x, not 0x%x+%lu\n", i, 
  1.2598 +                       array[i].str ? array[i].str : "(null)",
  1.2599 +                       array[i].sub ? array[i].sub : "(null)",
  1.2600 +                       rv, array[i].str, array[i].off);
  1.2601 +                return PR_FALSE;
  1.2602 +            }
  1.2603 +        }
  1.2604 +    }
  1.2605 +
  1.2606 +    printf("PASS\n");
  1.2607 +    return PR_TRUE;
  1.2608 +}
  1.2609 +
  1.2610 +/* PL_strcaserstr */
  1.2611 +PRBool test_028(void)
  1.2612 +{
  1.2613 +    static struct
  1.2614 +    {
  1.2615 +        const char *str;
  1.2616 +        const char *sub;
  1.2617 +        PRBool      ret;
  1.2618 +        PRUint32    off;
  1.2619 +    } array[] =
  1.2620 +      {
  1.2621 +          { (const char *)0, (const char *)0, PR_FALSE, 0 },
  1.2622 +          { (const char *)0, "blah", PR_FALSE, 0 },
  1.2623 +          { "blah-de-blah", (const char *)0, PR_FALSE, 0 },
  1.2624 +          { "blah-de-blah", "blah", PR_TRUE, 8 },
  1.2625 +          { "", "blah", PR_FALSE, 0 },
  1.2626 +          { "blah-de-blah", "", PR_FALSE, 0 },
  1.2627 +          { "abcdefg", "a", PR_TRUE, 0 },
  1.2628 +          { "abcdefg", "c", PR_TRUE, 2 },
  1.2629 +          { "abcdefg", "e", PR_TRUE, 4 },
  1.2630 +          { "abcdefg", "g", PR_TRUE, 6 },
  1.2631 +          { "abcdefg", "i", PR_FALSE, 0 },
  1.2632 +          { "abcdefg", "ab", PR_TRUE, 0 },
  1.2633 +          { "abcdefg", "cd", PR_TRUE, 2 },
  1.2634 +          { "abcdefg", "ef", PR_TRUE, 4 },
  1.2635 +          { "abcdefg", "gh", PR_FALSE, 0 },
  1.2636 +          { "abcdabc", "bc", PR_TRUE, 5 },
  1.2637 +          { "abcdefg", "abcdefg", PR_TRUE, 0 },
  1.2638 +          { "abcdefgabcdefg", "a", PR_TRUE, 7 },
  1.2639 +          { "abcdefgabcdefg", "c", PR_TRUE, 9 },
  1.2640 +          { "abcdefgabcdefg", "e", PR_TRUE, 11 },
  1.2641 +          { "abcdefgabcdefg", "g", PR_TRUE, 13 },
  1.2642 +          { "abcdefgabcdefg", "i", PR_FALSE, 0 },
  1.2643 +          { "abcdefgabcdefg", "ab", PR_TRUE, 7 },
  1.2644 +          { "abcdefgabcdefg", "cd", PR_TRUE, 9 },
  1.2645 +          { "abcdefgabcdefg", "ef", PR_TRUE, 11 },
  1.2646 +          { "abcdefgabcdefg", "gh", PR_FALSE, 0 },
  1.2647 +          { "abcdabcabcdabc", "bc", PR_TRUE, 12 },
  1.2648 +          { "abcdefgabcdefg", "abcdefg", PR_TRUE, 7 },
  1.2649 +          { "ABCDEFG", "a", PR_TRUE, 0 },
  1.2650 +          { "ABCDEFG", "c", PR_TRUE, 2 },
  1.2651 +          { "ABCDEFG", "e", PR_TRUE, 4 },
  1.2652 +          { "ABCDEFG", "g", PR_TRUE, 6 },
  1.2653 +          { "ABCDEFG", "i", PR_FALSE, 0 },
  1.2654 +          { "ABCDEFG", "ab", PR_TRUE, 0 },
  1.2655 +          { "ABCDEFG", "cd", PR_TRUE, 2 },
  1.2656 +          { "ABCDEFG", "ef", PR_TRUE, 4 },
  1.2657 +          { "ABCDEFG", "gh", PR_FALSE, 0 },
  1.2658 +          { "ABCDABC", "bc", PR_TRUE, 5 },
  1.2659 +          { "ABCDEFG", "abcdefg", PR_TRUE, 0 },
  1.2660 +          { "ABCDEFGABCDEFG", "a", PR_TRUE, 7 },
  1.2661 +          { "ABCDEFGABCDEFG", "c", PR_TRUE, 9 },
  1.2662 +          { "ABCDEFGABCDEFG", "e", PR_TRUE, 11 },
  1.2663 +          { "ABCDEFGABCDEFG", "g", PR_TRUE, 13 },
  1.2664 +          { "ABCDEFGABCDEFG", "i", PR_FALSE, 0 },
  1.2665 +          { "ABCDEFGABCDEFG", "ab", PR_TRUE, 7 },
  1.2666 +          { "ABCDEFGABCDEFG", "cd", PR_TRUE, 9 },
  1.2667 +          { "ABCDEFGABCDEFG", "ef", PR_TRUE, 11 },
  1.2668 +          { "ABCDEFGABCDEFG", "gh", PR_FALSE, 0 },
  1.2669 +          { "ABCDABCABCDABC", "bc", PR_TRUE, 12 },
  1.2670 +          { "ABCDEFGABCDEFG", "abcdefg", PR_TRUE, 7 }
  1.2671 +      };
  1.2672 +
  1.2673 +    int i;
  1.2674 +
  1.2675 +    printf("Test 028 (PL_strcaserstr) ..."); fflush(stdout);
  1.2676 +
  1.2677 +    for( i = 0; i < sizeof(array)/sizeof(array[0]); i++ )
  1.2678 +    {
  1.2679 +        char *rv = PL_strcaserstr(array[i].str, array[i].sub);
  1.2680 +
  1.2681 +        if( PR_FALSE == array[i].ret )
  1.2682 +        {
  1.2683 +            if( (char *)0 != rv )
  1.2684 +            {
  1.2685 +                printf("FAIL %d: %s,%s -> %.32s, not null\n", i,
  1.2686 +                       array[i].str ? array[i].str : "(null)",
  1.2687 +                       array[i].sub ? array[i].sub : "(null)",
  1.2688 +                       rv);
  1.2689 +                return PR_FALSE;
  1.2690 +            }
  1.2691 +        }
  1.2692 +        else
  1.2693 +        {
  1.2694 +            if( (char *)0 == rv )
  1.2695 +            {
  1.2696 +                printf("FAIL %d: %s,%s -> null, not 0x%x+%lu\n", i,
  1.2697 +                       array[i].str ? array[i].str : "(null)",
  1.2698 +                       array[i].sub ? array[i].sub : "(null)",
  1.2699 +                       array[i].str, array[i].off);
  1.2700 +                return PR_FALSE;
  1.2701 +            }
  1.2702 +
  1.2703 +            if( &array[i].str[ array[i].off ] != rv )
  1.2704 +            {
  1.2705 +                printf("FAIL %d: %s,%s -> 0x%x, not 0x%x+%lu\n", i, 
  1.2706 +                       array[i].str ? array[i].str : "(null)",
  1.2707 +                       array[i].sub ? array[i].sub : "(null)",
  1.2708 +                       rv, array[i].str, array[i].off);
  1.2709 +                return PR_FALSE;
  1.2710 +            }
  1.2711 +        }
  1.2712 +    }
  1.2713 +
  1.2714 +    printf("PASS\n");
  1.2715 +    return PR_TRUE;
  1.2716 +}
  1.2717 +
  1.2718 +/* PL_strncasestr */
  1.2719 +PRBool test_029(void)
  1.2720 +{
  1.2721 +    static struct
  1.2722 +    {
  1.2723 +        const char *str;
  1.2724 +        const char *sub;
  1.2725 +        PRUint32    max;
  1.2726 +        PRBool      ret;
  1.2727 +        PRUint32    off;
  1.2728 +    } array[] =
  1.2729 +      {
  1.2730 +          { (const char *)0, (const char *)0, 12, PR_FALSE, 0 },
  1.2731 +          { (const char *)0, "blah", 12, PR_FALSE, 0 },
  1.2732 +          { "blah-de-blah", (const char *)0, 12, PR_FALSE, 0 },
  1.2733 +          { "blah-de-blah", "blah", 0, PR_FALSE, 0 },
  1.2734 +          { "blah-de-blah", "blah", 2, PR_FALSE, 0 },
  1.2735 +          { "blah-de-blah", "blah", 3, PR_FALSE, 0 },
  1.2736 +          { "blah-de-blah", "blah", 4, PR_TRUE, 0 },
  1.2737 +          { "blah-de-blah", "blah", 5, PR_TRUE, 0 },
  1.2738 +          { "blah-de-blah", "blah", 12, PR_TRUE, 0 },
  1.2739 +          { "", "blah", 12, PR_FALSE, 0 },
  1.2740 +          { "blah-de-blah", "", 12, PR_FALSE, 0 },
  1.2741 +          { "abcdefg", "a", 5, PR_TRUE, 0 },
  1.2742 +          { "abcdefg", "c", 5, PR_TRUE, 2 },
  1.2743 +          { "abcdefg", "e", 5, PR_TRUE, 4 },
  1.2744 +          { "abcdefg", "g", 5, PR_FALSE, 0 },
  1.2745 +          { "abcdefg", "i", 5, PR_FALSE, 0 },
  1.2746 +          { "abcdefg", "ab", 5, PR_TRUE, 0 },
  1.2747 +          { "abcdefg", "cd", 5, PR_TRUE, 2 },
  1.2748 +          { "abcdefg", "ef", 5, PR_FALSE, 0 },
  1.2749 +          { "abcdefg", "gh", 5, PR_FALSE, 0 },
  1.2750 +          { "abcdabc", "bc", 5, PR_TRUE, 1 },
  1.2751 +          { "abcdabc", "bc", 6, PR_TRUE, 1 },
  1.2752 +          { "abcdabc", "bc", 7, PR_TRUE, 1 },
  1.2753 +          { "abcdefg", "abcdefg", 6, PR_FALSE, 0 },
  1.2754 +          { "abcdefg", "abcdefg", 7, PR_TRUE, 0 },
  1.2755 +          { "abcdefg", "abcdefg", 8, PR_TRUE, 0 },
  1.2756 +          { "abcdefgabcdefg", "a", 12, PR_TRUE, 0 },
  1.2757 +          { "abcdefgabcdefg", "c", 12, PR_TRUE, 2 },
  1.2758 +          { "abcdefgabcdefg", "e", 12, PR_TRUE, 4 },
  1.2759 +          { "abcdefgabcdefg", "g", 12, PR_TRUE, 6 },
  1.2760 +          { "abcdefgabcdefg", "i", 12, PR_FALSE, 0 },
  1.2761 +          { "abcdefgabcdefg", "ab", 12, PR_TRUE, 0 },
  1.2762 +          { "abcdefgabcdefg", "cd", 12, PR_TRUE, 2 },
  1.2763 +          { "abcdefgabcdefg", "ef", 12, PR_TRUE, 4 },
  1.2764 +          { "abcdefgabcdefg", "gh", 12, PR_FALSE, 0 },
  1.2765 +          { "abcdabcabcdabc", "bc", 5, PR_TRUE, 1 },
  1.2766 +          { "abcdabcabcdabc", "bc", 6, PR_TRUE, 1 },
  1.2767 +          { "abcdabcabcdabc", "bc", 7, PR_TRUE, 1 },
  1.2768 +          { "abcdefgabcdefg", "abcdefg", 6, PR_FALSE, 0 },
  1.2769 +          { "abcdefgabcdefg", "abcdefg", 7, PR_TRUE, 0 },
  1.2770 +          { "abcdefgabcdefg", "abcdefg", 8, PR_TRUE, 0 },
  1.2771 +          { "ABCDEFG", "a", 5, PR_TRUE, 0 },
  1.2772 +          { "ABCDEFG", "c", 5, PR_TRUE, 2 },
  1.2773 +          { "ABCDEFG", "e", 5, PR_TRUE, 4 },
  1.2774 +          { "ABCDEFG", "g", 5, PR_FALSE, 0 },
  1.2775 +          { "ABCDEFG", "i", 5, PR_FALSE, 0 },
  1.2776 +          { "ABCDEFG", "ab", 5, PR_TRUE, 0 },
  1.2777 +          { "ABCDEFG", "cd", 5, PR_TRUE, 2 },
  1.2778 +          { "ABCDEFG", "ef", 5, PR_FALSE, 0 },
  1.2779 +          { "ABCDEFG", "gh", 5, PR_FALSE, 0 },
  1.2780 +          { "ABCDABC", "bc", 5, PR_TRUE, 1 },
  1.2781 +          { "ABCDABC", "bc", 6, PR_TRUE, 1 },
  1.2782 +          { "ABCDABC", "bc", 7, PR_TRUE, 1 },
  1.2783 +          { "ABCDEFG", "abcdefg", 6, PR_FALSE, 0 },
  1.2784 +          { "ABCDEFG", "abcdefg", 7, PR_TRUE, 0 },
  1.2785 +          { "ABCDEFG", "abcdefg", 8, PR_TRUE, 0 },
  1.2786 +          { "ABCDEFGABCDEFG", "a", 12, PR_TRUE, 0 },
  1.2787 +          { "ABCDEFGABCDEFG", "c", 12, PR_TRUE, 2 },
  1.2788 +          { "ABCDEFGABCDEFG", "e", 12, PR_TRUE, 4 },
  1.2789 +          { "ABCDEFGABCDEFG", "g", 12, PR_TRUE, 6 },
  1.2790 +          { "ABCDEFGABCDEFG", "i", 12, PR_FALSE, 0 },
  1.2791 +          { "ABCDEFGABCDEFG", "ab", 12, PR_TRUE, 0 },
  1.2792 +          { "ABCDEFGABCDEFG", "cd", 12, PR_TRUE, 2 },
  1.2793 +          { "ABCDEFGABCDEFG", "ef", 12, PR_TRUE, 4 },
  1.2794 +          { "ABCDEFGABCDEFG", "gh", 12, PR_FALSE, 0 },
  1.2795 +          { "ABCDABCABCDABC", "bc", 5, PR_TRUE, 1 },
  1.2796 +          { "ABCDABCABCDABC", "bc", 6, PR_TRUE, 1 },
  1.2797 +          { "ABCDABCABCDABC", "bc", 7, PR_TRUE, 1 },
  1.2798 +          { "ABCDEFGABCDEFG", "abcdefg", 6, PR_FALSE, 0 },
  1.2799 +          { "ABCDEFGABCDEFG", "abcdefg", 7, PR_TRUE, 0 },
  1.2800 +          { "ABCDEFGABCDEFG", "abcdefg", 8, PR_TRUE, 0 }
  1.2801 +      };
  1.2802 +
  1.2803 +    int i;
  1.2804 +
  1.2805 +    printf("Test 029 (PL_strncasestr) ..."); fflush(stdout);
  1.2806 +
  1.2807 +    for( i = 0; i < sizeof(array)/sizeof(array[0]); i++ )
  1.2808 +    {
  1.2809 +        char *rv = PL_strncasestr(array[i].str, array[i].sub, array[i].max);
  1.2810 +
  1.2811 +        if( PR_FALSE == array[i].ret )
  1.2812 +        {
  1.2813 +            if( (char *)0 != rv )
  1.2814 +            {
  1.2815 +                printf("FAIL %d: %s,%s/%lu -> %.32s, not null\n", i,
  1.2816 +                       array[i].str ? array[i].str : "(null)",
  1.2817 +                       array[i].sub ? array[i].sub : "(null)",
  1.2818 +                       array[i].max, rv);
  1.2819 +                return PR_FALSE;
  1.2820 +            }
  1.2821 +        }
  1.2822 +        else
  1.2823 +        {
  1.2824 +            if( (char *)0 == rv )
  1.2825 +            {
  1.2826 +                printf("FAIL %d: %s,%s/%lu -> null, not 0x%x+%lu\n", i,
  1.2827 +                       array[i].str ? array[i].str : "(null)",
  1.2828 +                       array[i].sub ? array[i].sub : "(null)",
  1.2829 +                       array[i].max, array[i].str, array[i].off);
  1.2830 +                return PR_FALSE;
  1.2831 +            }
  1.2832 +
  1.2833 +            if( &array[i].str[ array[i].off ] != rv )
  1.2834 +            {
  1.2835 +                printf("FAIL %d: %s,%s/%lu -> 0x%x, not 0x%x+%lu\n", i, 
  1.2836 +                       array[i].str ? array[i].str : "(null)",
  1.2837 +                       array[i].sub ? array[i].sub : "(null)",
  1.2838 +                       array[i].max, rv, array[i].str, array[i].off);
  1.2839 +                return PR_FALSE;
  1.2840 +            }
  1.2841 +        }
  1.2842 +    }
  1.2843 +
  1.2844 +    printf("PASS\n");
  1.2845 +    return PR_TRUE;
  1.2846 +}
  1.2847 +
  1.2848 +/* PL_strncaserstr */
  1.2849 +PRBool test_030(void)
  1.2850 +{
  1.2851 +    static struct
  1.2852 +    {
  1.2853 +        const char *str;
  1.2854 +        const char *sub;
  1.2855 +        PRUint32    max;
  1.2856 +        PRBool      ret;
  1.2857 +        PRUint32    off;
  1.2858 +    } array[] =
  1.2859 +      {
  1.2860 +          { (const char *)0, (const char *)0, 12, PR_FALSE, 0 },
  1.2861 +          { (const char *)0, "blah", 12, PR_FALSE, 0 },
  1.2862 +          { "blah-de-blah", (const char *)0, 12, PR_FALSE, 0 },
  1.2863 +          { "blah-de-blah", "blah", 0, PR_FALSE, 0 },
  1.2864 +          { "blah-de-blah", "blah", 2, PR_FALSE, 0 },
  1.2865 +          { "blah-de-blah", "blah", 3, PR_FALSE, 0 },
  1.2866 +          { "blah-de-blah", "blah", 4, PR_TRUE, 0 },
  1.2867 +          { "blah-de-blah", "blah", 5, PR_TRUE, 0 },
  1.2868 +          { "blah-de-blah", "blah", 11, PR_TRUE, 0 },
  1.2869 +          { "blah-de-blah", "blah", 12, PR_TRUE, 8 },
  1.2870 +          { "blah-de-blah", "blah", 13, PR_TRUE, 8 },
  1.2871 +          { "", "blah", 12, PR_FALSE, 0 },
  1.2872 +          { "blah-de-blah", "", 12, PR_FALSE, 0 },
  1.2873 +          { "abcdefg", "a", 5, PR_TRUE, 0 },
  1.2874 +          { "abcdefg", "c", 5, PR_TRUE, 2 },
  1.2875 +          { "abcdefg", "e", 5, PR_TRUE, 4 },
  1.2876 +          { "abcdefg", "g", 5, PR_FALSE, 0 },
  1.2877 +          { "abcdefg", "i", 5, PR_FALSE, 0 },
  1.2878 +          { "abcdefg", "ab", 5, PR_TRUE, 0 },
  1.2879 +          { "abcdefg", "cd", 5, PR_TRUE, 2 },
  1.2880 +          { "abcdefg", "ef", 5, PR_FALSE, 0 },
  1.2881 +          { "abcdefg", "gh", 5, PR_FALSE, 0 },
  1.2882 +          { "abcdabc", "bc", 5, PR_TRUE, 1 },
  1.2883 +          { "abcdabc", "bc", 6, PR_TRUE, 1 },
  1.2884 +          { "abcdabc", "bc", 7, PR_TRUE, 5 },
  1.2885 +          { "abcdefg", "abcdefg", 6, PR_FALSE, 0 },
  1.2886 +          { "abcdefg", "abcdefg", 7, PR_TRUE, 0 },
  1.2887 +          { "abcdefg", "abcdefg", 8, PR_TRUE, 0 },
  1.2888 +          { "abcdefgabcdefg", "a", 12, PR_TRUE, 7 },
  1.2889 +          { "abcdefgabcdefg", "c", 12, PR_TRUE, 9 },
  1.2890 +          { "abcdefgabcdefg", "e", 12, PR_TRUE, 11 },
  1.2891 +          { "abcdefgabcdefg", "g", 12, PR_TRUE, 6 },
  1.2892 +          { "abcdefgabcdefg", "i", 12, PR_FALSE, 0 },
  1.2893 +          { "abcdefgabcdefg", "ab", 12, PR_TRUE, 7 },
  1.2894 +          { "abcdefgabcdefg", "cd", 12, PR_TRUE, 9 },
  1.2895 +          { "abcdefgabcdefg", "ef", 12, PR_TRUE, 4 },
  1.2896 +          { "abcdefgabcdefg", "gh", 12, PR_FALSE, 0 },
  1.2897 +          { "abcdabcabcdabc", "bc", 12, PR_TRUE, 8 },
  1.2898 +          { "abcdabcabcdabc", "bc", 13, PR_TRUE, 8 },
  1.2899 +          { "abcdabcabcdabc", "bc", 14, PR_TRUE, 12 },
  1.2900 +          { "abcdefgabcdefg", "abcdefg", 13, PR_TRUE, 0 },
  1.2901 +          { "abcdefgabcdefg", "abcdefg", 14, PR_TRUE, 7 },
  1.2902 +          { "abcdefgabcdefg", "abcdefg", 15, PR_TRUE, 7 },
  1.2903 +          { "ABCDEFG", "a", 5, PR_TRUE, 0 },
  1.2904 +          { "ABCDEFG", "c", 5, PR_TRUE, 2 },
  1.2905 +          { "ABCDEFG", "e", 5, PR_TRUE, 4 },
  1.2906 +          { "ABCDEFG", "g", 5, PR_FALSE, 0 },
  1.2907 +          { "ABCDEFG", "i", 5, PR_FALSE, 0 },
  1.2908 +          { "ABCDEFG", "ab", 5, PR_TRUE, 0 },
  1.2909 +          { "ABCDEFG", "cd", 5, PR_TRUE, 2 },
  1.2910 +          { "ABCDEFG", "ef", 5, PR_FALSE, 0 },
  1.2911 +          { "ABCDEFG", "gh", 5, PR_FALSE, 0 },
  1.2912 +          { "ABCDABC", "bc", 5, PR_TRUE, 1 },
  1.2913 +          { "ABCDABC", "bc", 6, PR_TRUE, 1 },
  1.2914 +          { "ABCDABC", "bc", 7, PR_TRUE, 5 },
  1.2915 +          { "ABCDEFG", "abcdefg", 6, PR_FALSE, 0 },
  1.2916 +          { "ABCDEFG", "abcdefg", 7, PR_TRUE, 0 },
  1.2917 +          { "ABCDEFG", "abcdefg", 8, PR_TRUE, 0 },
  1.2918 +          { "ABCDEFGABCDEFG", "a", 12, PR_TRUE, 7 },
  1.2919 +          { "ABCDEFGABCDEFG", "c", 12, PR_TRUE, 9 },
  1.2920 +          { "ABCDEFGABCDEFG", "e", 12, PR_TRUE, 11 },
  1.2921 +          { "ABCDEFGABCDEFG", "g", 12, PR_TRUE, 6 },
  1.2922 +          { "ABCDEFGABCDEFG", "i", 12, PR_FALSE, 0 },
  1.2923 +          { "ABCDEFGABCDEFG", "ab", 12, PR_TRUE, 7 },
  1.2924 +          { "ABCDEFGABCDEFG", "cd", 12, PR_TRUE, 9 },
  1.2925 +          { "ABCDEFGABCDEFG", "ef", 12, PR_TRUE, 4 },
  1.2926 +          { "ABCDEFGABCDEFG", "gh", 12, PR_FALSE, 0 },
  1.2927 +          { "ABCDABCABCDABC", "bc", 12, PR_TRUE, 8 },
  1.2928 +          { "ABCDABCABCDABC", "bc", 13, PR_TRUE, 8 },
  1.2929 +          { "ABCDABCABCDABC", "bc", 14, PR_TRUE, 12 },
  1.2930 +          { "ABCDEFGABCDEFG", "abcdefg", 13, PR_TRUE, 0 },
  1.2931 +          { "ABCDEFGABCDEFG", "abcdefg", 14, PR_TRUE, 7 },
  1.2932 +          { "ABCDEFGABCDEFG", "abcdefg", 15, PR_TRUE, 7 }
  1.2933 +      };
  1.2934 +
  1.2935 +    int i;
  1.2936 +
  1.2937 +    printf("Test 030 (PL_strncaserstr)..."); fflush(stdout);
  1.2938 +
  1.2939 +    for( i = 0; i < sizeof(array)/sizeof(array[0]); i++ )
  1.2940 +    {
  1.2941 +        char *rv = PL_strncaserstr(array[i].str, array[i].sub, array[i].max);
  1.2942 +
  1.2943 +        if( PR_FALSE == array[i].ret )
  1.2944 +        {
  1.2945 +            if( (char *)0 != rv )
  1.2946 +            {
  1.2947 +                printf("FAIL %d: %s,%s/%lu -> %.32s, not null\n", i,
  1.2948 +                       array[i].str ? array[i].str : "(null)",
  1.2949 +                       array[i].sub ? array[i].sub : "(null)",
  1.2950 +                       array[i].max, rv);
  1.2951 +                return PR_FALSE;
  1.2952 +            }
  1.2953 +        }
  1.2954 +        else
  1.2955 +        {
  1.2956 +            if( (char *)0 == rv )
  1.2957 +            {
  1.2958 +                printf("FAIL %d: %s,%s/%lu -> null, not 0x%x+%lu\n", i,
  1.2959 +                       array[i].str ? array[i].str : "(null)",
  1.2960 +                       array[i].sub ? array[i].sub : "(null)",
  1.2961 +                       array[i].max, array[i].str, array[i].off);
  1.2962 +                return PR_FALSE;
  1.2963 +            }
  1.2964 +
  1.2965 +            if( &array[i].str[ array[i].off ] != rv )
  1.2966 +            {
  1.2967 +                printf("FAIL %d: %s,%s/%lu -> 0x%x, not 0x%x+%lu\n", i, 
  1.2968 +                       array[i].str ? array[i].str : "(null)",
  1.2969 +                       array[i].sub ? array[i].sub : "(null)",
  1.2970 +                       array[i].max, rv, array[i].str, array[i].off);
  1.2971 +                return PR_FALSE;
  1.2972 +            }
  1.2973 +        }
  1.2974 +    }
  1.2975 +
  1.2976 +    printf("PASS\n");
  1.2977 +    return PR_TRUE;
  1.2978 +}
  1.2979 +
  1.2980 +/* PL_strtok_r */
  1.2981 +PRBool test_031(void)
  1.2982 +{
  1.2983 +    static const char *tokens[] = {
  1.2984 +        "wtc", "relyea", "nelsonb", "jpierre", "nicolson",
  1.2985 +        "ian.mcgreer", "kirk.erickson", "sonja.mirtitsch", "mhein"
  1.2986 +    };
  1.2987 +
  1.2988 +    static const char *seps[] = {
  1.2989 +        ", ", ",", " ", "\t", ",,,", " ,", "    ", " \t\t", ","
  1.2990 +    };
  1.2991 +
  1.2992 +    static const char s2[] = ", \t";
  1.2993 +
  1.2994 +    char string[ 1024 ];
  1.2995 +    char *s1;
  1.2996 +    char *token;
  1.2997 +    char *lasts;
  1.2998 +    unsigned int i;
  1.2999 +
  1.3000 +    printf("Test 031 (PL_strtok_r)    ..."); fflush(stdout);
  1.3001 +
  1.3002 +    /* Build the string. */
  1.3003 +    string[0] = '\0';
  1.3004 +    for( i = 0; i < sizeof(tokens)/sizeof(tokens[0]); i++ )
  1.3005 +    {
  1.3006 +        PL_strcat(string, tokens[i]);
  1.3007 +        PL_strcat(string, seps[i]);
  1.3008 +    }
  1.3009 +    
  1.3010 +    /* Scan the string for tokens. */
  1.3011 +    i = 0;
  1.3012 +    s1 = string;
  1.3013 +    while( (token = PL_strtok_r(s1, s2, &lasts)) != NULL)
  1.3014 +    {
  1.3015 +        if( PL_strcmp(token, tokens[i]) != 0 )
  1.3016 +        {
  1.3017 +            printf("FAIL wrong token scanned\n");
  1.3018 +            return PR_FALSE;
  1.3019 +        }
  1.3020 +        i++;
  1.3021 +        s1 = NULL;
  1.3022 +    }
  1.3023 +    if( i != sizeof(tokens)/sizeof(tokens[0]) )
  1.3024 +    {
  1.3025 +        printf("FAIL wrong number of tokens scanned\n");
  1.3026 +        return PR_FALSE;
  1.3027 +    }
  1.3028 +
  1.3029 +    printf("PASS\n");
  1.3030 +    return PR_TRUE;
  1.3031 +}
  1.3032 +
  1.3033 +int
  1.3034 +main
  1.3035 +(
  1.3036 +    int     argc,
  1.3037 +    char   *argv[]
  1.3038 +)
  1.3039 +{
  1.3040 +    printf("Testing the Portable Library string functions:\n");
  1.3041 +
  1.3042 +    if( 1
  1.3043 +        && test_001()
  1.3044 +        && test_001()
  1.3045 +        && test_002()
  1.3046 +        && test_003()
  1.3047 +        && test_004()
  1.3048 +        && test_005()
  1.3049 +        && test_006()
  1.3050 +        && test_007()
  1.3051 +        && test_008()
  1.3052 +        && test_009()
  1.3053 +        && test_010()
  1.3054 +        && test_011()
  1.3055 +        && test_012()
  1.3056 +        && test_013()
  1.3057 +        && test_014()
  1.3058 +        && test_015()
  1.3059 +        && test_016()
  1.3060 +        && test_017()
  1.3061 +        && test_018()
  1.3062 +        && test_019()
  1.3063 +        && test_020()
  1.3064 +        && test_021()
  1.3065 +        && test_022()
  1.3066 +        && test_023()
  1.3067 +        && test_024()
  1.3068 +        && test_025()
  1.3069 +        && test_026()
  1.3070 +        && test_027()
  1.3071 +        && test_028()
  1.3072 +        && test_029()
  1.3073 +        && test_030()
  1.3074 +        && test_031()
  1.3075 +      )
  1.3076 +    {
  1.3077 +        printf("Suite passed.\n");
  1.3078 +        return 0;
  1.3079 +    }
  1.3080 +    else
  1.3081 +    {
  1.3082 +        printf("Suite failed.\n");
  1.3083 +        return 1;
  1.3084 +    }
  1.3085 +
  1.3086 +    /*NOTREACHED*/
  1.3087 +}

mercurial