aboutsummaryrefslogtreecommitdiffstats
path: root/set.c
diff options
context:
space:
mode:
Diffstat (limited to 'set.c')
-rw-r--r--set.c216
1 files changed, 46 insertions, 170 deletions
diff --git a/set.c b/set.c
index 4f35de22..17befba9 100644
--- a/set.c
+++ b/set.c
@@ -28,7 +28,7 @@
/* 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 *set_add( set_t **head, const char *key, const char *def, set_eval eval, void *data )
{
set_t *s = set_find( head, key );
@@ -62,13 +62,14 @@ set_t *set_add( set_t **head, char *key, char *def, set_eval eval, void *data )
return s;
}
-set_t *set_find( set_t **head, char *key )
+set_t *set_find( set_t **head, const char *key )
{
set_t *s = *head;
while( s )
{
- if( g_strcasecmp( s->key, key ) == 0 )
+ if( g_strcasecmp( s->key, key ) == 0 ||
+ ( s->old_key && g_strcasecmp( s->old_key, key ) == 0 ) )
break;
s = s->next;
}
@@ -76,7 +77,7 @@ set_t *set_find( set_t **head, char *key )
return s;
}
-char *set_getstr( set_t **head, char *key )
+char *set_getstr( set_t **head, const char *key )
{
set_t *s = set_find( head, key );
@@ -86,7 +87,7 @@ char *set_getstr( set_t **head, char *key )
return s->value ? s->value : s->def;
}
-int set_getint( set_t **head, char *key )
+int set_getint( set_t **head, const char *key )
{
char *s = set_getstr( head, key );
int i = 0;
@@ -100,7 +101,7 @@ int set_getint( set_t **head, char *key )
return i;
}
-int set_getbool( set_t **head, char *key )
+int set_getbool( set_t **head, const char *key )
{
char *s = set_getstr( head, key );
@@ -110,7 +111,7 @@ int set_getbool( set_t **head, char *key )
return bool2int( s );
}
-int set_setstr( set_t **head, char *key, char *value )
+int set_setstr( set_t **head, const char *key, char *value )
{
set_t *s = set_find( head, key );
char *nv = value;
@@ -149,7 +150,7 @@ int set_setstr( set_t **head, char *key, char *value )
return 1;
}
-int set_setint( set_t **head, char *key, int value )
+int set_setint( set_t **head, const char *key, int value )
{
char s[24]; /* Not quite 128-bit clean eh? ;-) */
@@ -157,7 +158,7 @@ int set_setint( set_t **head, char *key, int value )
return set_setstr( head, key, s );
}
-void set_del( set_t **head, char *key )
+void set_del( set_t **head, const char *key )
{
set_t *s = *head, *t = NULL;
@@ -175,13 +176,14 @@ void set_del( set_t **head, char *key )
*head = s->next;
g_free( s->key );
- if( s->value ) g_free( s->value );
- if( s->def ) g_free( s->def );
+ g_free( s->old_key );
+ g_free( s->value );
+ g_free( s->def );
g_free( s );
}
}
-int set_reset( set_t **head, char *key )
+int set_reset( set_t **head, const char *key )
{
set_t *s;
@@ -212,6 +214,21 @@ char *set_eval_bool( set_t *set, char *value )
return is_bool( value ) ? value : SET_INVALID;
}
+char *set_eval_list( set_t *set, char *value )
+{
+ GSList *options = set->eval_data, *opt;
+
+ for( opt = options; opt; opt = opt->next )
+ if( strcmp( value, opt->data ) == 0 )
+ return value;
+
+ /* TODO: It'd be nice to show the user a list of allowed values,
+ but we don't have enough context here to do that. May
+ want to fix that. */
+
+ return NULL;
+}
+
char *set_eval_to_char( set_t *set, char *value )
{
char *s = g_new( char, 3 );
@@ -224,167 +241,26 @@ char *set_eval_to_char( set_t *set, char *value )
return s;
}
-char* set_eval_op_root( set_t *set, char* value )
-{
- irc_t *irc = set->data;
- 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);
-
- return ret;
-}
-
-char* set_eval_op_user( set_t *set, char* value )
-{
- irc_t *irc = set->data;
- 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);
-
- return ret;
-}
-
-/* generalized version of set_eval_op/voice_buddies */
-char *set_eval_mode_buddies( set_t *set, char *value, char modeflag )
+/*
+char *set_eval_ops( set_t *set, char *value )
{
irc_t *irc = set->data;
- char op[64], deop[64];
- int nop=0, ndeop=0;
- user_t *u;
- int mode;
-
- if(!strcmp(value, "false"))
- mode=0;
- else if(!strcmp(value, "encrypted"))
- mode=1;
- else if(!strcmp(value, "trusted"))
- mode=2;
- else if(!strcmp(value, "notaway"))
- mode=3;
+
+ if( g_strcasecmp( value, "user" ) == 0 )
+ irc_write( irc, ":%s!%s@%s MODE %s %s %s %s", irc->mynick, irc->mynick, irc->myhost,
+ irc->channel, "+o-o", irc->nick, irc->mynick );
+ else if( g_strcasecmp( value, "root" ) == 0 )
+ irc_write( irc, ":%s!%s@%s MODE %s %s %s %s", irc->mynick, irc->mynick, irc->myhost,
+ irc->channel, "-o+o", irc->nick, irc->mynick );
+ else if( g_strcasecmp( value, "both" ) == 0 )
+ irc_write( irc, ":%s!%s@%s MODE %s %s %s %s", irc->mynick, irc->mynick, irc->myhost,
+ irc->channel, "+oo", irc->nick, irc->mynick );
+ else if( g_strcasecmp( value, "none" ) == 0 )
+ irc_write( irc, ":%s!%s@%s MODE %s %s %s %s", irc->mynick, irc->mynick, irc->myhost,
+ irc->channel, "-oo", irc->nick, irc->mynick );
else
return SET_INVALID;
-
- /* sorry for calling them op/deop - too lazy for search+replace :P */
- op[0]='\0';
- deop[0]='\0';
- for(u=irc->users; u; u=u->next) {
- /* we're only concerned with online buddies */
- if(!u->ic || !u->online)
- continue;
-
- /* just in case... */
- if(strlen(u->nick) >= 64)
- continue;
-
- /* dump out ops/deops when the corresponding name list fills up */
- if(strlen(op)+strlen(u->nick)+2 > 64) {
- char *flags = g_strnfill(nop, modeflag);
- irc_write( irc, ":%s!%s@%s MODE %s +%s%s", irc->mynick, irc->mynick, irc->myhost,
- irc->channel, flags, op );
- op[0]='\0';
- nop=0;
- g_free(flags);
- }
- if(strlen(deop)+strlen(u->nick)+2 > 64) {
- 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 );
- deop[0]='\0';
- ndeop=0;
- g_free(flags);
- }
-
- switch(mode) {
- /* "false" */
- case 0:
- g_strlcat(deop, " ", 64);
- g_strlcat(deop, u->nick, 64);
- ndeop++;
- break;
- /* "encrypted" */
- case 1:
- if(u->encrypted) {
- g_strlcat(op, " ", 64);
- g_strlcat(op, u->nick, 64);
- nop++;
- } else {
- g_strlcat(deop, " ", 64);
- g_strlcat(deop, u->nick, 64);
- ndeop++;
- }
- break;
- /* "trusted" */
- case 2:
- if(u->encrypted > 1) {
- g_strlcat(op, " ", 64);
- g_strlcat(op, u->nick, 64);
- nop++;
- } else {
- g_strlcat(deop, " ", 64);
- g_strlcat(deop, u->nick, 64);
- ndeop++;
- }
- break;
- /* "notaway" */
- case 3:
- if(u->away) {
- g_strlcat(deop, " ", 64);
- g_strlcat(deop, u->nick, 64);
- ndeop++;
- } else {
- g_strlcat(op, " ", 64);
- g_strlcat(op, u->nick, 64);
- nop++;
- }
- }
- }
- /* dump anything left in op/deop lists */
- if(*op) {
- char *flags = g_strnfill(nop, modeflag);
- irc_write( irc, ":%s!%s@%s MODE %s +%s%s", irc->mynick, irc->mynick, irc->myhost,
- irc->channel, flags, op );
- g_free(flags);
- }
- 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);
- }
-
+
return value;
}
-
-char *set_eval_op_buddies( set_t *set, char *value )
-{
- return set_eval_mode_buddies(set, value, 'o');
-}
-
-char *set_eval_halfop_buddies( set_t *set, char *value )
-{
- return set_eval_mode_buddies(set, value, 'h');
-}
-
-char *set_eval_voice_buddies( set_t *set, char *value )
-{
- return set_eval_mode_buddies(set, value, 'v');
-}
-
-/* possible values: never, opportunistic, manual, always */
-char *set_eval_otr_policy( set_t *set, char *value )
-{
- if ( !strcmp(value, "never") )
- return value;
- if ( !strcmp(value, "opportunistic") )
- return value;
- if ( !strcmp(value, "manual") )
- return value;
- if ( !strcmp(value, "always") )
- return value;
- return NULL;
-}
-
+*/