]> andersk Git - moira.git/blob - lib/strs.c
make strtrim truncate string with same start if the string is all whitespace
[moira.git] / lib / strs.c
1 /*
2  *      $Source$
3  *      $Author$
4  *      $Header$
5  *
6  *      Copyright (C) 1987 by the Massachusetts Institute of Technology
7  *
8  *      Miscellaneous string functions.
9  */
10
11 #ifndef lint
12 static char *rcsid_strs_c = "$Header$";
13 #endif lint
14
15 #include <sys/types.h>
16 #include <strings.h>
17 #include <ctype.h>
18
19 extern char *malloc(), *realloc();
20
21 /*
22  * Random string functions which should be in the C library..
23  */
24
25 /*
26  * Make a copy of a string.
27  */
28 char *
29 strsave(s)
30     char *s;
31 {
32     register int len;
33     register char *p;
34     /* Kludge for sloppy string semantics */
35     if (!s) {
36             printf("NULL != \"\" !!!!\r\n");
37             p = malloc(1);
38             *p = '\0';
39             return p;
40     }
41     len = strlen(s) + 1;
42     p = malloc((u_int)len);
43     if (p) bcopy(s, p, len);
44     return p;
45 }
46 /*
47  * Trim whitespace off both ends of a string.
48  */
49 char *strtrim(save)
50     register char *save;
51 {
52     register char *t, *s;
53
54     s = save;
55     while (isspace(*s)) s++;
56     /* skip to end of string */
57     if (*s == '\0') {
58         *save = '\0';
59         return(save);
60     }
61
62     for (t = s; *t; t++) continue; 
63     while (t > s) {
64         --t;
65         if (!isspace(*t)) {
66             t++;
67             break;
68         }
69     }
70     *t = '\0';
71     return s;
72 }
73
74 /*
75  * Case insensitive string compare.
76  */
77
78 int cistrcmp(cp1, cp2)
79     char *cp1, *cp2;
80 {
81     register int c1, c2;
82     
83     do {
84         if (isupper(c1 = (*cp1++))) c1 = tolower(c1);
85         if (isupper(c2 = (*cp2++))) c2 = tolower(c2);
86         if (c1 != c2) return c1-c2;
87     } while (c1 && c2);
88     return 0;
89 }
90
This page took 0.065799 seconds and 5 git commands to generate.