| 261 | */ |
| 262 | |
| 263 | ipp_attribute_t * /* O - New attribute */ |
| 264 | ippAddCollections( |
| 265 | ipp_t *ipp, /* I - IPP message */ |
| 266 | ipp_tag_t group, /* I - IPP group */ |
| 267 | const char *name, /* I - Name of attribute */ |
| 268 | int num_values, /* I - Number of values */ |
| 269 | const ipp_t **values) /* I - Values */ |
| 270 | { |
| 271 | int i; /* Looping var */ |
| 272 | ipp_attribute_t *attr; /* New attribute */ |
| 273 | _ipp_value_t *value; /* Current value */ |
| 274 | |
| 275 | |
| 276 | DEBUG_printf(("ippAddCollections(ipp=%p, group=%02x(%s), name=\"%s\", num_values=%d, values=%p)", (void *)ipp, group, ippTagString(group), name, num_values, (void *)values)); |
| 277 | |
| 278 | /* |
| 279 | * Range check input... |
| 280 | */ |
| 281 | |
| 282 | if (!ipp || !name || group < IPP_TAG_ZERO || |
| 283 | group == IPP_TAG_END || group >= IPP_TAG_UNSUPPORTED_VALUE || |
| 284 | num_values < 1) |
| 285 | return (NULL); |
| 286 | |
| 287 | /* |
| 288 | * Create the attribute... |
| 289 | */ |
| 290 | |
| 291 | if ((attr = ipp_add_attr(ipp, name, group, IPP_TAG_BEGIN_COLLECTION, |
| 292 | num_values)) == NULL) |
| 293 | return (NULL); |
| 294 | |
| 295 | if (values) |
| 296 | { |
| 297 | for (i = num_values, value = attr->values; |
| 298 | i > 0; |
| 299 | i --, value ++) |
| 300 | { |
| 301 | value->collection = (ipp_t *)*values++; |
| 302 | value->collection->use ++; |
| 303 | } |
| 304 | } |
| 305 | |
| 306 | return (attr); |
| 307 | } |
| 308 | |
| 309 | |
| 310 | /* |