Changeset 2856


Ignore:
Timestamp:
Feb 10, 2012, 9:31:25 PM (4 years ago)
Author:
wmb
Message:

Client library - added strstr and strcasestr, and improved the implementation of some existing functions to generate better code.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • clients/lib/strings.c

    r2286 r2856  
    55#include "1275.h"
    66
     7#define ISUPPER(c) ((c) >= 'A' && (c) <= 'Z')
     8#define TOLOWER(c) ((c) + 'a' - 'A')
     9
    710int
    811strcmp(const char *s, const char *t)
    912{
    10         int i;
    11 
    12         for (i = 0; s[i] == t[i]; ++i)
    13                 if (s[i] == '\0')
    14                         return (0);
    15         return((int) (s[i] - t[i]));
     13        int diff = 0;
     14        int i;
     15
     16        for (i = 0; 1; ++i) {
     17                diff = s[i] - t[i];
     18                if (diff || s[i] == '\0')
     19                        break;
     20        }
     21        return(diff);
    1622}
    1723
     
    1925strncmp(const char *s, const char *t, int len)
    2026{
    21         int i;
    22 
    23         for (i = 0; (s[i] == t[i]) && (i != len); ++i)
    24                 if (s[i] == '\0')
    25                         return (0);
    26         if (i == len)
    27                 return(0);
    28         return((int) (s[i] - t[i]));
     27        int diff = 0;
     28        int i;
     29
     30        for (i = 0; i != len; ++i) {
     31                diff = s[i] - t[i];
     32                if (diff || s[i] == '\0')
     33                        break;
     34        }
     35
     36        return(diff);
     37}
     38
     39int
     40strcasecmp(const char *s, const char *t)
     41{
     42        char sc, tc;
     43        int diff = 0;
     44        int i;
     45
     46        for (i = 0; 1; i++) {
     47                sc = s[i];
     48                tc = t[i];
     49                if (ISUPPER(sc))
     50                        sc = TOLOWER(sc);
     51                if (ISUPPER(tc))
     52                        tc = TOLOWER(tc);
     53                diff = sc - tc;
     54                if (diff || sc == '\0')
     55                        break;
     56        }
     57        return diff;
     58}
     59
     60int
     61strncasecmp(const char *s, const char *t, int len)
     62{
     63        char sc, tc;
     64        int diff = 0;
     65        int i;
     66
     67        for (i=0; i < len; i++) {
     68                sc = s[i];
     69                if (ISUPPER(sc))
     70                        sc = TOLOWER(sc);
     71                tc = t[i];
     72                if (ISUPPER(tc))
     73                        tc = TOLOWER(tc);
     74                diff = sc - tc;
     75                if (diff || sc == '\0')
     76                        break;
     77        }
     78        return diff;
    2979}
    3080
     
    3686        for (i = 0; s[i] != '\0'; ++i)
    3787                ;
    38         return((int) i);
     88        return i;
    3989}
    4090
     
    4696        for (i = 0; i < maxlen && s[i] != '\0'; ++i)
    4797                ;
    48         return((int) i);
     98        return i;
    4999}
    50100
     
    56106        while (to[i] = from[i])
    57107                i += 1;
    58         return(to);
     108        return to;
    59109}
    60110
     
    69119           maxlen--;
    70120        }
    71         return(to);
     121        return to;
    72122}
    73123
     
    80130                to += 1;
    81131        strcpy(to, from);
    82         return (ret);
     132        return ret;
    83133}
    84134
     
    88138        while (*s) {
    89139                if (*s == c)
    90                         return (s);
     140                        return s;
    91141                ++s;
    92142        }
    93         return ((char *) 0);
     143        return (char *) 0;
    94144}
    95145
     
    112162        temp = saved_str;
    113163        saved_str = s;
    114         return(temp);
     164        return temp;
     165}
     166
     167char *
     168strstr(const char *haystack, const char *needle)
     169{
     170        int len = strlen(needle);
     171        char *s;
     172
     173        for (s = (char *)haystack; *s; s++)
     174                if (strncmp(s, needle, len) == 0)
     175                        return s;
     176
     177        return NULL;
     178}
     179
     180char *
     181strcasestr(const char *haystack, const char *needle)
     182{
     183        int len = strlen(needle);
     184        char *s;
     185
     186        for (s = (char *)haystack; *s; s++)
     187                if (strncasecmp(s, needle, len) == 0)
     188                        return s;
     189
     190        return NULL;
    115191}
    116192
Note: See TracChangeset for help on using the changeset viewer.