diff options
author | Sven Moritz Hallberg <pesco@khjk.org> | 2009-03-12 20:10:06 +0100 |
---|---|---|
committer | Sven Moritz Hallberg <pesco@khjk.org> | 2009-03-12 20:10:06 +0100 |
commit | 823de9d44f262ea2364ac8ec6a1e18e0f7dab658 (patch) | |
tree | bfe64e4fafbcd13aaef6a436cab6ad91619e2821 /set.c | |
parent | 9b55485a6f9d72334b372e6fb6b60bbde943170d (diff) |
commit updates by ashish shukla <wahjava@gmail.com>
Diffstat (limited to 'set.c')
-rw-r--r-- | set.c | 55 |
1 files changed, 37 insertions, 18 deletions
@@ -25,6 +25,9 @@ #define BITLBEE_CORE #include "bitlbee.h" +/* Used to use NULL for this, but NULL is actually a "valid" value. */ +char *SET_INVALID = "nee"; + set_t *set_add( set_t **head, char *key, char *def, set_eval eval, void *data ) { set_t *s = set_find( head, key ); @@ -113,9 +116,20 @@ int set_setstr( set_t **head, char *key, char *value ) char *nv = value; if( !s ) + /* + Used to do this, but it never really made sense. s = set_add( head, key, NULL, NULL, NULL ); + */ + return 0; - if( s->eval && !( nv = s->eval( s, value ) ) ) + if( value == NULL && ( s->flags & SET_NULL_OK ) == 0 ) + return 0; + + /* Call the evaluator. For invalid values, evaluators should now + return SET_INVALID, but previously this was NULL. Try to handle + that too if NULL is not an allowed value for this setting. */ + if( s->eval && ( ( nv = s->eval( s, value ) ) == SET_INVALID || + ( ( s->flags & SET_NULL_OK ) == 0 && nv == NULL ) ) ) return 0; if( s->value ) @@ -167,13 +181,15 @@ void set_del( set_t **head, char *key ) } } -void set_reset( set_t **head, char *key ) +int set_reset( set_t **head, char *key ) { set_t *s; s = set_find( head, key ); if( s ) - set_setstr( head, key, s->def ); + return set_setstr( head, key, s->def ); + + return 0; } char *set_eval_int( set_t *set, char *value ) @@ -186,14 +202,14 @@ char *set_eval_int( set_t *set, char *value ) for( ; *s; s ++ ) if( !isdigit( *s ) ) - return NULL; + return SET_INVALID; return value; } char *set_eval_bool( set_t *set, char *value ) { - return is_bool( value ) ? value : NULL; + return is_bool( value ) ? value : SET_INVALID; } char *set_eval_to_char( set_t *set, char *value ) @@ -208,25 +224,27 @@ char *set_eval_to_char( set_t *set, char *value ) return s; } -char *set_eval_op_root( set_t *set, char *value ) +char* set_eval_op_root( set_t *set, char* value ) { irc_t *irc = set->data; - char *ret = set_eval_bool(set, value); + char* ret = set_eval_bool(set, value); int b = bool2int(ret); - + irc_write( irc, ":%s!%s@%s MODE %s %s %s", irc->mynick, irc->mynick, irc->myhost, - irc->channel, b?"+o":"-o", irc->mynick ); + irc->channel, b?"+o":"-o", irc->mynick); + return ret; } -char *set_eval_op_user( set_t *set, char *value ) +char* set_eval_op_user( set_t *set, char* value ) { irc_t *irc = set->data; - char *ret = set_eval_bool(set, value); + char* ret = set_eval_bool(set, value); int b = bool2int(ret); - + irc_write( irc, ":%s!%s@%s MODE %s %s %s", irc->mynick, irc->mynick, irc->myhost, - irc->channel, b?"+o":"-o", irc->nick ); + irc->channel, b?"+o":"-o", irc->nick); + return ret; } @@ -249,7 +267,7 @@ char *set_eval_mode_buddies( set_t *set, char *value, char modeflag ) mode=3; else return NULL; - + /* sorry for calling them op/deop - too lazy for search+replace :P */ op[0]='\0'; deop[0]='\0'; @@ -334,10 +352,10 @@ char *set_eval_mode_buddies( set_t *set, char *value, char modeflag ) if(*deop) { char *flags = g_strnfill(ndeop, modeflag); irc_write( irc, ":%s!%s@%s MODE %s -%s%s", irc->mynick, irc->mynick, irc->myhost, - irc->channel, flags, deop ); - g_free(flags); - } - + irc->channel, flags, deop ); + g_free(flags); + } + return value; } @@ -369,3 +387,4 @@ char *set_eval_otr_policy( set_t *set, char *value ) return value; return NULL; } + |