32 #include "xbps_api_impl.h"
43 xbps_add_obj_to_dict(prop_dictionary_t dict, prop_object_t obj,
46 assert(prop_object_type(dict) == PROP_TYPE_DICTIONARY);
50 if (!prop_dictionary_set(dict, key, obj)) {
51 prop_object_release(dict);
56 prop_object_release(obj);
61 xbps_add_obj_to_array(prop_array_t array, prop_object_t obj)
63 assert(prop_object_type(array) == PROP_TYPE_ARRAY);
66 if (!prop_array_add(array, obj)) {
67 prop_object_release(array);
72 prop_object_release(obj);
79 int (*fn)(
struct xbps_handle *, prop_object_t,
void *,
bool *),
83 prop_object_iterator_t iter;
85 bool loop_done =
false;
87 assert(prop_object_type(array) == PROP_TYPE_ARRAY);
90 iter = prop_array_iterator(array);
94 while ((obj = prop_object_iterator_next(iter)) != NULL) {
95 rv = (*fn)(xhp, obj, arg, &loop_done);
96 if (rv != 0 || loop_done)
99 prop_object_iterator_release(iter);
106 prop_dictionary_t dict,
108 int (*fn)(
struct xbps_handle *, prop_object_t,
void *,
bool *),
115 bool cbloop_done =
false;
117 assert(prop_object_type(dict) == PROP_TYPE_DICTIONARY);
122 array = prop_dictionary_get(dict, key);
123 if (prop_object_type(array) != PROP_TYPE_ARRAY)
126 for (i = 0; i < prop_array_count(array); i++) {
127 obj = prop_array_get(array, i);
130 rv = (*fn)(xhp, obj, arg, &cbloop_done);
131 if (rv != 0 || cbloop_done)
141 int (*fn)(
struct xbps_handle *, prop_object_t,
void *,
bool *),
147 bool loop_done =
false;
149 assert(prop_object_type(array) == PROP_TYPE_ARRAY);
153 if ((cnt = prop_array_count(array)) == 0)
157 obj = prop_array_get(array, cnt);
160 rv = (*fn)(xhp, obj, arg, &loop_done);
161 if (rv != 0 || loop_done)
170 prop_dictionary_t dict,
172 int (*fn)(
struct xbps_handle *, prop_object_t,
void *,
bool *),
177 assert(prop_object_type(dict) == PROP_TYPE_DICTIONARY);
182 array = prop_dictionary_get(dict, key);
183 if (prop_object_type(array) != PROP_TYPE_ARRAY) {
184 xbps_dbg_printf(xhp,
"invalid key '%s' for dictionary", key);
191 prop_object_iterator_t
196 assert(prop_object_type(dict) == PROP_TYPE_DICTIONARY);
199 array = prop_dictionary_get(dict, key);
200 if (prop_object_type(array) != PROP_TYPE_ARRAY) {
205 return prop_array_iterator(array);
209 array_replace_dict(prop_array_t array,
210 prop_dictionary_t dict,
216 const char *curpkgname;
218 assert(prop_object_type(array) == PROP_TYPE_ARRAY);
219 assert(prop_object_type(dict) == PROP_TYPE_DICTIONARY);
222 for (i = 0; i < prop_array_count(array); i++) {
223 obj = prop_array_get(array, i);
228 prop_dictionary_get_cstring_nocopy(obj,
229 "pkgver", &curpkgname);
231 if (!prop_array_set(array, i, dict))
238 prop_dictionary_get_cstring_nocopy(obj,
239 "pkgname", &curpkgname);
240 if (strcmp(curpkgname, str) == 0) {
241 if (!prop_array_set(array, i, dict))
253 xbps_array_replace_dict_by_name(prop_array_t array,
254 prop_dictionary_t dict,
257 return array_replace_dict(array, dict, pkgname,
false);
261 xbps_array_replace_dict_by_pattern(prop_array_t array,
262 prop_dictionary_t dict,
265 return array_replace_dict(array, dict, pattern,
true);