Changes in set.c [0383943:dd89a55]
Legend:
- Unmodified
- Added
- Removed
-
set.c
r0383943 rdd89a55 26 26 #include "bitlbee.h" 27 27 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. */ 28 set_t *set_add( irc_t *irc, char *key, char *def, void *eval ) 29 { 30 set_t *s = set_find( irc, key ); 31 34 32 if( !s ) 35 33 { 36 if( ( s = *head) )34 if( ( s = irc->set ) ) 37 35 { 38 36 while( s->next ) s = s->next; 39 s->next = g_new 0( set_t, 1 );37 s->next = g_new ( set_t, 1 ); 40 38 s = s->next; 41 39 } 42 40 else 43 41 { 44 s = *head = g_new0( set_t, 1 );42 s = irc->set = g_new( set_t, 1 ); 45 43 } 44 memset( s, 0, sizeof( set_t ) ); 46 45 s->key = g_strdup( key ); 47 46 } … … 54 53 if( def ) s->def = g_strdup( def ); 55 54 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 65 set_t *set_find( irc_t *irc, char *key ) 66 { 67 set_t *s = irc->set; 65 68 66 69 while( s ) … … 71 74 } 72 75 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 79 char *set_getstr( irc_t *irc, char *key ) 80 { 81 set_t *s = set_find( irc, key ); 79 82 80 83 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 89 int set_getint( irc_t *irc, char *key ) 90 { 91 char *s = set_getstr( irc, key ); 89 92 int i = 0; 90 93 91 94 if( !s ) 92 return 0;95 return( 0 ); 93 96 94 97 if( ( g_strcasecmp( s, "true" ) == 0 ) || ( g_strcasecmp( s, "yes" ) == 0 ) || ( g_strcasecmp( s, "on" ) == 0 ) ) 95 return 1;98 return( 1 ); 96 99 97 100 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 106 int set_setstr( irc_t *irc, char *key, char *value ) 107 { 108 set_t *s = set_find( irc, key ); 109 char *nv = value; 106 110 107 111 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 ); 123 116 124 117 if( s->value ) … … 128 121 } 129 122 130 /* If there's a default setting and it's equal to what we're trying to131 set, stick with s->value = NULL. Otherwise, remember the setting. */132 123 if( !s->def || ( strcmp( nv, s->def ) != 0 ) ) 133 124 s->value = g_strdup( nv ); … … 136 127 g_free( nv ); 137 128 138 return 1;139 } 140 141 int set_setint( set_t **head, char *key, int value )129 return( 1 ); 130 } 131 132 int set_setint( irc_t *irc, char *key, int value ) 142 133 { 143 134 char s[24]; /* Not quite 128-bit clean eh? ;-) */ 144 135 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 140 void set_del( irc_t *irc, char *key ) 141 { 142 set_t *s = irc->set, *t = NULL; 152 143 153 144 while( s ) … … 162 153 t->next = s->next; 163 154 else 164 *head= s->next;155 irc->set = s->next; 165 156 166 157 g_free( s->key ); … … 171 162 } 172 163 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 ) 164 char *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 175 char *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 184 char *set_eval_to_char( irc_t *irc, set_t *set, char *value ) 190 185 { 191 186 char *s = g_new( char, 3 ); … … 196 191 sprintf( s, "%c ", *value ); 197 192 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 196 char *set_eval_ops( irc_t *irc, set_t *set, char *value ) 197 { 205 198 if( g_strcasecmp( value, "user" ) == 0 ) 199 { 206 200 irc_write( irc, ":%s!%s@%s MODE %s %s %s %s", irc->mynick, irc->mynick, irc->myhost, 207 201 irc->channel, "+o-o", irc->nick, irc->mynick ); 202 return( value ); 203 } 208 204 else if( g_strcasecmp( value, "root" ) == 0 ) 205 { 209 206 irc_write( irc, ":%s!%s@%s MODE %s %s %s %s", irc->mynick, irc->mynick, irc->myhost, 210 207 irc->channel, "-o+o", irc->nick, irc->mynick ); 208 return( value ); 209 } 211 210 else if( g_strcasecmp( value, "both" ) == 0 ) 211 { 212 212 irc_write( irc, ":%s!%s@%s MODE %s %s %s %s", irc->mynick, irc->mynick, irc->myhost, 213 213 irc->channel, "+oo", irc->nick, irc->mynick ); 214 return( value ); 215 } 214 216 else if( g_strcasecmp( value, "none" ) == 0 ) 217 { 215 218 irc_write( irc, ":%s!%s@%s MODE %s %s %s %s", irc->mynick, irc->mynick, irc->myhost, 216 219 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.