]> andersk Git - moira.git/blob - lib/strs.c
don't overwrite existing '\0' with '\0' in strtrim. (lets us strtrim
[moira.git] / lib / strs.c
1 /*
2  *      $Source$
3  *      $Author$
4  *      $Header$
5  *
6  *      Copyright (C) 1987 by the Massachusetts Institute of Technology
7  *      For copying and distribution information, please see the file
8  *      <mit-copyright.h>.
9  *
10  *      Miscellaneous string functions.
11  */
12
13 #ifndef lint
14 static char *rcsid_strs_c = "$Header$";
15 #endif
16
17 #include <mit-copyright.h>
18 #include <sys/types.h>
19 #include <stdlib.h>
20 #include <string.h>
21 #include <ctype.h>
22
23 /*
24  * Random string functions which should be in the C library..
25  */
26
27 /*
28  * Make a copy of a string.
29  */
30 char *
31 strsave(s)
32     char *s;
33 {
34     register int len;
35     register char *p;
36     /* Kludge for sloppy string semantics */
37     if (!s) {
38             p = malloc(1);
39             *p = '\0';
40             return p;
41     }
42     len = strlen(s) + 1;
43     p = malloc((u_int)len);
44     if (p) memcpy(p, s, len);
45     return p;
46 }
47 /*
48  * Trim whitespace off both ends of a string.
49  */
50 char *strtrim(save)
51     register char *save;
52 {
53     register char *t, *s;
54
55     s = save;
56     while (isspace(*s)) s++;
57     /* skip to end of string */
58     if (*s == '\0') {
59         *save = '\0';
60         return(save);
61     }
62
63     for (t = s; *t; t++) continue; 
64     while (t > s) {
65         --t;
66         if (!isspace(*t)) {
67             t++;
68             break;
69         }
70     }
71     if (*t) *t = '\0';
72     return s;
73 }
74
75
76 /* Modify a string for all of the letters to be uppercase. */
77
78 char *uppercase(s)
79 char *s;
80 {
81     register char *p;
82
83     for (p = s; *p; p++)
84       if (islower(*p))
85         *p = toupper(*p);
86     return(s);
87 }
88
89
90 char *lowercase(s)
91 char *s;
92 {
93     register char *p;
94
95     for (p = s; *p; p++)
96       if (isupper(*p))
97         *p = tolower(*p);
98     return(s);
99 }
100
101
102 #ifdef NEED_STRCASECMP
103
104 /* Case independant string comparison.  Only compile this if your C 
105  * library doesn't have a local routine which is faster.
106  */
107
108 static char map[] = {
109     0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
110     16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
111     ' ', '!', '"', '#', '$', '%', '&', '\'',
112     '(', ')', '*', '+', ',', '-', '.', '/',
113     '0', '1', '2', '3', '4', '5', '6', '7',
114     '8', '9', ':', ';', '<', '=', '>', '?',
115     '@', 'a', 'b', 'c', 'd', 'e', 'f', 'g',
116     'h', 'i', 'k', 'j', 'l', 'm', 'n', 'o',
117     'p', 'q', 'r', 's', 't', 'u', 'v', 'w',
118     'x', 'y', 'z', '[', '\\', ']', '^', '_',
119     '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g',
120     'h', 'i', 'k', 'j', 'l', 'm', 'n', 'o',
121     'p', 'q', 'r', 's', 't', 'u', 'v', 'w',
122     'x', 'y', 'z', '{', '|', '}', '~', 127,
123     128, 129, 130, 131, 132, 133, 134, 135,
124     136, 137, 138, 139, 140, 141, 142, 143,
125     144, 145, 146, 147, 148, 149, 150, 151,
126     152, 153, 154, 155, 156, 157, 158, 159,
127     160, 161, 162, 163, 164, 165, 166, 167,
128     168, 169, 170, 171, 172, 173, 174, 175,
129     176, 177, 178, 179, 180, 181, 182, 183,
130     184, 185, 186, 187, 188, 189, 190, 191,
131     192, 193, 194, 195, 196, 197, 198, 199,
132     200, 201, 202, 203, 204, 205, 206, 207,
133     208, 209, 210, 211, 212, 213, 214, 215,
134     216, 217, 218, 219, 220, 221, 222, 223,
135     224, 225, 226, 227, 228, 229, 230, 231,
136     232, 233, 234, 235, 236, 237, 238, 239,
137     240, 241, 242, 243, 244, 245, 246, 247,
138     248, 249, 250, 251, 252, 253, 254, 255
139 };
140
141
142 int strcasecmp(s1, s2)
143 char *s1;
144 char *s2;
145 {
146     while (map[*s1] == map[*s2]) {
147         if (*s1 == 0)
148           return(0);
149         s1++;
150         s2++;
151     }
152     return(map[*s1] - map[*s2]);
153 }
154
155 #endif /* NEED_STRCASECMP */
This page took 0.052125 seconds and 5 git commands to generate.