[PATCH v2 5/9] tests: Add sprintrc_grep function
Eugene Syromyatnikov
evgsyr at gmail.com
Thu Sep 8 14:07:00 UTC 2016
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
More information about the Strace-devel
mailing list