Annotation of libwww/Library/src/HTString.c, revision 1.1.1.1

1.1       timbl       1: /*             Case-independent string comparison              HTString.c
                      2: **
                      3: **     Original version came with listserv implementation.
                      4: **     Version TBL Oct 91 replaces one which modified the strings.
                      5: **     02-Dec-91 (JFG) Added stralloccopy and stralloccat
                      6: **     23 Jan 92 (TBL) Changed strallocc* to 8 char HTSAC* for VM and suchlike
                      7: **      6 Oct 92 (TBL) Moved WWW_TraceFlag in here to be in library
                      8: */
                      9: #include <ctype.h>
                     10: #include "HTUtils.h"
                     11: #include "tcp.h"
                     12: 
                     13: PUBLIC int WWW_TraceFlag = 0;  /* Global trace flag for ALL W3 code */
                     14: 
                     15: #ifndef VC
                     16: #define VC "unknown"
                     17: #endif
                     18: 
                     19: PUBLIC CONST char * HTLibraryVersion = VC; /* String for help screen etc */
                     20: 
                     21: #ifndef VM             /* VM has these already it seems */
                     22:        
                     23: /*     Strings of any length
                     24: **     ---------------------
                     25: */
                     26: PUBLIC int strcasecomp ARGS2 (CONST char*,a, CONST char *,b)
                     27: {
                     28:        CONST char *p =a;
                     29:        CONST char *q =b;
                     30:        for(p=a, q=b; *p && *q; p++, q++) {
                     31:            int diff = TOLOWER(*p) - TOLOWER(*q);
                     32:            if (diff) return diff;
                     33:        }
                     34:        if (*p) return 1;       /* p was longer than q */
                     35:        if (*q) return -1;      /* p was shorter than q */
                     36:        return 0;               /* Exact match */
                     37: }
                     38: 
                     39: 
                     40: /*     With count limit
                     41: **     ----------------
                     42: */
                     43: PUBLIC int strncasecomp ARGS3(CONST char*,a, CONST char *,b, int,n)
                     44: {
                     45:        CONST char *p =a;
                     46:        CONST char *q =b;
                     47:        
                     48:        for(p=a, q=b;; p++, q++) {
                     49:            int diff;
                     50:            if (p == a+n) return 0;     /*   Match up to n characters */
                     51:            if (!(*p && *q)) return *p - *q;
                     52:            diff = TOLOWER(*p) - TOLOWER(*q);
                     53:            if (diff) return diff;
                     54:        }
                     55:        /*NOTREACHED*/
                     56: }
                     57: #endif
                     58: 
                     59: /*     Allocate a new copy of a string, and returns it
                     60: */
                     61: PUBLIC char * HTSACopy
                     62:   ARGS2 (char **,dest, CONST char *,src)
                     63: {
                     64:   if (*dest) free(*dest);
                     65:   if (! src)
                     66:     *dest = NULL;
                     67:   else {
                     68:     *dest = (char *) malloc (strlen(src) + 1);
                     69:     if (*dest == NULL) outofmem(__FILE__, "HTSACopy");
                     70:     strcpy (*dest, src);
                     71:   }
                     72:   return *dest;
                     73: }
                     74: 
                     75: PUBLIC char * HTSACat
                     76:   ARGS2 (char **,dest, CONST char *,src)
                     77: {
                     78:   if (src && *src) {
                     79:     if (*dest) {
                     80:       int length = strlen (*dest);
                     81:       *dest = (char *) realloc (*dest, length + strlen(src) + 1);
                     82:       if (*dest == NULL) outofmem(__FILE__, "HTSACat");
                     83:       strcpy (*dest + length, src);
                     84:     } else {
                     85:       *dest = (char *) malloc (strlen(src) + 1);
                     86:       if (*dest == NULL) outofmem(__FILE__, "HTSACat");
                     87:       strcpy (*dest, src);
                     88:     }
                     89:   }
                     90:   return *dest;
                     91: }

Webmaster