equal
deleted
inserted
replaced
183 } |
183 } |
184 |
184 |
185 /** |
185 /** |
186 * Output the data for a single parameter |
186 * Output the data for a single parameter |
187 */ |
187 */ |
188 static err_t str_format_param (char **buf, size_t *buf_size, const char *name, const char *flags, str_format_cb func, void *arg) |
188 static err_t str_format_param (char **buf, size_t *buf_size, const char *name, const char *flags, str_format_cb func, void *arg, error_t *err) |
189 { |
189 { |
190 const char *value; |
190 const char *value; |
191 ssize_t value_len = -1; |
191 ssize_t value_len = -1; |
192 char flag; |
192 char flag; |
193 bool use_quote = false; |
193 bool use_quote = false; |
194 err_t err; |
|
195 |
194 |
196 // look it up |
195 // look it up |
197 if ((err = func(name, &value, &value_len, arg))) |
196 if (func(name, &value, &value_len, arg, err)) |
198 return err; |
197 return PUSH_ERROR(err, &str_errors, ERR_STR_FMT_VALUE); |
199 |
198 |
200 // not found? |
199 // not found? |
201 if (!value) |
200 if (!value) |
202 return ERR_STR_FMT_NAME; |
201 return SET_ERROR(err, &str_errors, ERR_STR_FMT_NAME); |
203 |
202 |
204 // parse flags |
203 // parse flags |
205 while ((flag = *flags++)) { |
204 while ((flag = *flags++)) { |
206 switch (flag) { |
205 switch (flag) { |
207 case 'r': |
206 case 'r': |
210 |
209 |
211 break; |
210 break; |
212 |
211 |
213 default: |
212 default: |
214 // unknown flag |
213 // unknown flag |
215 return ERR_STR_FMT_FLAG; |
214 return SET_ERROR(err, &str_errors, ERR_STR_FMT_FLAG); |
216 |
215 |
217 } |
216 } |
218 } |
217 } |
219 |
218 |
220 // output value |
219 // output value |