#undef C
#undef SC
-#define VB_IS_UPPER(c) ((chartable[(unsigned char)c] & VB_UPPER) != 0)
-#define VB_IS_LOWER(c) ((chartable[(unsigned char)c] & VB_LOWER) != 0)
-#define VB_IS_DIGIT(c) ((chartable[(unsigned char)c] & VB_DIGIT) != 0)
-#define VB_IS_PUNKT(c) ((chartable[(unsigned char)c] & VB_PUNKT) != 0)
-#define VB_IS_SPACE(c) ((chartable[(unsigned char)c] & VB_SPACE) != 0)
-#define VB_IS_CTRL(c) ((chartable[(unsigned char)c] & VB_CTRL) != 0)
-#define VB_IS_SEPARATOR(c) (VB_IS_SPACE(c) || c == '"' || c == '\'')
-#define VB_IS_ALPHA(c) (VB_IS_LOWER(c) || VB_IS_UPPER(c))
-#define VB_IS_ALNUM(c) (VB_IS_ALPHA(c) || VB_IS_DIGIT(c))
-#define VB_IS_IDENT(c) (VB_IS_ALNUM(c) || c == '_')
+#define VB_IS_UPPER(c) ((chartable[(unsigned char)c] & VB_UPPER) != 0)
+#define VB_IS_LOWER(c) ((chartable[(unsigned char)c] & VB_LOWER) != 0)
+#define VB_IS_DIGIT(c) ((chartable[(unsigned char)c] & VB_DIGIT) != 0)
+#define VB_IS_PUNKT(c) ((chartable[(unsigned char)c] & VB_PUNKT) != 0)
+#define VB_IS_SPACE(c) ((chartable[(unsigned char)c] & VB_SPACE) != 0)
+#define VB_IS_CTRL(c) ((chartable[(unsigned char)c] & VB_CTRL) != 0)
+#define VB_IS_SEPARATOR(c) (VB_IS_SPACE(c) || c == '"' || c == '\'')
+#define VB_IS_ALPHA(c) (VB_IS_LOWER(c) || VB_IS_UPPER(c))
+#define VB_IS_ALNUM(c) (VB_IS_ALPHA(c) || VB_IS_DIGIT(c))
+#define VB_IS_IDENT(c) (VB_IS_ALNUM(c) || c == '_')
+#define VB_IS_USER_IDENT(c) (VB_IS_IDENT(c) || c == '-' || c == '.')
/* CSI (control sequence introducer) is the first byte of a control sequence
* and is always followed by two bytes. */
if (!*(*input + 1) || VB_IS_SPACE(*(*input + 1))) {
(*input)++;
}
- } else {
+ } else if (**input != '-') {
/* look ahead to / space or end of string to get a possible
* username for ~user pattern */
name = g_string_new("");
/* current char is ~ that is skipped to get the user name */
- while (VB_IS_IDENT(**input)) {
+ while (VB_IS_USER_IDENT(**input)) {
g_string_append_c(name, **input);
(*input)++;
}