static void set_int(const char *key, const char *value) { char *endp; long longval; int error; errno = 0; longval = strtol(value, &endp, 10); error = errno; while (i_isspace(*endp)) endp++; if (error != 0 || *endp != '\0' || longval < INT_MIN || longval > INT_MAX) printformat(NULL, NULL, MSGLEVEL_CLIENTERROR, TXT_INVALID_NUMBER); else settings_set_int(key, (int)longval); }
/* split the line to command and arguments */ static char *line_get_command(const char *line, char **args, int aliases) { const char *ptr, *cmdargs; char *cmd, *checkcmd; g_return_val_if_fail(line != NULL, NULL); g_return_val_if_fail(args != NULL, NULL); cmd = checkcmd = NULL; *args = ""; cmdargs = NULL; ptr = line; do { ptr = strchr(ptr, ' '); if (ptr == NULL) { checkcmd = g_strdup(line); cmdargs = ""; } else { checkcmd = g_strndup(line, (int) (ptr-line)); while (i_isspace(*ptr)) ptr++; cmdargs = ptr; } if (aliases ? !alias_find(checkcmd) : !command_find(checkcmd)) { /* not found, use the previous */ g_free(checkcmd); break; } /* found, check if it has subcommands */ g_free_not_null(cmd); if (!aliases) cmd = checkcmd; else { cmd = g_strdup(alias_find(checkcmd)); g_free(checkcmd); } *args = (char *) cmdargs; } while (ptr != NULL); if (cmd != NULL) g_strdown(cmd); return cmd; }
/* convert _underlined_ and *bold* words (and phrases) to use real underlining or bolding */ char *expand_emphasis(WI_ITEM_REC *item, const char *text) { GString *str; char *ret; int pos; g_return_val_if_fail(text != NULL, NULL); str = g_string_new(text); for (pos = 0; pos < str->len; pos++) { char type, *bgn, *end; bgn = str->str + pos; if (*bgn == '*') type = 2; /* bold */ else if (*bgn == '_') type = 31; /* underlined */ else continue; /* check that the beginning marker starts a word, and that the matching end marker ends a word */ if ((pos > 0 && !i_isspace(bgn[-1])) || !ishighalnum(bgn[1])) continue; if ((end = strchr(bgn+1, *bgn)) == NULL) continue; if (!ishighalnum(end[-1]) || ishighalnum(end[1]) || end[1] == type || end[1] == '*' || end[1] == '_') continue; if (IS_CHANNEL(item)) { /* check that this isn't a _nick_, we don't want to use emphasis on them. */ int found; char c; c = end[1]; end[1] = '\0'; found = nicklist_find(CHANNEL(item), bgn) != NULL; end[1] = c; if (found) continue; } /* allow only *word* emphasis, not *multiple words* */ if (!settings_get_bool("emphasis_multiword")) { char *c; for (c = bgn+1; c != end; c++) { if (!ishighalnum(*c)) break; } if (c != end) continue; } if (settings_get_bool("emphasis_replace")) { *bgn = *end = type; pos += (end-bgn); } else { g_string_insert_c(str, pos, type); pos += (end - bgn) + 2; g_string_insert_c(str, pos++, type); } } ret = str->str; g_string_free(str, FALSE); return ret; }