]> granicus.if.org Git - strace/commitdiff
tests: add sprintrc_grep function to libtests
authorEugene Syromyatnikov <evgsyr@gmail.com>
Tue, 6 Sep 2016 02:08:24 +0000 (05:08 +0300)
committerDmitry V. Levin <ldv@altlinux.org>
Thu, 8 Sep 2016 01:37:18 +0000 (01:37 +0000)
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.

tests/sprintrc.c
tests/tests.h

index 5e27680e3b6e6da806863dc061beeb985ca89ed7..a573a27ff97e5d35c73f7d56f7dc912097788dbe 100644 (file)
 #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);
+}
index 3043f97c4a8569e5e061d1fd8e3943f953308437..2599120c57b5eb017e28ecc29cabef4b1171aeaa 100644 (file)
@@ -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;