Hi Sasha,

Sasha Khapyorsky wrote:
> Hi Evgeny,
> 
> On 16:31 Sun 15 Oct     , Yevgeny Kliteynik wrote:
>> Hi Hal
>>
>> This patch fixes a few data type problems with OSM on 
>> 64-bit Windows machines.
> 
> Could you explain what those problems are?
 
Basically, in all three files the problem was assigning
the result of pointer arithmetics (which is __int64) to 
an int/uint variable.
Casting to int is ok because, as I said, this result is 
actually string length, index in table, or index in string, 
so no range check is required.

--
Yevgeny

> Sasha
> 
> 
>> The changes are done in the following files:
>>
>>   opensm/osm_prtn_config.c
>>   opensm/osm_pkey.c
>>   opensm/osm_qos.c
>>
>> Note that the casting is done on the calculation result, 
>> wich is string lenght, index in table, or index in string,
>> so it's ok to 'downcast' the value.
>>
>> The patch is for trunk only.
>>
>> Yevgeny
>>
>> Signed-off-by:  Yevgeny Kliteynik <[EMAIL PROTECTED]>
>>
>> Index: opensm/osm_prtn_config.c
>> ===================================================================
>> --- opensm/osm_prtn_config.c (revision 9820)
>> +++ opensm/osm_prtn_config.c (working copy)
>> @@ -254,7 +254,7 @@ static int parse_name_token(char *str, c
>>              p++;
>>  
>>      q = p + strlen(p);
>> -    len += q - str + 1;
>> +    len += (int)(q - str) + 1;
>>      while ( q != p &&
>>              ( *q == '\0' || *q == ' ' || *q == '\t' || *q == '\n'))
>>              *q-- = '\0';
>> @@ -293,7 +293,7 @@ static int parse_part_conf(struct part_c
>>      if (*p == '\t' || *p == '\0' || *p == '\n')
>>              p++;
>>  
>> -    len += p - str;
>> +    len += (int)(p - str);
>>      str = p;
>>  
>>      if (conf->p_prtn)
>> Index: opensm/osm_pkey.c
>> ===================================================================
>> --- opensm/osm_pkey.c        (revision 9820)
>> +++ opensm/osm_pkey.c        (working copy)
>> @@ -297,7 +297,7 @@ osm_pkey_tbl_get_block_and_idx(
>>      (p_pkey < block->pkey_entry + IB_NUM_PKEY_ELEMENTS_IN_BLOCK))
>>      {
>>      *p_block_idx = block_index;
>> -    *p_pkey_idx = p_pkey - block->pkey_entry;
>> +    *p_pkey_idx = (uint8_t)(p_pkey - block->pkey_entry);
>>      return(IB_SUCCESS);
>>      }
>>    }
>> Index: opensm/osm_qos.c
>> ===================================================================
>> --- opensm/osm_qos.c (revision 9820)
>> +++ opensm/osm_qos.c (working copy)
>> @@ -399,7 +399,7 @@ static int parse_one_unsigned(char *str,
>>      *val = strtoul(str, &end, 0);
>>      if (*end)
>>              end++;
>> -    return end - str;
>> +    return (int)(end - str);
>>  }
>>  
>>  static int parse_vlarb_entry(char *str, ib_vl_arb_element_t * e)
>> @@ -410,7 +410,7 @@ static int parse_vlarb_entry(char *str, 
>>      e->vl = val % 15;
>>      p += parse_one_unsigned(p, ',', &val);
>>      e->weight = (uint8_t)val;
>> -    return p - str;
>> +    return (int)(p - str);
>>  }
>>  
>>  static int parse_sl2vl_entry(char *str, uint8_t * raw)
>> @@ -420,7 +420,7 @@ static int parse_sl2vl_entry(char *str, 
>>      p += parse_one_unsigned(p, ',', &val1);
>>      p += parse_one_unsigned(p, ',', &val2);
>>      *raw = (val1 << 4) | (val2 & 0xf);
>> -    return p - str;
>> +    return (int)(p - str);
>>  }
>>  
>>  static void qos_build_config(struct qos_config *cfg,
>>
>>
>> _______________________________________________
>> openib-general mailing list
>> [email protected]
>> http://openib.org/mailman/listinfo/openib-general
>>
>> To unsubscribe, please visit 
>> http://openib.org/mailman/listinfo/openib-general
>>
> 

_______________________________________________
openib-general mailing list
[email protected]
http://openib.org/mailman/listinfo/openib-general

To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general

Reply via email to