Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • set.c

    r0383943 rdd89a55  
    2626#include "bitlbee.h"
    2727
    28 set_t *set_add( set_t **head, char *key, char *def, set_eval eval, void *data )
    29 {
    30         set_t *s = set_find( head, key );
    31        
    32         /* Possibly the setting already exists. If it doesn't exist yet,
    33            we create it. If it does, we'll just change the default. */
     28set_t *set_add( irc_t *irc, char *key, char *def, void *eval )
     29{
     30        set_t *s = set_find( irc, key );
     31       
    3432        if( !s )
    3533        {
    36                 if( ( s = *head ) )
     34                if( ( s = irc->set ) )
    3735                {
    3836                        while( s->next ) s = s->next;
    39                         s->next = g_new0( set_t, 1 );
     37                        s->next = g_new ( set_t, 1 );
    4038                        s = s->next;
    4139                }
    4240                else
    4341                {
    44                         s = *head = g_new0( set_t, 1 );
     42                        s = irc->set = g_new( set_t, 1 );
    4543                }
     44                memset( s, 0, sizeof( set_t ) );
    4645                s->key = g_strdup( key );
    4746        }
     
    5453        if( def ) s->def = g_strdup( def );
    5554       
    56         s->eval = eval;
    57         s->data = data;
    58        
    59         return s;
    60 }
    61 
    62 set_t *set_find( set_t **head, char *key )
    63 {
    64         set_t *s = *head;
     55        if( s->eval )
     56        {
     57                g_free( s->eval );
     58                s->eval = NULL;
     59        }
     60        if( eval ) s->eval = eval;
     61       
     62        return( s );
     63}
     64
     65set_t *set_find( irc_t *irc, char *key )
     66{
     67        set_t *s = irc->set;
    6568       
    6669        while( s )
     
    7174        }
    7275       
    73         return s;
    74 }
    75 
    76 char *set_getstr( set_t **head, char *key )
    77 {
    78         set_t *s = set_find( head, key );
     76        return( s );
     77}
     78
     79char *set_getstr( irc_t *irc, char *key )
     80{
     81        set_t *s = set_find( irc, key );
    7982       
    8083        if( !s || ( !s->value && !s->def ) )
    81                 return NULL;
    82        
    83         return s->value ? s->value : s->def;
    84 }
    85 
    86 int set_getint( set_t **head, char *key )
    87 {
    88         char *s = set_getstr( head, key );
     84                return( NULL );
     85       
     86        return( s->value?s->value:s->def );
     87}
     88
     89int set_getint( irc_t *irc, char *key )
     90{
     91        char *s = set_getstr( irc, key );
    8992        int i = 0;
    9093       
    9194        if( !s )
    92                 return 0;
     95                return( 0 );
    9396       
    9497        if( ( g_strcasecmp( s, "true" ) == 0 ) || ( g_strcasecmp( s, "yes" ) == 0 ) || ( g_strcasecmp( s, "on" ) == 0 ) )
    95                 return 1;
     98                return( 1 );
    9699       
    97100        if( sscanf( s, "%d", &i ) != 1 )
    98                 return 0;
    99        
    100         return i;
    101 }
    102 
    103 int set_getbool( set_t **head, char *key )
    104 {
    105         char *s = set_getstr( head, key );
     101                return( 0 );
     102       
     103        return( i );
     104}
     105
     106int set_setstr( irc_t *irc, char *key, char *value )
     107{
     108        set_t *s = set_find( irc, key );
     109        char *nv = value;
    106110       
    107111        if( !s )
    108                 return 0;
    109        
    110         return bool2int( s );
    111 }
    112 
    113 int set_setstr( set_t **head, char *key, char *value )
    114 {
    115         set_t *s = set_find( head, key );
    116         char *nv = value;
    117        
    118         if( !s )
    119                 s = set_add( head, key, NULL, NULL, NULL );
    120        
    121         if( s->eval && !( nv = s->eval( s, value ) ) )
    122                 return 0;
     112                s = set_add( irc, key, NULL, NULL );
     113       
     114        if( s->eval && !( nv = s->eval( irc, s, value ) ) )
     115                return( 0 );
    123116       
    124117        if( s->value )
     
    128121        }
    129122       
    130         /* If there's a default setting and it's equal to what we're trying to
    131            set, stick with s->value = NULL. Otherwise, remember the setting. */
    132123        if( !s->def || ( strcmp( nv, s->def ) != 0 ) )
    133124                s->value = g_strdup( nv );
     
    136127                g_free( nv );
    137128       
    138         return 1;
    139 }
    140 
    141 int set_setint( set_t **head, char *key, int value )
     129        return( 1 );
     130}
     131
     132int set_setint( irc_t *irc, char *key, int value )
    142133{
    143134        char s[24];     /* Not quite 128-bit clean eh? ;-) */
    144135       
    145         g_snprintf( s, sizeof( s ), "%d", value );
    146         return set_setstr( head, key, s );
    147 }
    148 
    149 void set_del( set_t **head, char *key )
    150 {
    151         set_t *s = *head, *t = NULL;
     136        sprintf( s, "%d", value );
     137        return( set_setstr( irc, key, s ) );
     138}
     139
     140void set_del( irc_t *irc, char *key )
     141{
     142        set_t *s = irc->set, *t = NULL;
    152143       
    153144        while( s )
     
    162153                        t->next = s->next;
    163154                else
    164                         *head = s->next;
     155                        irc->set = s->next;
    165156               
    166157                g_free( s->key );
     
    171162}
    172163
    173 char *set_eval_int( set_t *set, char *value )
    174 {
    175         char *s;
    176        
    177         for( s = value; *s; s ++ )
    178                 if( !isdigit( *s ) )
    179                         return NULL;
    180        
    181         return value;
    182 }
    183 
    184 char *set_eval_bool( set_t *set, char *value )
    185 {
    186         return is_bool( value ) ? value : NULL;
    187 }
    188 
    189 char *set_eval_to_char( set_t *set, char *value )
     164char *set_eval_int( irc_t *irc, set_t *set, char *value )
     165{
     166        char *s = value;
     167       
     168        for( ; *s; s ++ )
     169                if( *s < '0' || *s > '9' )
     170                        return( NULL );
     171       
     172        return( value );
     173}
     174
     175char *set_eval_bool( irc_t *irc, set_t *set, char *value )
     176{
     177        if( ( g_strcasecmp( value, "true" ) == 0 ) || ( g_strcasecmp( value, "yes" ) == 0 ) || ( g_strcasecmp( value, "on" ) == 0 ) )
     178                return( value );
     179        if( ( g_strcasecmp( value, "false" ) == 0 ) || ( g_strcasecmp( value, "no" ) == 0 ) || ( g_strcasecmp( value, "off" ) == 0 ) )
     180                return( value );
     181        return( set_eval_int( irc, set, value ) );
     182}
     183
     184char *set_eval_to_char( irc_t *irc, set_t *set, char *value )
    190185{
    191186        char *s = g_new( char, 3 );
     
    196191                sprintf( s, "%c ", *value );
    197192       
    198         return s;
    199 }
    200 
    201 char *set_eval_ops( set_t *set, char *value )
    202 {
    203         irc_t *irc = set->data;
    204        
     193        return( s );
     194}
     195
     196char *set_eval_ops( irc_t *irc, set_t *set, char *value )
     197{
    205198        if( g_strcasecmp( value, "user" ) == 0 )
     199        {
    206200                irc_write( irc, ":%s!%s@%s MODE %s %s %s %s", irc->mynick, irc->mynick, irc->myhost,
    207201                                                              irc->channel, "+o-o", irc->nick, irc->mynick );
     202                return( value );
     203        }
    208204        else if( g_strcasecmp( value, "root" ) == 0 )
     205        {
    209206                irc_write( irc, ":%s!%s@%s MODE %s %s %s %s", irc->mynick, irc->mynick, irc->myhost,
    210207                                                              irc->channel, "-o+o", irc->nick, irc->mynick );
     208                return( value );
     209        }
    211210        else if( g_strcasecmp( value, "both" ) == 0 )
     211        {
    212212                irc_write( irc, ":%s!%s@%s MODE %s %s %s %s", irc->mynick, irc->mynick, irc->myhost,
    213213                                                              irc->channel, "+oo", irc->nick, irc->mynick );
     214                return( value );
     215        }
    214216        else if( g_strcasecmp( value, "none" ) == 0 )
     217        {
    215218                irc_write( irc, ":%s!%s@%s MODE %s %s %s %s", irc->mynick, irc->mynick, irc->myhost,
    216219                                                              irc->channel, "-oo", irc->nick, irc->mynick );
    217         else
    218                 return NULL;
    219        
    220         return value;
    221 }
    222 
    223 char *set_eval_charset( set_t *set, char *value )
    224 {
    225         GIConv cd;
    226 
    227         if ( g_strncasecmp( value, "none", 4 ) == 0 )
    228                 return value;
    229 
    230         cd = g_iconv_open( "UTF-8", value );
    231         if( cd == (GIConv) -1 )
    232                 return NULL;
    233 
    234         g_iconv_close( cd );
    235         return value;
    236 }
     220                return( value );
     221        }
     222       
     223        return( NULL );
     224}
     225
Note: See TracChangeset for help on using the changeset viewer.