diff --git a/psys/include/p2c/strings.h b/psys/include/p2c/strings.h index 36ff0986ad4224e14af3f2944739e8664cd3c289..9ce876b10c33916dd4dfc980103b9a9c0b22d81d 100644 --- a/psys/include/p2c/strings.h +++ b/psys/include/p2c/strings.h @@ -1,12 +1,21 @@ #ifndef P2C_STRING_H #define P2C_STRING_H -void strsafeappend(char *s, char *s2); +#include <p2c/p2c.h> + +/** + * Append the second string to the first. + * + * DEPRECATED : use strcat instead + */ +void strsafeappend(char *s, char *s2) DEPRECATED; + //void strappendc(char *s, int ch); + char *strupper (char *result, char *s); char *strlower (char *result, char *s); char *strpart (char *result, char *s, long fist, long last); -char *strlast (char *result, char *s, long num); +char *strlast (char *result, char *s, size_t num); char *strljust (char *result, char *s, long wid); char *strrjust (char *result, char *s, long wid); char *strcjust (char *result, char *s, long wid); @@ -14,27 +23,27 @@ int strbegins (char *s1, char *s2); int strends (char *s1, char *s2); int strcibegins (char *s1, char *s2); int strciends (char *s1, char *s2); -long strsubcmp (long n, char *s1, long i1, char *s2, long i2); -int strcisubcmp (long n, char *s1, long i1, char *s2, long i2); -void strsubst (char *repl, char *s, long index, long size); +int strsubcmp (size_t n, char *s1, size_t i1, char *s2, size_t i2); +int strcisubcmp (size_t n, char *s1, size_t i1, char *s2, size_t i2); +void strsubst (char *repl, char *s, size_t index, size_t size); char *strint (char *result, long i); char *strint2 (char *result, long i, long w); char *streal (char *result, double r); char *strchar (char *result, int ch); long strreadint (char *s); double strreadreal (char *s); -long strposb (char *s1, char *s2, long i); -long strposc (char *s1, char ch, long i); -long strposcset (char *s1, char *s2, long i); -long strposbcset (char *s1, char *s2, long i); -long strpcipos2 (char *s1, char *s2, long i); -long strpciposb (char *s1, char *s2, long i); +size_t strposb (char *s1, char *s2, ptrdiff_t i); +size_t strposc (char *s1, char ch, ptrdiff_t i); +size_t strposcset (char *s1, char *s2, size_t i); +size_t strposbcset (char *s1, char *s2, size_t i); +size_t strpcipos2 (char *s1, char *s2, size_t i); +size_t strpciposb (char *s1, char *s2, size_t i); int strpcontains (char *s1, char *s2); int strsubset (char *s1, char *s2); int strcommon (char *s1, char *s2); -long strlenv (char *s); +size_t strlenv (char *s); char *strhex (char * Result, long i, long w); -char *strbinary (char *Result, long i, long w); +char *strbinary (char *Result, long i, size_t w); char *stadate (char *Result, char *opts); void strword (char *s, char *s2); void strword2 (char *s, char *s2); diff --git a/psys/src/strings.c b/psys/src/strings.c index 2dbc1c1faf0e662ea4f7f72860cfa0fad37c980e..24a78846039a6ff055cee984bde12938ac4b8080 100644 --- a/psys/src/strings.c +++ b/psys/src/strings.c @@ -10,7 +10,7 @@ void strsafeappend (char *s, char *s2) s += 255; while(cp < s && *s2) *cp++ = *s2++; - *cp = 0; + *cp = '\0'; } char *strupper(char *result, char *s) @@ -18,7 +18,7 @@ char *strupper(char *result, char *s) char *d = result; while (*s) *d++ = toupper(*s++); - *d = 0; + *d = '\0'; return result; } @@ -27,7 +27,7 @@ char *strlower(char *result, char *s) char *d = result; while (*s) *d++ = tolower(*s++); - *d = 0; + *d = '\0'; return result; } @@ -36,34 +36,42 @@ char *strpart(char *result, char *s, long first, long last) return strsub(result, s, first, last-first+1); } -char *strlast(char *result, char *s, long num) +char *strlast(char *result, char *s, size_t num) { - char *cp = s + strlen(s) - num; + ptrdiff_t diff = strlen(s) - num; + char *cp = s + diff; if (cp <= s) return strcpy(result, s); else return strcpy(result, cp); } -char *strjust(char *result, char *s, long wid) +char *strjust(char *result, char *s, size_t wid) { - int len = strlen(s); - int wid2; + size_t len = strlen(s); + ptrdiff_t wid2; char *cp = result; if (wid > 255) wid = 255; + wid -= len; + if (wid <=0) return strcpy(result, s); + wid2 = wid >> 1; while (--wid2 >= 0) *cp++ = ' '; + while (*s) *cp++ = *s++; - wid2 = (wid +1) >> 1; + + wid2 = (wid + 1) >> 1; + while (--wid2 >= 0) *cp++ = ' '; + *cp = 0; return result; } @@ -71,7 +79,7 @@ char *strjust(char *result, char *s, long wid) int strbegins(char *s1, char *s2) { while (*s2) - if (*s1++ != *s2++) + if (*s1 == '\0' || *s1++ != *s2++) return false; return true; } @@ -95,7 +103,7 @@ int strcibegins(char *s1, char *s2) int strciends(char *s1, char *s2) { - int skip = strlen(s1) - strlen(s2); + ptrdiff_t skip = strlen(s1) - strlen(s2); if (skip < 0) return 0; @@ -112,12 +120,12 @@ int strcicmp(char *s1, char *s2) { if(*s1++ != *s2++) { - if(!s2[-1]) + if(s2[-1] == '\0') return 1; c1 = toupper(s1[-1]); c2 = toupper(s2[-1]); if(c1 != c2) - return c1 -c2; + return c1 - c2; } } if (*s2) @@ -125,7 +133,7 @@ int strcicmp(char *s1, char *s2) return 0; } -long strsubcmp(long n, char *s1, long i1, char *s2, long i2) +int strsubcmp(size_t n, char *s1, size_t i1, char *s2, size_t i2) { if (i1 <= 0) s1 = (char *) ""; if (i2 <= 0) s2 = (char *) ""; @@ -148,7 +156,7 @@ long strsubcmp(long n, char *s1, long i1, char *s2, long i2) return strncmp(s1, s2, n); } -int strcisubcmp(long n, char * s1, long i1, char * s2, long i2) +int strcisubcmp(size_t n, char * s1, size_t i1, char * s2, size_t i2) { if (i1 <= 0) s1 = (char *) ""; if (i2 <= 0) s2 = (char *) ""; @@ -168,7 +176,7 @@ int strcisubcmp(long n, char * s1, long i1, char * s2, long i2) break; } } - while (--n >= 0) + while (n-- > 0) { if (toupper(*s1++) != toupper(*s2++)) return 0; @@ -176,18 +184,12 @@ int strcisubcmp(long n, char * s1, long i1, char * s2, long i2) return 1; } -void strsubst(char *repl, char *s, long index, long size) +void strsubst(char *repl, char *s, size_t index, size_t size) { - int len = strlen(repl); + size_t len = strlen(repl); s += index - 1; - if (size < 0) - { - char* cp; - for (cp = s + strlen(s); cp >= s; cp--) - *cp = cp[size]; - } - else if (size > 0) + if (size > 0) { char *cp; for (cp = s; (*cp = cp[size]); cp++) ; @@ -204,13 +206,14 @@ char *strint2(char *res, long i, long w) return res; } -long strposb(char *s1, char *s2, long i) +size_t strposb(char *s1, char *s2, ptrdiff_t i) { - int len1 = strlen(s1); - int len2 = strlen(s2); + size_t len1 = strlen(s1); + size_t len2 = strlen(s2); + ptrdiff_t diff = len1 - len2; - if (--i > len1 - len2) - i = len1 - len2; + if (--i > diff) + i = diff; if (i < 0 || !len2) return 0; while (i > 0 && strncmp(s1 +i, s2, len2)) @@ -218,7 +221,7 @@ long strposb(char *s1, char *s2, long i) return i+1; } -long strposc (char *s1, char ch, long i) +size_t strposc (char *s1, char ch, ptrdiff_t i) { char *cp = s1; @@ -233,10 +236,10 @@ long strposc (char *s1, char ch, long i) return 0; } -long strcipos2(char *s1, char *s2, long i) +size_t strcipos2(char *s1, char *s2, ptrdiff_t i) { char *cp = s1; - int len = strlen(s2); + size_t len = strlen(s2); if (i <= 0 || ! len) return 0; @@ -249,20 +252,20 @@ long strcipos2(char *s1, char *s2, long i) return 0; } -long strciposb(char *s1, char *s2, long i) +size_t strciposb(char *s1, char *s2, ptrdiff_t i) { - int len = strlen(s1) - strlen(s2); + ptrdiff_t len = strlen(s1) - strlen(s2); if(--i > len) i = len; - if (i < 0 || !*s2) + if (!*s2) return 0; while (i >= 0 && !! strcibegins(s1 + i, s2)) i--; return i + 1; } -long strposcset(char *s1, char *s2, long i) +size_t strposcset(char *s1, char *s2, size_t i) { char *cp = s1; char *cp2; @@ -283,19 +286,15 @@ long strposcset(char *s1, char *s2, long i) return 0; } -long strposbcset(char *s1, char *s2, long i) +size_t strposbcset(char *s1, char *s2, size_t i) { char *cp2; char ch; char ch2; - int len; - - len = strlen(s1); + size_t len = strlen(s1); if (i >= len) i = len; - if (i <= 0) - i = 0; - while (--i >= 0) + while (i-- > 0) { ch = s1[i]; for (cp2 =s2; (ch2 = *cp2); cp2++) @@ -308,12 +307,12 @@ long strposbcset(char *s1, char *s2, long i) int strsubset( char *s1, char *s2) { char *cp; - char* ch; - char *ch2; + char ch; + char ch2; - while (ch = *s1++) + while ((ch = *s1++)) { - for (cp = s2; (ch2 = *s2++) != ch; cp++) + for (cp = s2; (ch2 = *(s2++)) != ch; cp++) if (!ch2) return 0; } @@ -325,9 +324,9 @@ int strcommon(char *s1, char *s2) return strsubset(s1, s2) && strsubset(s2,s1); } -long strlenv(char *s1) +size_t strlenv(char *s1) { - int len = 0; + size_t len = 0; char ch; while ((ch = *s1++)) { @@ -338,8 +337,8 @@ long strlenv(char *s1) break; case 8: - if (--len < 0) - ++len; + if (len > 0) + len--; break; case 9: len = (len | 7) + 1; @@ -350,7 +349,7 @@ long strlenv(char *s1) break; default: - ++ len; + ++len; } } return len; @@ -359,13 +358,13 @@ long strlenv(char *s1) char *strhex(char *res, long i, long w) { if (w < 1 || w > 8) - sprintf(res, "%IIX", i); + sprintf(res, "%lX", i); else - sprintf(res, "%.*IX", (int)w, i); + sprintf(res, "%i.%lX", (int)w, i); return res; } -char *strbinary(char *res, long i, long w) +char *strbinary(char *res, long i, size_t w) { if (w < 1 || w > 32) { @@ -398,7 +397,7 @@ char *strdate(char *res, char *opts) /* ignore opts for now */ { time_t t = time(NULL); strcpy(res, (char*) ctime(&t)); - res[strlen(res)-1] = 0; /* change the \n to a NULdL */ + res[strlen(res)-1] = '\0'; /* change the \n to a "\0" (NULL character) */ return res; } @@ -411,7 +410,7 @@ void strword(char *s, char *word) while (*s1 == ' ') s1++; while (*s1) *s++ = *s1++; - *s = 0; + *s = '\0'; } void strword2(char* s, char* word) @@ -434,10 +433,10 @@ void strword2(char* s, char* word) *word++ = *s1++; } while (*s1 == ' ') s1++; - *word = 0; + *word = '\0'; while (*s1) *s++ = *s1++; - *s = 0; + *s = '\0'; } void strcomment(char *s, char* bracket) @@ -473,7 +472,7 @@ void strcomment(char *s, char* bracket) *cp++ = *s++; } } - *cp = 0; + *cp = '\0'; } } @@ -503,7 +502,7 @@ void strcompress(char *s, char *chars, int all) s++; } } - *cp = 0; + *cp = '\0'; } void strdispose(char **sp) @@ -515,14 +514,14 @@ void strdispose(char **sp) void strchange(char **sp, char *s) { - int len1; - int len2 = strlen(s); + size_t len1; + size_t len2 = strlen(s); if (*sp) { len1 = strlen(*sp); if (len1 != len2) { - *sp = (char *) realloc(*sp, len2 +1); + *sp = (char *) realloc(*sp, len2 + 1); } } else @@ -536,7 +535,7 @@ void strchange(char **sp, char *s) char *strcpy_overlap(char *dst, char *src) { - int i = 0; + size_t i = 0; do { dst[i] = src[i];