| 3488 | */ |
| 3489 | |
| 3490 | int /* O - 1 on success, 0 on failure */ |
| 3491 | ippSetString(ipp_t *ipp, /* I - IPP message */ |
| 3492 | ipp_attribute_t **attr, /* IO - IPP attribute */ |
| 3493 | int element, /* I - Value number (0-based) */ |
| 3494 | const char *strvalue) /* I - String value */ |
| 3495 | { |
| 3496 | char *temp; /* Temporary string */ |
| 3497 | _ipp_value_t *value; /* Current value */ |
| 3498 | ipp_tag_t value_tag; /* Value tag */ |
| 3499 | |
| 3500 | |
| 3501 | /* |
| 3502 | * Range check input... |
| 3503 | */ |
| 3504 | |
| 3505 | if (attr && *attr) |
| 3506 | value_tag = (*attr)->value_tag & IPP_TAG_CUPS_MASK; |
| 3507 | else |
| 3508 | value_tag = IPP_TAG_ZERO; |
| 3509 | |
| 3510 | if (!ipp || !attr || !*attr || (value_tag < IPP_TAG_TEXT && value_tag != IPP_TAG_TEXTLANG && value_tag != IPP_TAG_NAMELANG && value_tag != IPP_TAG_NOVALUE && value_tag != IPP_TAG_UNKNOWN) || value_tag > IPP_TAG_MIMETYPE || element < 0 || element > (*attr)->num_values || !strvalue) |
| 3511 | return (0); |
| 3512 | |
| 3513 | /* |
| 3514 | * Set the value and return... |
| 3515 | */ |
| 3516 | |
| 3517 | if ((value = ipp_set_value(ipp, attr, element)) != NULL) |
| 3518 | { |
| 3519 | if (value_tag == IPP_TAG_NOVALUE || value_tag == IPP_TAG_UNKNOWN) |
| 3520 | (*attr)->value_tag = IPP_TAG_KEYWORD; |
| 3521 | |
| 3522 | if (element > 0) |
| 3523 | value->string.language = (*attr)->values[0].string.language; |
| 3524 | |
| 3525 | if ((int)((*attr)->value_tag) & IPP_TAG_CUPS_CONST) |
| 3526 | value->string.text = (char *)strvalue; |
| 3527 | else if ((temp = _cupsStrAlloc(strvalue)) != NULL) |
| 3528 | { |
| 3529 | if (value->string.text) |
| 3530 | _cupsStrFree(value->string.text); |
| 3531 | |
| 3532 | value->string.text = temp; |
| 3533 | } |
| 3534 | else |
| 3535 | return (0); |
| 3536 | } |
| 3537 | |
| 3538 | return (value != NULL); |
| 3539 | } |
| 3540 | |
| 3541 | |
| 3542 | /* |
no test coverage detected