| 728 | /* array generic */ |
| 729 | |
| 730 | apr_status_t md_json_geta(apr_array_header_t *a, md_json_from_cb *cb, void *baton, |
| 731 | const md_json_t *json, ...) |
| 732 | { |
| 733 | json_t *j; |
| 734 | va_list ap; |
| 735 | apr_status_t rv = APR_SUCCESS; |
| 736 | size_t index; |
| 737 | json_t *val; |
| 738 | md_json_t wrap; |
| 739 | void *element; |
| 740 | |
| 741 | va_start(ap, json); |
| 742 | j = jselect(json, ap); |
| 743 | va_end(ap); |
| 744 | |
| 745 | if (!j || !json_is_array(j)) { |
| 746 | return APR_ENOENT; |
| 747 | } |
| 748 | |
| 749 | wrap.p = a->pool; |
| 750 | json_array_foreach(j, index, val) { |
| 751 | wrap.j = val; |
| 752 | if (APR_SUCCESS == (rv = cb(&element, &wrap, wrap.p, baton))) { |
| 753 | if (element) { |
| 754 | APR_ARRAY_PUSH(a, void*) = element; |
| 755 | } |
| 756 | } |
| 757 | else if (APR_ENOENT == rv) { |
| 758 | rv = APR_SUCCESS; |
| 759 | } |
| 760 | else { |
| 761 | break; |
| 762 | } |
| 763 | } |
| 764 | return rv; |
| 765 | } |
| 766 | |
| 767 | apr_status_t md_json_seta(apr_array_header_t *a, md_json_to_cb *cb, void *baton, |
| 768 | md_json_t *json, ...) |
no test coverage detected