[CCR PATCH] set dc type within the dc structure

Willem Ferguson willemferguson at zoology.up.ac.za
Tue Jun 10 11:44:34 PDT 2014


On 10/06/2014 17:46, Dirk Hohndel wrote:
> On Tue, Jun 10, 2014 at 03:54:33PM +0200, Willem Ferguson wrote:
>> This patch lays the foundation for differentiating between open-circuit(OC)
>> dives and rebreather dives (CCR). The following were done:
>> 1) In dive.h add an enum type dive_computer_type
>> 2) In dive.h add two more fields to the dc structure:
>> 	a) dctype  (an enum field indicating dc type)
>> 	b) no_o2sensors (indicating number of o2 sensors for this dc)
>> 3) In parse-xml.c add a function dctype_string. This parses the dc_type
>>     string from xml and assigns an enum value which will later be returned
>>     to the function that parses the dc variables.
>> 4) In dive.c in function fixup_dive_dc, the dc->dctype variable is set
>>     to OC (open-circuit) if this value has not been initialised from the
>>     xm log file.
>>
>> Signed-off-by: Willem Ferguson <willemferguson at zoology.up.ac.za>
>> ---
>> @@ -216,6 +219,8 @@ struct divecomputer {
>>   	depth_t maxdepth, meandepth;
>>   	temperature_t airtemp, watertemp;
>>   	pressure_t surface_pressure;
>> +        enum dive_comp_type dctype;     // Type of dive computer: 'CCR' = rebreather
>> +        int no_o2sensors;               // rebreathers: number of O2 sensors used
> I'm guessing we have some white space issue here. Actually, looking
> through the patch all indenting is done with spaces.
>
> Not OK.
Your point is taken seriously.
>
>> diff --git a/parse-xml.c b/parse-xml.c
>> index 1b5d88b..e89f90f 100644
>> --- a/parse-xml.c
>> +++ b/parse-xml.c
>> @@ -531,7 +531,7 @@ static void get_rating(char *buffer, void *_i)
>>   
>>   static void double_to_permil(char *buffer, void *_i)
>>   {
>> -	int *i = _i;
>> +	uint16_t *i = _i;
> And this could cause the same crash / corruption that Linux just fixed.
> Please don't mix pointers with targets of different sizes.
>
>> +/* Parse the dc_type string from xml and set the dc type.. */
>> +static void dctype_string(char *buffer, void *_d)
>> +{
>> +	int size;
>> +	char *res;
>> +        enum dive_comp_type *d = _d;                    // define a dive_computer_type
> Again, really bad idea. Don't use a void * as function argument, please
If one looks through parse-xml.c, then there is a host of void functions 
that also use
void as an argument. I modelled the function here on those functions. 
The way that
I would normally do this is for the function to return a value rather 
than just to
assign a value to a void passed as a parameter to a void function. But 
this would
mean a change in coding style for a substantial number of functions in 
that file.
Do you perceive this as the way forward?

I will work on those two functions (double_to_permil and dctype_string) 
but to
do the rest of these functions should probably be a separate exercise. 
Does this
sound ok?
>
>> +	size = strlen(buffer);
>> +	while (size && isspace(buffer[size - 1]))
>> +		size--;
>> +	if (!size)
>> +		return;
> Maybe we should have this whole "remove whitespace around a value" in a
> helper function...
>
There is at least one other closely-situated function that would benefit 
from such
a helper. Shall I do this?

Kind regards,
willem



More information about the subsurface mailing list