Paul Eggert wrote:
> Pádraig Brady <[EMAIL PROTECTED]> writes:
> 
>> diff --git a/src/truncate.c b/src/truncate.c
>> index 02d4102..fd321c6 100644
>> --- a/src/truncate.c
>> +++ b/src/truncate.c
>> @@ -189,9 +189,9 @@ do_ftruncate (int fd, char const *fname, off_t ssize, 
>> rel_mode_t rel_mode)
>>          }
>>  
>>        if (rel_mode == rm_min)
>> -        nsize = MAX (fsize, ssize);
>> +        nsize = MAX (fsize, (uintmax_t) ssize);
>>        else if (rel_mode == rm_max)
>> -        nsize = MIN (fsize, ssize);
>> +        nsize = MIN (fsize, (uintmax_t) ssize);
>>        else if (rel_mode == rm_rdn)
>>          /* 0..ssize-1 -> 0 */
>>          nsize = (fsize / ssize) * ssize;
> 
> This patch does not look right to me.  If ssize is negative, it screws up.
> 
> Can ssize be negative?  Yes it can.

Not when rel_mode is rm_min or rm_max.

> This indicates a bug in the underlying code, which GCC was right to
> warn us about, and which we should not have worked around by inserting
> casts blindly.

As I said in the patch the casts were to confirm the intent,
rather than just to silence the errors.

Pádraig.


_______________________________________________
Bug-coreutils mailing list
Bug-coreutils@gnu.org
http://lists.gnu.org/mailman/listinfo/bug-coreutils

Reply via email to