X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/ce206c3aa4db84e096e66544c235406f1515d155..148ff0430d968df2e9f1ce3a1dcee12a4dcdaf9f:/sbr/fmt_scan.c diff --git a/sbr/fmt_scan.c b/sbr/fmt_scan.c index d0bb16df..ab5940ab 100644 --- a/sbr/fmt_scan.c +++ b/sbr/fmt_scan.c @@ -25,7 +25,6 @@ # include #endif -extern int fmt_norm; /* defined in sbr/fmt_def.c = AD_NAME */ struct mailname fmt_mnull = { NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 0, 0, NULL, NULL }; @@ -519,6 +518,9 @@ fmt_scan (struct format *format, char *scanl, size_t max, int width, int *dat, case FT_IF_S: if (!(value = (str && *str))) { + if (callbacks && callbacks->trace_func) + callbacks->trace_func(callbacks->trace_context, fmt, value, + str, scanl); fmt += fmt->f_skip; continue; } @@ -526,6 +528,9 @@ fmt_scan (struct format *format, char *scanl, size_t max, int width, int *dat, case FT_IF_S_NULL: if (!(value = (str == NULL || *str == 0))) { + if (callbacks && callbacks->trace_func) + callbacks->trace_func(callbacks->trace_context, fmt, value, + str, scanl); fmt += fmt->f_skip; continue; } @@ -533,6 +538,9 @@ fmt_scan (struct format *format, char *scanl, size_t max, int width, int *dat, case FT_IF_V_EQ: if (value != fmt->f_value) { + if (callbacks && callbacks->trace_func) + callbacks->trace_func(callbacks->trace_context, fmt, value, + str, scanl); fmt += fmt->f_skip; continue; } @@ -540,6 +548,9 @@ fmt_scan (struct format *format, char *scanl, size_t max, int width, int *dat, case FT_IF_V_NE: if (value == fmt->f_value) { + if (callbacks && callbacks->trace_func) + callbacks->trace_func(callbacks->trace_context, fmt, value, + str, scanl); fmt += fmt->f_skip; continue; } @@ -547,6 +558,9 @@ fmt_scan (struct format *format, char *scanl, size_t max, int width, int *dat, case FT_IF_V_GT: if (value <= fmt->f_value) { + if (callbacks && callbacks->trace_func) + callbacks->trace_func(callbacks->trace_context, fmt, value, + str, scanl); fmt += fmt->f_skip; continue; } @@ -554,6 +568,9 @@ fmt_scan (struct format *format, char *scanl, size_t max, int width, int *dat, case FT_IF_MATCH: if (!(value = (str && match (str, fmt->f_text)))) { + if (callbacks && callbacks->trace_func) + callbacks->trace_func(callbacks->trace_context, fmt, value, + str, scanl); fmt += fmt->f_skip; continue; } @@ -568,6 +585,9 @@ fmt_scan (struct format *format, char *scanl, size_t max, int width, int *dat, case FT_IF_AMATCH: if (!(value = (str && uprf (str, fmt->f_text)))) { + if (callbacks && callbacks->trace_func) + callbacks->trace_func(callbacks->trace_context, fmt, value, + str, scanl); fmt += fmt->f_skip; continue; } @@ -598,6 +618,9 @@ fmt_scan (struct format *format, char *scanl, size_t max, int width, int *dat, break; case FT_GOTO: + if (callbacks && callbacks->trace_func) + callbacks->trace_func(callbacks->trace_context, fmt, value, + str, scanl); fmt += fmt->f_skip; continue; @@ -868,32 +891,10 @@ fmt_scan (struct format *format, char *scanl, size_t max, int width, int *dat, /* UNQUOTEs RFC-2822 quoted-string and quoted-pair */ case FT_LS_UNQUOTE: if (str) { - int m; strncpy(buffer, str, sizeof(buffer)); /* strncpy doesn't NUL-terminate if it fills the buffer */ buffer[sizeof(buffer)-1] = '\0'; - str = buffer; - - /* we will parse from buffer to buffer2 */ - n = 0; /* n is the input position in str */ - m = 0; /* m is the ouput position in buffer2 */ - - while ( str[n] != '\0') { - switch ( str[n] ) { - case '\\': - n++; - if ( str[n] != '\0') - buffer2[m++] = str[n++]; - break; - case '"': - n++; - break; - default: - buffer2[m++] = str[n++]; - break; - } - } - buffer2[m] = '\0'; + unquote_string(buffer, buffer2); str = buffer2; } break; @@ -1009,7 +1010,7 @@ fmt_scan (struct format *format, char *scanl, size_t max, int width, int *dat, if (comp->c_mn != &fmt_mnull) mnfree (comp->c_mn); if ((sp = comp->c_text) && (sp = getname(sp)) && - (mn = getm (sp, NULL, 0, fmt_norm, NULL))) { + (mn = getm (sp, NULL, 0, NULL, 0))) { comp->c_mn = mn; while (getname("")) ; @@ -1031,7 +1032,7 @@ fmt_scan (struct format *format, char *scanl, size_t max, int width, int *dat, if (comp->c_mn != &fmt_mnull) mnfree (comp->c_mn); if ((sp = comp->c_text) && (sp = getname(sp)) && - (mn = getm (sp, NULL, 0, AD_NAME, NULL))) { + (mn = getm (sp, NULL, 0, NULL, 0))) { comp->c_mn = mn; if (ismymbox(mn)) comp->c_flags |= CF_TRUE; @@ -1039,7 +1040,7 @@ fmt_scan (struct format *format, char *scanl, size_t max, int width, int *dat, comp->c_flags &= ~CF_TRUE; while ((sp = getname(sp))) if ((comp->c_flags & CF_TRUE) == 0 && - (mn = getm (sp, NULL, 0, AD_NAME, NULL))) + (mn = getm (sp, NULL, 0, NULL, 0))) if (ismymbox(mn)) comp->c_flags |= CF_TRUE; } else {