Commit | Line | Data |
---|---|---|
805e021f CE |
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 | void | |
70 | stoupper(char *s) | |
71 | { | |
72 | while (*s) { | |
73 | if (islower(*s)) | |
74 | *s = toupper(*s); | |
75 | s++; | |
76 | } | |
77 | return; | |
78 | } | |
79 | ||
80 | /* strcompose - concatenate strings passed to it. | |
81 | * Input: | |
82 | * buf: storage for the composed string. Any data in it will be lost. | |
83 | * len: length of the buffer. | |
84 | * ...: variable number of string arguments. The last argument must be | |
85 | * (char *)NULL. | |
86 | * Returns buf or NULL if the buffer was not sufficiently large. | |
87 | */ | |
88 | char * | |
89 | strcompose(char *buf, size_t len, ...) | |
90 | { | |
91 | va_list ap; | |
92 | size_t spaceleft = len - 1; | |
93 | char *str; | |
94 | size_t slen; | |
95 | ||
96 | if (len <= 0) | |
97 | return NULL; | |
98 | ||
99 | *buf = '\0'; | |
100 | va_start(ap, len); | |
101 | str = va_arg(ap, char *); | |
102 | while (str) { | |
103 | slen = strlen(str); | |
104 | if (spaceleft < slen) /* not enough space left */ | |
105 | return NULL; | |
106 | ||
107 | strcat(buf, str); | |
108 | spaceleft -= slen; | |
109 | ||
110 | str = va_arg(ap, char *); | |
111 | } | |
112 | va_end(ap); | |
113 | ||
114 | return buf; | |
115 | } |