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 } |