Added SILC Thread Queue API
[runtime.git] / apps / irssi / src / core / special-vars.c
index 2556cd63ca0775c097ae337c37e30c818323f30f..6906664207a379b318849441bba558dfda383826 100644 (file)
@@ -106,15 +106,17 @@ static char *get_long_variable_value(const char *key, SERVER_REC *server,
                                     void *item, int *free_ret)
 {
        EXPANDO_FUNC func;
-       char *ret;
+       const char *ret;
        int type;
 
        *free_ret = FALSE;
 
        /* expando? */
         func = expando_find_long(key);
-       if (func != NULL)
+       if (func != NULL) {
+               current_expando = key;
                return func(server, item, free_ret);
+       }
 
        /* internal setting? */
        type = settings_get_type(key);
@@ -124,7 +126,7 @@ static char *get_long_variable_value(const char *key, SERVER_REC *server,
        /* environment variable? */
        ret = g_getenv(key);
        if (ret != NULL)
-               return ret;
+               return (char *) ret;
 
        return NULL;
 }
@@ -176,7 +178,15 @@ static char *get_variable(char **cmd, SERVER_REC *server, void *item,
        }
        *free_ret = FALSE;
        func = expando_find_char(**cmd);
-       return func == NULL ? NULL : func(server, item, free_ret);
+       if (func == NULL)
+               return NULL;
+       else {
+               char str[2];
+
+               str[0] = **cmd; str[1] = '\0';
+               current_expando = str;
+               return func(server, item, free_ret);
+       }
 }
 
 static char *get_history(char **cmd, void *item, int *free_ret)
@@ -381,7 +391,7 @@ char *parse_special(char **cmd, SERVER_REC *server, void *item,
        }
 
        nest_free = FALSE; nest_value = NULL;
-       if (**cmd == '(') {
+       if (**cmd == '(' && (*cmd)[1] != '\0') {
                /* subvariable */
                int toplevel = nested_orig_cmd == NULL;
 
@@ -397,6 +407,9 @@ char *parse_special(char **cmd, SERVER_REC *server, void *item,
                                                   flags);
                }
 
+               if (nest_value == NULL || *nest_value == '\0')
+                       return NULL;
+
                while ((*nested_orig_cmd)[1] != '\0') {
                        (*nested_orig_cmd)++;
                        if (**nested_orig_cmd == ')')
@@ -411,6 +424,8 @@ char *parse_special(char **cmd, SERVER_REC *server, void *item,
                brackets = FALSE;
        else {
                /* special value is inside {...} (foo${test}bar -> fooXXXbar) */
+               if ((*cmd)[1] == '\0')
+                       return NULL;
                (*cmd)++;
                brackets = TRUE;
        }