[PATCH 3/7] tests: Add sprintrc_grep function

Eugene Syromyatnikov evgsyr at gmail.com
Tue Sep 6 02:08:24 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