# HG changeset patch # User Matti Hamalainen # Date 1497306278 -10800 # Node ID e481947fd0516891333d3c363df6b4e2bc0748af # Parent da29f147afcbd22ac8ad41fe86491e94b44b7a1f Improve format string parsing. diff -r da29f147afcb -r e481947fd051 sidinfo.c --- a/sidinfo.c Mon Jun 05 09:31:57 2017 +0300 +++ b/sidinfo.c Tue Jun 13 01:24:38 2017 +0300 @@ -296,36 +296,43 @@ break; case 1: - if (*fmt == '@') + if (*fmt != '@') + { + if (*fmt == 0) + mode = -1; + fmt++; + break; + } + + if (fmt - start == 0) { - if (fmt - start == 0) + item.cmd = -2; + item.str = NULL; + item.chr = '@'; + if (!siStackAddItem(stack, &item)) + return FALSE; + } + else + { + char *field = th_strndup_trim(start, fmt - start, TH_TRIM_BOTH); + + int ret = argMatchPSFieldError(field); + if (ret >= 0) { - item.cmd = -2; + item.cmd = ret; + item.flags = 0; item.str = NULL; - item.chr = '@'; + if (!siStackAddItem(stack, &item)) - return FALSE; + rval = FALSE; } else - { - char *field = th_strndup_trim(start, fmt - start, TH_TRIM_BOTH); - int ret = argMatchPSFieldError(field); - th_free(field); - if (ret >= 0) - { - item.cmd = ret; - item.str = NULL; - if (!siStackAddItem(stack, &item)) - return FALSE; - } - else - rval = FALSE; - } - mode = 0; + rval = FALSE; + + th_free(field); } - else - if (*fmt == 0) - mode = -1; + + mode = 0; fmt++; break;