[m-rev.] for review: string__join_list

Fergus Henderson fjh at cs.mu.OZ.AU
Mon Jul 30 14:19:34 AEST 2001


On 30-Jul-2001, Zoltan Somogyi <zs at cs.mu.OZ.AU> wrote:
> On 25-Jul-2001, Fergus Henderson <fjh at cs.mu.OZ.AU> wrote:
> > If the list was empty, this will now try to allocate `(size_t)-sep_len'
> > bytes of memory, which will no doubt fail.
> 
> The test case will come tomorrow.
> 
> library/string.m:
> 	Fix a bug in string__join_list pointed out by Fergus; the length
> 	calculation and the string copying now use the same logic.
> 
> Zoltan.
> 
> Index: library/string.m
> ===================================================================
> RCS file: /home/mercury1/repository/mercury/library/string.m,v
> retrieving revision 1.148
> diff -u -b -r1.148 string.m
> --- library/string.m	2001/07/26 09:49:31	1.148
> +++ library/string.m	2001/07/30 04:07:55
> @@ -948,7 +948,7 @@
>  	MR_Word	tmp;
>  	size_t	len;
>  
> -		/* Determine the total len of all strings */
> +		/* Determine the total length of all strings */
>  	len = 0;
>  	while (!MR_list_is_empty(list)) {
>  		len += strlen((MR_String) MR_list_head(list));
> @@ -983,17 +983,19 @@
>  
>  	sep_len = strlen(Sep);
>  
> -		/* Determine the total len of all strings */
> -	len = -sep_len; /* compensate for no separator before first string */
> +		/* Determine the total length of all strings */
> +	len = 0;
> +	add_sep = FALSE;
>  	while (!MR_list_is_empty(list)) {
> -		len += sep_len + strlen((MR_String) MR_list_head(list));
> -		list = MR_list_tail(list);
> +		if (add_sep) {
> +			len += sep_len;
>  	}
>  
> -		/* Allocate enough word aligned memory for the string */
> -	if (len <= 0) {
> -		len = 0;
> +		len += strlen((MR_String) MR_list_head(list));
> +		list = MR_list_tail(list);
> +		add_sep = FALSE;

Shouldn't that be `add_sep = TRUE'?

-- 
Fergus Henderson <fjh at cs.mu.oz.au>  |  "I have always known that the pursuit
The University of Melbourne         |  of excellence is a lethal habit"
WWW: <http://www.cs.mu.oz.au/~fjh>  |     -- the last words of T. S. Garp.
--------------------------------------------------------------------------
mercury-reviews mailing list
post:  mercury-reviews at cs.mu.oz.au
administrative address: owner-mercury-reviews at cs.mu.oz.au
unsubscribe: Address: mercury-reviews-request at cs.mu.oz.au Message: unsubscribe
subscribe:   Address: mercury-reviews-request at cs.mu.oz.au Message: subscribe
--------------------------------------------------------------------------



More information about the reviews mailing list