sprintrc_grep function is sprintrc function equivalent suitable for tests where grep-base pattern matching is employed.
* tests/sprintrc.c (enum sprintrc_fmt): New sprintrc format enumeration. (sprintrc_ex): New function, renamed from sprintrc with updates regarding support of different formats. (sprintrc): Calls sprintrc_ex with SPRINTRC_FMT_RAW. (sprintrc_grep): Calls sprintrc_ex with SPRINTRC_FMT_GREP. * tests/tests.h: sprintrc_grep declaration added. --- tests/sprintrc.c | 41 ++++++++++++++++++++++++++++++++++------- tests/tests.h | 2 ++ 2 files changed, 36 insertions(+), 7 deletions(-) diff --git a/tests/sprintrc.c b/tests/sprintrc.c index 5e27680..a573a27 100644 --- a/tests/sprintrc.c +++ b/tests/sprintrc.c @@ -28,25 +28,40 @@ #include "tests.h" #include <stdio.h> +enum sprintrc_fmt { + SPRINTRC_FMT_RAW, + SPRINTRC_FMT_GREP, +}; + /** * Provides pointer to static string buffer with printed return code in format * used by strace - with errno and error message. * - * @param rc Return code. - * @return Pointer to (statically allocated) buffer containing decimal - * representation of return code and errno/error message in case @rc - * is equal to -1. + * @param rc Return code. + * @param fmt Output format. Currently, raw (used for diff matching) and grep + * (for extended POSIX regex-based pattern matching) formats are + * supported. + * @return Pointer to (statically allocated) buffer containing decimal + * representation of return code and errno/error message in case @rc + * is equal to -1. */ -const char * -sprintrc(long rc) +static inline const char * +sprintrc_ex(long rc, enum sprintrc_fmt fmt) { + static const char *formats[] = { + [SPRINTRC_FMT_RAW] = "-1 %s (%m)", + [SPRINTRC_FMT_GREP] = "-1 %s \\(%m\\)", + }; static char buf[4096]; + if (fmt >= ARRAY_SIZE(formats)) + perror_msg_and_fail("sprintrc_ex: incorrect format provided"); + if (rc == 0) return "0"; int ret = (rc == -1) - ? snprintf(buf, sizeof(buf), "-1 %s (%m)", errno2name()) + ? snprintf(buf, sizeof(buf), formats[fmt], errno2name()) : snprintf(buf, sizeof(buf), "%ld", rc); if (ret < 0) @@ -57,3 +72,15 @@ sprintrc(long rc) return buf; } + +const char * +sprintrc(long rc) +{ + return sprintrc_ex(rc, SPRINTRC_FMT_RAW); +} + +const char * +sprintrc_grep(long rc) +{ + return sprintrc_ex(rc, SPRINTRC_FMT_GREP); +} diff --git a/tests/tests.h b/tests/tests.h index 3043f97..2599120 100644 --- a/tests/tests.h +++ b/tests/tests.h @@ -101,6 +101,8 @@ const char *signal2name(int); /* Print return code and, in case return code is -1, errno information. */ const char *sprintrc(long rc); +/* sprintrc variant suitable for usage as part of grep pattern. */ +const char *sprintrc_grep(long rc); struct xlat; -- 1.7.10.4 ------------------------------------------------------------------------------ _______________________________________________ Strace-devel mailing list Strace-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/strace-devel