Changeset 2856


Ignore:
Timestamp:
Feb 10, 2012, 10:31:25 PM (3 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.