[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: r61385 - in trunk/packages/choose-mirror: . debian



On Thu, Nov 19, 2009 at 09:46:45PM +0000, Frans Pop wrote:
> Log:
> Rewrite release (suite) selection
> […]
> +	/* Initialize releases; also ensures NULL termination for .name */

That comment is misleading, I'd say. If I understood correctly, NULL as
releases[x].name means that x is the last set release in releases. As
.name is a char*, ensuiring NULL termination can be understood as
ensuiring NULL termination of the string…

> +	memset(&releases, 0, MAXRELEASES * sizeof(struct release_t));

As you pointed out, it would probably be better to use 'sizeof
(releases)' instead of manually calculating the size.

> […]
> +			memset(&release, 0, sizeof(struct release_t));

Same here.

> […]
> +		memset(&release, 0, sizeof(struct release_t));

Same here.

> […]
> +		if (release.name)
> +			free(release.name);
> +		if (release.suite)
> +			free(release.suite);

free() is defined to do nothing on NULL pointers, IIRC, so you can drop
those ifs.

> +	memset(choices, 0, MAXRELEASES * sizeof(char *));
> +	memset(choices_c, 0, MAXRELEASES * sizeof(char *));

As earlier.

> +	/* Arrays can never overflow as we've already checked releases */
> +	for (i=0; releases[i].name != NULL; i++) {
> +		char *name;

name is not modified, so 'const char * name' would be better.

> +
> +		if (releases[i].status & GET_SUITE)
> +			name = strdup(releases[i].suite);
> +		else
> +			name = strdup(releases[i].name);

No need to copy the string, releases[i].suite or releases[i].name will
not change before the question is asked. (And debconf_subst() will do a
copy already.)

> +
> +		choices_c[i] = strdup(name);

Same here.

> +		if (strcmp(name, releases[i].name) != 0)
> +			asprintf(&choices[i], "%s - %s", releases[i].name, name);
> +		else
> +			choices[i] = strdup(name);

And here.

> +		if (releases[i].status & IS_DEFAULT)
> +			debconf_set(debconf, DEBCONF_BASE "suite", name);
> +
> +		free(name);

And no free() if you only reference releases' strings.

> +	for (i=0; choices[i] != NULL; i++) {
> +		free(choices_c[i]);
> +		free(choices[i]);
> +	}
> +

And no need for this too.


Ok, nothing more to say, I think. :)  /me goes back to more lurking ;)

Cheers,
-- 
Jérémy Bobbio                        .''`. 
lunar@debian.org                    : :Ⓐ  :  # apt-get install anarchism
                                    `. `'` 
                                      `-   

Attachment: signature.asc
Description: Digital signature


Reply to: