All of lore.kernel.org
 help / color / mirror / Atom feed
From: Marcel Holtmann <marcel@holtmann.org>
To: jcaden@libresoft.es
Cc: Claudio Takahasi <claudio.takahasi@openbossa.org>,
	"linux-bluetooth@vger.kernel.org"
	<linux-bluetooth@vger.kernel.org>
Subject: Re: [PATCH] SDP patch to add support for HDP
Date: Thu, 10 Dec 2009 22:59:15 +0100	[thread overview]
Message-ID: <1260482355.2901.67.camel@violet> (raw)
In-Reply-To: <200912101150.15707.jcaden@libresoft.es>

Hi Jose,

> diff --git a/lib/sdp.c b/lib/sdp.c
> index 822ec1a..ddf2d1a 100644
> --- a/lib/sdp.c
> +++ b/lib/sdp.c
> @@ -4621,3 +4621,113 @@ uint16_t sdp_gen_tid(sdp_session_t *session)
>  {
>  	return session->tid++;
>  }
> +
> +/*
> + * Set the supported features
> + */
> +int sdp_set_supp_feat(sdp_record_t *rec, const sdp_list_t *sf)
> +{
> +	const sdp_list_t *p, *r;
> +	sdp_data_t *feat, *seq_feat;
> +	int seqlen, i, err;
> +	void **seqDTDs, **seqVals;
> +
> +	err = -1;

what is this err = -1 business. That is pointless. See below.

> +	i = 0;

Move this to the place where it is actually used.

> +	seqlen = sdp_list_len(sf);
> +	seqDTDs = malloc(seqlen * sizeof(void *));
> +	if (!seqDTDs)
> +		return err;

This is return -1;

> +	seqVals = malloc(seqlen * sizeof(void *));
> +	if (!seqVals) {
> +		free(seqDTDs);
> +		return err;

And this, too. Just use return -1;

> +	}
> +
> +	for (p = sf; p; p = p->next) {
> +		int plen, j;
> +		void **dtds, **vals;
> +
> +		plen = sdp_list_len(p->data);
> +		dtds = malloc(plen * sizeof(void *));
> +		if (!dtds)
> +			goto set_sup_feat_exit;
> +		vals = malloc(plen * sizeof(void *));
> +		if (!vals) {
> +			free(dtds);
> +			goto set_sup_feat_exit;
> +		}
> +		j = 0;
> +		for (r = p->data; r; r = r->next) {
> +			sdp_data_t *data = (sdp_data_t*)r->data;
> +			dtds[j] = &data->dtd;
> +			vals[j] = &data->val;
> +			j++;
> +		}
> +		feat = sdp_seq_alloc(dtds, vals, plen);
> +		free(dtds);
> +		free(vals);
> +		if (!feat)
> +			goto set_sup_feat_exit;
> +		seqDTDs[i] = &feat->dtd;
> +		seqVals[i] = feat;
> +		i++;
> +	}
> +	seq_feat = sdp_seq_alloc(seqDTDs, seqVals, seqlen);
> +	if (!seq_feat)
> +		goto set_sup_feat_exit;
> +	sdp_attr_replace(rec, SDP_ATTR_SUPPORTED_FEATURES_LIST, seq_feat);
> +
> +	err = 0;

Replace this with return 0;

> +
> +set_sup_feat_exit:

Call this label "fail" to be consistent across the code.

> +	free(seqVals);
> +	free(seqDTDs);
> +	return err;

This needs to be return -1;

And then remove the whole err variable since I don't see it used
anywhere.

> +}
> +
> +/*
> + * Get the supported features
> + * If an error occurred -1 is returned and errno is set
> + */
> +int sdp_get_supp_feat(const sdp_record_t *rec, sdp_list_t **seqp)
> +{
> +	sdp_data_t * sdpdata, *d;
> +	sdp_list_t * next;

Who said we declare variable like this. It is sdp_list_t *next. No extra
space between * and the variable name.

> +	*seqp = NULL;

This is pretty much a bad idea. So in case this functions fails you
should not touch *seqp at all. It is not your pointer in the end.

I would prefer if you use a temporary pointer and only assign it on
success.

> +	sdpdata = sdp_data_get(rec, SDP_ATTR_SUPPORTED_FEATURES_LIST);
> +
> +	if (!sdpdata || sdpdata->dtd < SDP_SEQ8 || sdpdata->dtd > SDP_SEQ32)
> +		return sdp_get_uuidseq_attr(rec,
> +				     SDP_ATTR_SUPPORTED_FEATURES_LIST, seqp);
> +
> +	for (d = sdpdata->val.dataseq; d; d = d->next) {
> +		sdp_data_t *dd;
> +		sdp_list_t *subseq;
> +		subseq = NULL;
> +		if (d->dtd < SDP_SEQ8 || d->dtd > SDP_SEQ32)
> +			goto fail;

Move the subseq after the if check.

> +		for (dd = d->val.dataseq; dd; dd = dd->next) {
> +			sdp_data_t *data;
> +			if (dd->dtd != SDP_UINT8 && dd->dtd != SDP_UINT16 &&
> +						dd->dtd != SDP_TEXT_STR8)
> +				goto fail;
> +			data = sdp_data_alloc(dd->dtd, &dd->val);
> +			if (data)
> +				subseq = sdp_list_append(subseq, data);
> +		}
> +		*seqp = sdp_list_append(*seqp, subseq);
> +	}
> +	return 0;
> +
> +fail:
> +	while (*seqp) {
> +		next = (*seqp)->next;

The next variable could be declared inside the while loop actually.

> +		sdp_list_free(*seqp, free);
> +		*seqp = next;
> +	}
> +	errno = EINVAL;
> +	return -1;
> +}

Regards

Marcel



  reply	other threads:[~2009-12-10 21:59 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-11-13 12:43 [PATCH] SDP patch to add support for HDP José Antonio Santos Cadenas
2009-11-16 17:30 ` Claudio Takahasi
2009-11-16 17:52 ` Claudio Takahasi
2009-11-17 11:08   ` José Antonio Santos Cadenas
2009-12-05 16:25     ` Marcel Holtmann
2009-12-10 10:49       ` José Antonio Santos Cadenas
2009-12-10 10:50       ` José Antonio Santos Cadenas
2009-12-10 21:59         ` Marcel Holtmann [this message]
2009-12-11  9:21           ` José Antonio Santos Cadenas
2009-12-11 18:32             ` Marcel Holtmann
2009-12-14 11:35               ` José Antonio Santos Cadenas
2009-12-14 20:25                 ` Marcel Holtmann

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1260482355.2901.67.camel@violet \
    --to=marcel@holtmann.org \
    --cc=claudio.takahasi@openbossa.org \
    --cc=jcaden@libresoft.es \
    --cc=linux-bluetooth@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.