| 211 | */ |
| 212 | |
| 213 | ipp_attribute_t * /* O - New attribute */ |
| 214 | ippAddCollection(ipp_t *ipp, /* I - IPP message */ |
| 215 | ipp_tag_t group, /* I - IPP group */ |
| 216 | const char *name, /* I - Name of attribute */ |
| 217 | ipp_t *value) /* I - Value */ |
| 218 | { |
| 219 | ipp_attribute_t *attr; /* New attribute */ |
| 220 | |
| 221 | |
| 222 | DEBUG_printf(("ippAddCollection(ipp=%p, group=%02x(%s), name=\"%s\", value=%p)", (void *)ipp, group, ippTagString(group), name, (void *)value)); |
| 223 | |
| 224 | /* |
| 225 | * Range check input... |
| 226 | */ |
| 227 | |
| 228 | if (!ipp || !name || group < IPP_TAG_ZERO || |
| 229 | group == IPP_TAG_END || group >= IPP_TAG_UNSUPPORTED_VALUE) |
| 230 | return (NULL); |
| 231 | |
| 232 | /* |
| 233 | * Create the attribute... |
| 234 | */ |
| 235 | |
| 236 | if ((attr = ipp_add_attr(ipp, name, group, IPP_TAG_BEGIN_COLLECTION, 1)) == NULL) |
| 237 | return (NULL); |
| 238 | |
| 239 | attr->values[0].collection = value; |
| 240 | |
| 241 | if (value) |
| 242 | value->use ++; |
| 243 | |
| 244 | return (attr); |
| 245 | } |
| 246 | |
| 247 | |
| 248 | /* |