Remove a few unused opr/util components
[openafs.git] / src / opr / casestrcpy.c
1 /*
2  * Copyright 2000, International Business Machines Corporation and others.
3  * All Rights Reserved.
4  *
5  * This software has been released under the terms of the IBM Public
6  * License.  For details, see the LICENSE file in the top-level source
7  * directory or online at http://www.openafs.org/dl/license10.html
8  */
9
10 #include <afsconfig.h>
11 #include <afs/param.h>
12
13 #include <roken.h>
14
15 #include <ctype.h>
16
17 #include <afs/opr.h>
18
19 /* Just like strncpy but shift-case in transit and forces null termination */
20 char *
21 lcstring(char *d, const char *s, int n)
22 {
23     char *original_d = d;
24     char c;
25
26     while (n) {
27         c = *s++;
28         if (isupper(c))
29             c = tolower(c);
30         *d++ = c;
31         if (c == 0)
32             break;              /* quit after transferring null */
33         if (--n == 0)
34             *(d - 1) = 0;       /* make sure null terminated */
35     }
36     return original_d;
37 }
38
39 char *
40 ucstring(char *d, const char *s, int n)
41 {
42     char *original_d = d;
43     char c;
44
45     while (n) {
46         c = *s++;
47         if (islower(c))
48             c = toupper(c);
49         *d++ = c;
50         if (c == 0)
51             break;
52         if (--n == 0)
53             *(d - 1) = 0;       /* make sure null terminated */
54     }
55     return original_d;
56 }
57
58 void
59 stolower(char *s)
60 {
61   while (*s) {
62         if (isupper(*s))
63             *s = tolower(*s);
64         s++;
65     }
66     return;
67 }
68
69 /* strcompose - concatenate strings passed to it.
70  * Input:
71  *   buf: storage for the composed string. Any data in it will be lost.
72  *   len: length of the buffer.
73  *   ...: variable number of string arguments. The last argument must be
74  *        (char *)NULL.
75  * Returns buf or NULL if the buffer was not sufficiently large.
76  */
77 char *
78 strcompose(char *buf, size_t len, ...)
79 {
80     va_list ap;
81     size_t spaceleft = len - 1;
82     char *str;
83     size_t slen;
84
85     if (len <= 0)
86         return NULL;
87
88     *buf = '\0';
89     va_start(ap, len);
90     str = va_arg(ap, char *);
91     while (str) {
92         slen = strlen(str);
93         if (spaceleft < slen)   /* not enough space left */
94             return NULL;
95
96         strcat(buf, str);
97         spaceleft -= slen;
98
99         str = va_arg(ap, char *);
100     }
101     va_end(ap);
102
103     return buf;
104 }