From: Eugene Syromyatnikov Date: Tue, 6 Sep 2016 02:08:24 +0000 (+0300) Subject: tests: add sprintrc_grep function to libtests X-Git-Tag: v4.14~97 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=6d995ae68b974b389a499bd1d0dfe3e0de92905a;p=strace tests: add sprintrc_grep function to libtests New sprintrc_grep function is sprintrc function equivalent suitable for tests where grep-base pattern matching is employed. * tests/tests.h (sprintrc_grep): New prototype. * tests/sprintrc.c (enum sprintrc_fmt): New sprintrc format enumeration. (sprintrc_ex): New function, renamed from sprintrc and updated to support different formats. (sprintrc): Change to use sprintrc_ex with SPRINTRC_FMT_RAW. (sprintrc_grep): New function, calls sprintrc_ex with SPRINTRC_FMT_GREP. --- diff --git a/tests/sprintrc.c b/tests/sprintrc.c index 5e27680e..a573a27f 100644 --- a/tests/sprintrc.c +++ b/tests/sprintrc.c @@ -28,25 +28,40 @@ #include "tests.h" #include +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 3043f97c..2599120c 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;