src/server/util/util.c

changeset 77
f1cff81e425a
parent 69
4a10bc0ee80d
child 81
d25825f37967
equal deleted inserted replaced
76:5f7660fe1562 77:f1cff81e425a
106 } 106 }
107 107
108 return nbytesdecoded; 108 return nbytesdecoded;
109 } 109 }
110 110
111 /* 111
112 NSAPI_PUBLIC int util_getboolean(const char *v, int def) { 112 /* --------------------------- util_env_create ---------------------------- */
113 if(v[0] == 'T' || v[0] == 't') { 113
114 return 1; 114
115 } 115 NSAPI_PUBLIC char **util_env_create(char **env, int n, int *pos)
116 if(v[0] == 'F' || v[0] == 'f') { 116 {
117 return 0; 117 int x;
118 } 118
119 return def; 119 if(!env) {
120 } 120 *pos = 0;
121 */ 121 return (char **) MALLOC((n + 1)*sizeof(char *));
122 }
123 else {
124 for(x = 0; (env[x]); x++);
125 env = (char **) REALLOC(env, (n + x + 1)*(sizeof(char *)));
126 *pos = x;
127 return env;
128 }
129 }
130
131
132 /* ---------------------------- util_env_free ----------------------------- */
133
134
135 NSAPI_PUBLIC void util_env_free(char **env)
136 {
137 register char **ep = env;
138
139 for(ep = env; *ep; ep++)
140 FREE(*ep);
141 FREE(env);
142 }
143
144 /* ----------------------------- util_env_str ----------------------------- */
145
146
147 NSAPI_PUBLIC char *util_env_str(const char *name, const char *value) {
148 char *t;
149
150 t = (char *) MALLOC(strlen(name)+strlen(value)+2); /* 2: '=' and '\0' */
151
152 sprintf(t, "%s=%s", name, value);
153
154 return t;
155 }
156
157
158 /* --------------------------- util_env_replace --------------------------- */
159
160
161 NSAPI_PUBLIC void util_env_replace(char **env, const char *name, const char *value)
162 {
163 int x, y, z;
164 char *i;
165
166 for(x = 0; env[x]; x++) {
167 i = strchr(env[x], '=');
168 *i = '\0';
169 if(!strcmp(env[x], name)) {
170 y = strlen(env[x]);
171 z = strlen(value);
172
173 env[x] = (char *) REALLOC(env[x], y + z + 2);
174 util_sprintf(&env[x][y], "=%s", value);
175 return;
176 }
177 *i = '=';
178 }
179 }
180
181
182 /* ---------------------------- util_env_find ----------------------------- */
183
184
185 NSAPI_PUBLIC char *util_env_find(char **env, const char *name)
186 {
187 char *i;
188 int x, r;
189
190 for(x = 0; env[x]; x++) {
191 i = strchr(env[x], '=');
192 *i = '\0';
193 r = !strcmp(env[x], name);
194 *i = '=';
195 if(r)
196 return i + 1;
197 }
198 return NULL;
199 }
200
201
202 /* ---------------------------- util_env_copy ----------------------------- */
203
204
205 NSAPI_PUBLIC char **util_env_copy(char **src, char **dst)
206 {
207 char **src_ptr;
208 int src_cnt;
209 int index;
210
211 if (!src)
212 return NULL;
213
214 for (src_cnt = 0, src_ptr = src; *src_ptr; src_ptr++, src_cnt++);
215
216 if (!src_cnt)
217 return NULL;
218
219 dst = util_env_create(dst, src_cnt, &index);
220
221 for (src_ptr = src; *src_ptr; index++, src_ptr++)
222 dst[index] = STRDUP(*src_ptr);
223 dst[index] = NULL;
224
225 return dst;
226 }
227
228 /* ----------------------------- util_sprintf ----------------------------- */
229
230 NSAPI_PUBLIC int util_vsnprintf(char *s, int n, register const char *fmt,
231 va_list args)
232 {
233 return vsnprintf(s, n, fmt, args);
234 }
235
236 NSAPI_PUBLIC int util_snprintf(char *s, int n, const char *fmt, ...)
237 {
238 va_list args;
239 va_start(args, fmt);
240 return vsnprintf(s, n, fmt, args);
241 }
242
243 NSAPI_PUBLIC int util_vsprintf(char *s, register const char *fmt, va_list args)
244 {
245 return vsprintf(s, fmt, args);
246 }
247
248 NSAPI_PUBLIC int util_sprintf(char *s, const char *fmt, ...)
249 {
250 va_list args;
251 va_start(args, fmt);
252 return vsprintf(s, fmt, args);
253 }
254
255 // TODO: asprintf
256
122 257
123 NSAPI_PUBLIC int INTutil_getboolean(const char *v, int def) { 258 NSAPI_PUBLIC int INTutil_getboolean(const char *v, int def) {
124 if(v[0] == 'T' || v[0] == 't') { 259 if(v[0] == 'T' || v[0] == 't') {
125 return 1; 260 return 1;
126 } 261 }

mercurial