--- bluez-libs-2.22/src/sdp.c 2005-10-29 16:04:28.000000000 -0700 +++ bluez-libs-2.22_new/src/sdp.c 2005-12-01 03:30:05.000000000 -0800 @@ -346,6 +346,11 @@ sdp_data_t *sdp_data_alloc(uint8_t dtd, const void *value) { + return(sdp_data_alloc_leng(dtd, value, 0)); +} + +sdp_data_t *sdp_data_alloc_leng(uint8_t dtd, const void *value, uint32_t leng) +{ sdp_data_t *seq; int len = 0; sdp_data_t *d = (sdp_data_t *) malloc(sizeof(sdp_data_t)); @@ -420,14 +425,15 @@ if (!value) goto out_error; - len = strlen(value); - d->unitSize += len; + len = leng ? leng : strlen(value); + d->unitSize = len - 1; if (len <= USHRT_MAX) { d->val.str = (char *) malloc(len + 1); if (!d->val.str) goto out_error; - strcpy(d->val.str, value); + if (leng) memcpy(d->val.str, value, leng); + else strcpy(d->val.str, value); if (len <= UCHAR_MAX) { d->unitSize += sizeof(uint8_t); if (dtd != SDP_URL_STR8 && dtd != SDP_TEXT_STR8) { @@ -491,6 +497,29 @@ return seq; } +sdp_data_t *sdp_seq_alloc_leng(void **dtds, void **values, int *leng, int len) +{ + sdp_data_t *curr = NULL, *seq = NULL; + int i; + + for (i = 0; i < len; i++) { + sdp_data_t *data; + uint8_t dtd = *(uint8_t *)dtds[i]; + if (dtd >= SDP_SEQ8 && dtd <= SDP_ALT32) + data = (sdp_data_t *)values[i]; + else + data = sdp_data_alloc_leng(dtd, values[i], leng[i]); + if (!data) + return NULL; + if (curr) + curr->next = data; + else + seq = data; + curr = data; + } + return sdp_data_alloc_leng(SDP_SEQ8, seq, leng[i]); +} + sdp_data_t *sdp_seq_alloc(void **dtds, void **values, int len) { sdp_data_t *curr = NULL, *seq = NULL; @@ -681,7 +710,8 @@ case SDP_URL_STR16: case SDP_URL_STR32: src = (unsigned char *)d->val.str; - data_size = strlen(d->val.str); + //data_size = strlen(d->val.str); + data_size = d->unitSize; sdp_set_seq_len(seqp, data_size); break; case SDP_SEQ8: