better bool, real handling in (1) the gtk prefs interface, (2) the dictionary merge code, (2) the json parser
This commit is contained in:
parent
dce5997f29
commit
6373802ca8
10
gtk/conf.c
10
gtk/conf.c
|
@ -257,7 +257,6 @@ double
|
|||
pref_double_get( const char * key )
|
||||
{
|
||||
double d = 0.0;
|
||||
|
||||
tr_bencDictFindReal( getPrefs( ), key, &d );
|
||||
return d;
|
||||
}
|
||||
|
@ -276,10 +275,9 @@ pref_double_set( const char * key,
|
|||
gboolean
|
||||
pref_flag_get( const char * key )
|
||||
{
|
||||
int64_t i;
|
||||
|
||||
tr_bencDictFindInt( getPrefs( ), key, &i );
|
||||
return i != 0;
|
||||
tr_bool boolVal;
|
||||
tr_bencDictFindBool( getPrefs( ), key, &boolVal );
|
||||
return boolVal != 0;
|
||||
}
|
||||
|
||||
gboolean
|
||||
|
@ -303,7 +301,7 @@ void
|
|||
pref_flag_set( const char * key,
|
||||
gboolean value )
|
||||
{
|
||||
pref_int_set( key, value != 0 );
|
||||
tr_bencDictAddBool( getPrefs( ), key, value );
|
||||
}
|
||||
|
||||
/***
|
||||
|
|
|
@ -413,6 +413,12 @@ tr_bencListChild( tr_benc * val,
|
|||
return ret;
|
||||
}
|
||||
|
||||
static void
|
||||
tr_benc_warning( const char * err )
|
||||
{
|
||||
fprintf( stderr, "warning: %s\n", err );
|
||||
}
|
||||
|
||||
tr_bool
|
||||
tr_bencGetInt( const tr_benc * val,
|
||||
int64_t * setme )
|
||||
|
@ -424,7 +430,7 @@ tr_bencGetInt( const tr_benc * val,
|
|||
*setme = val->val.i;
|
||||
|
||||
if( !success && (( success = tr_bencIsBool( val )))) {
|
||||
fprintf( stderr, "warning: reading bool as an int\n" );
|
||||
tr_benc_warning( "reading bool as an int" );
|
||||
if( setme )
|
||||
*setme = val->val.b ? 1 : 0;
|
||||
}
|
||||
|
@ -452,9 +458,12 @@ tr_bencGetBool( const tr_benc * val, tr_bool * setme )
|
|||
if(( success = tr_bencIsBool( val )))
|
||||
*setme = val->val.b;
|
||||
|
||||
if( !success && tr_bencIsInt( val ) )
|
||||
if(( success = ( val->val.i==0 || val->val.i==1 ) ))
|
||||
if( !success && tr_bencIsInt( val ) ) {
|
||||
if(( success = ( val->val.i==0 || val->val.i==1 ) )) {
|
||||
tr_benc_warning( "warning: reading bool as an int\n" );
|
||||
*setme = val->val.i!=0;
|
||||
}
|
||||
}
|
||||
|
||||
if( !success && tr_bencIsString( val ) )
|
||||
if(( success = ( !strcmp(val->val.s.s,"true") || !strcmp(val->val.s.s,"false"))))
|
||||
|
@ -1541,22 +1550,33 @@ tr_bencMergeDicts( tr_benc * target, const tr_benc * source )
|
|||
{
|
||||
const char * key;
|
||||
const tr_benc * val;
|
||||
tr_benc * t;
|
||||
|
||||
if( tr_bencDictChild( source, i, &key, &val ) )
|
||||
{
|
||||
int64_t i64;
|
||||
const char * str;
|
||||
tr_benc * t;
|
||||
|
||||
if( tr_bencGetInt( val, &i64 ) )
|
||||
if( tr_bencIsBool( val ) )
|
||||
{
|
||||
tr_bencDictRemove( target, key );
|
||||
tr_bencDictAddInt( target, key, i64 );
|
||||
tr_bool boolVal;
|
||||
tr_bencGetBool( val, &boolVal );
|
||||
tr_bencDictAddBool( target, key, boolVal );
|
||||
}
|
||||
else if( tr_bencGetStr( val, &str ) )
|
||||
else if( tr_bencIsReal( val ) )
|
||||
{
|
||||
tr_bencDictRemove( target, key );
|
||||
tr_bencDictAddStr( target, key, str );
|
||||
double realVal;
|
||||
tr_bencGetReal( val, &realVal );
|
||||
tr_bencDictAddReal( target, key, realVal );
|
||||
}
|
||||
else if( tr_bencIsInt( val ) )
|
||||
{
|
||||
int64_t intVal;
|
||||
tr_bencGetInt( val, &intVal );
|
||||
tr_bencDictAddInt( target, key, intVal );
|
||||
}
|
||||
else if( tr_bencIsString( val ) )
|
||||
{
|
||||
const char * strVal;
|
||||
tr_bencGetStr( val, &strVal );
|
||||
tr_bencDictAddStr( target, key, strVal );
|
||||
}
|
||||
else if( tr_bencIsDict( val ) && tr_bencDictFindDict( target, key, &t ) )
|
||||
{
|
||||
|
@ -1564,7 +1584,6 @@ tr_bencMergeDicts( tr_benc * target, const tr_benc * source )
|
|||
}
|
||||
else
|
||||
{
|
||||
|
||||
tr_dbg( "tr_bencMergeDicts skipping \"%s\"", key );
|
||||
}
|
||||
}
|
||||
|
|
|
@ -92,14 +92,9 @@ callback( void * vdata,
|
|||
break;
|
||||
|
||||
case JSON_T_FLOAT:
|
||||
{
|
||||
char buf[128];
|
||||
tr_snprintf( buf, sizeof( buf ), "%f",
|
||||
(double)value->vu.float_value );
|
||||
tr_bencInitStr( getNode( data ), buf, -1 );
|
||||
data->hasContent = TRUE;
|
||||
tr_bencInitReal( getNode( data ), (double)value->vu.float_value );
|
||||
break;
|
||||
}
|
||||
|
||||
case JSON_T_NULL:
|
||||
data->hasContent = TRUE;
|
||||
|
@ -113,12 +108,12 @@ callback( void * vdata,
|
|||
|
||||
case JSON_T_TRUE:
|
||||
data->hasContent = TRUE;
|
||||
tr_bencInitInt( getNode( data ), 1 );
|
||||
tr_bencInitBool( getNode( data ), 1 );
|
||||
break;
|
||||
|
||||
case JSON_T_FALSE:
|
||||
data->hasContent = TRUE;
|
||||
tr_bencInitInt( getNode( data ), 0 );
|
||||
tr_bencInitBool( getNode( data ), 0 );
|
||||
break;
|
||||
|
||||
case JSON_T_STRING:
|
||||
|
|
Loading…
Reference in New Issue