|
|
1.1 ! root 1: /* As per your license agreement, your distribution is not to be moved or copied outside the Designated Site ! 2: * without specific permission from Plum Hall Inc. ! 3: */ ! 4: ! 5: /* ! 6: * CLIB - portable replacements for various C library functions ! 7: */ ! 8: #ifndef CLIB_H ! 9: #define CLIB_H ! 10: ! 11: /* assumes you have #include'd either "defs.h" or "hodefs.h" */ ! 12: ! 13: /* ! 14: * IS_DIGIT ! 15: */ ! 16: int is_digit FN_DEF1(c, ! 17: int c) ! 18: { ! 19: return '0' <= c && c <= '9'; ! 20: } ! 21: ! 22: /* ! 23: * MEM_CMP ! 24: */ ! 25: int mem_cmp FN_DEF3(ps1, ps2, n, ! 26: const void *ps1, ! 27: const void *ps2, ! 28: int n) ! 29: { ! 30: const char *s1 = (const char *)ps1; ! 31: const char *s2 = (const char *)ps2; ! 32: for (;n > 0; --n) ! 33: { ! 34: if (*s1 != *s2) ! 35: return (UCHAR)*s1 - (UCHAR)*s2; ! 36: ++s1, ++s2; ! 37: } ! 38: return 0; ! 39: } ! 40: ! 41: /* ! 42: * STR_CMP ! 43: */ ! 44: int str_cmp FN_DEF2(s1, s2, ! 45: const char *s1, ! 46: const char *s2) ! 47: { ! 48: for (; *s1 == *s2; ++s1, ++s2) ! 49: if (*s1 == '\0') ! 50: return 0; ! 51: return (UCHAR)*s1 - (UCHAR)*s2; ! 52: } ! 53: ! 54: /* ! 55: * ST_NCMP ! 56: * Note: spelled st_ncmp to avoid 6-letter collision with st_ncpy ! 57: */ ! 58: int st_ncmp FN_DEF3(s1, s2, n, ! 59: const char *s1, ! 60: const char *s2, ! 61: int n) ! 62: { ! 63: for (; n > 0 && *s1 == *s2; ++s1, ++s2, --n) ! 64: if (*s1 == '\0') ! 65: return 0; ! 66: if (n == 0) ! 67: return 0; ! 68: else ! 69: return (UCHAR)*s1 - (UCHAR)*s2; ! 70: } ! 71: ! 72: /* ! 73: * STR_CPYE - copy string s2 to s1 (not an exact replacement for strcpy) ! 74: */ ! 75: char *str_cpye FN_DEF2(s1, s2, ! 76: char *s1, ! 77: const char *s2) ! 78: { ! 79: while ((*s1 = *s2++) != '\0') ! 80: ++s1; ! 81: return s1; ! 82: } ! 83: ! 84: /* ! 85: * STR_CAT - copy string s2 to end of s1 ! 86: */ ! 87: char *str_cat FN_DEF2(s1, s2, ! 88: char *s1, ! 89: const char *s2) ! 90: { ! 91: char *s0 = s1; ! 92: ! 93: while (*s1 != '\0') ! 94: ++s1; ! 95: while ((*s1 = *s2++) != '\0') ! 96: ++s1; ! 97: return s0; ! 98: } ! 99: ! 100: /* ! 101: * ST_NCPY - copy at most n chars of string s2 to s1 ! 102: */ ! 103: char *st_ncpy FN_DEF3(s1, s2, n, ! 104: char *s1, ! 105: const char *s2, ! 106: int n) ! 107: { ! 108: char *s0 = s1; ! 109: while (n > 0 && (*s1 = *s2++) != '\0') ! 110: --n, ++s1; ! 111: while (n-- > 0) ! 112: *s1++ = '\0'; ! 113: return s0; ! 114: } ! 115: ! 116: /* ! 117: * STR_LEN - return the length of a string ! 118: */ ! 119: int str_len FN_DEF1(s, ! 120: const char *s) ! 121: { ! 122: const char *t; ! 123: ! 124: for (t = s; *t != '\0'; ++t) ! 125: ; ! 126: return t - s; ! 127: } ! 128: ! 129: /* ! 130: * STR_STR - find occurrence of s2 in s1 ! 131: */ ! 132: const char *str_str FN_DEF2(s1, s2, ! 133: const char *s1, ! 134: const char *s2) ! 135: { ! 136: register const char *ps1, *ps2; ! 137: ! 138: if (*s2 == '\0') ! 139: return s1; ! 140: for ( ; *s1 != '\0'; ++s1) ! 141: { ! 142: if (*s1 == *s2) ! 143: { ! 144: for (ps1 = s1, ps2 = s2; *ps1 && *ps2 && *ps1 == *ps2; ++ps1, ++ps2) ! 145: ; ! 146: if (*ps2 == '\0') ! 147: return s1; ! 148: } ! 149: } ! 150: return 0; ! 151: } ! 152: /* ! 153: * STR_CSPN ! 154: */ ! 155: int str_cspn FN_DEF2(s1, s2, ! 156: char *s1, ! 157: char *s2) ! 158: { ! 159: register int i; ! 160: register char *p; ! 161: ! 162: for (i = 0; s1[i] != '\0'; ++i) ! 163: { ! 164: for (p = s2; *p != '\0'; ++p) ! 165: { ! 166: if (*p == s1[i]) ! 167: return (i); ! 168: } ! 169: } ! 170: return (i); ! 171: } ! 172: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.