If testcase calls tst_brkm(...) to terminate test, usually we need
to serch the message outputted by tst_brkm() to locate it in test
program, it is inefficient, especially we have multiple same messages,
so here we choose to make tst_brkm output extra information about
source files and line number. Also make similar change to tst_resm().

E.g.:
We execute getxattr01 before this patch:
[root@localhost getxattr]# ./getxattr01
getxattr01    1  TCONF  :  No xattr support in fs or mount without user_xattr 
option
getxattr01    2  TCONF  :  Remaining cases not appropriate for configuration

After this patch:
[root@localhost getxattr]# ./getxattr01
getxattr01    1  TCONF  :  getxattr01.c:158: No xattr support in fs or mount 
without user_xattr option
getxattr01    2  TCONF  :  Remaining cases not appropriate for configuration

Signed-off-by: Xiaoguang Wang <[email protected]>
---
 include/test.h | 44 ++++++++++++++++++++------
 lib/tst_res.c  | 99 ++++++++++++++++++++++++----------------------------------
 2 files changed, 75 insertions(+), 68 deletions(-)

diff --git a/include/test.h b/include/test.h
index 011866d..2013a36 100644
--- a/include/test.h
+++ b/include/test.h
@@ -118,16 +118,42 @@ extern int Forker_npids;
 
 /* lib/tst_res.c */
 const char *strttype(int ttype);
-void tst_res(int ttype, const char *fname, const char *arg_fmt, ...)
-       __attribute__ ((format (printf, 3, 4)));
-void tst_resm(int ttype, const char *arg_fmt, ...)
-       __attribute__ ((format (printf, 2, 3)));
-void tst_resm_hexd(int ttype, const void *buf, size_t size, const char 
*arg_fmt, ...)
-       __attribute__ ((format (printf, 4, 5)));
-void tst_brk(int ttype, const char *fname, void (*func)(void), const char 
*arg_fmt, ...)
+void tst_res_(const char *file, const int lineno, int ttype,
+       const char *fname, const char *arg_fmt, ...)
+       __attribute__ ((format (printf, 5, 6)));
+
+#define tst_res(ttype, fname, arg_fmt, ...) \
+       tst_res_(__FILE__, __LINE__, (ttype), (fname), \
+                (arg_fmt), ##__VA_ARGS__)
+
+void tst_resm_(const char *file, const int lineno, int ttype,
+       const char *arg_fmt, ...)
        __attribute__ ((format (printf, 4, 5)));
-void tst_brkm(int ttype, void (*func)(void), const char *arg_fmt, ...)
-       __attribute__ ((format (printf, 3, 4))) LTP_ATTRIBUTE_NORETURN;
+#define tst_resm(ttype, arg_fmt, ...) \
+       tst_resm_(__FILE__, __LINE__, (ttype), \
+                 (arg_fmt), ##__VA_ARGS__)
+
+void tst_resm_hexd_(const char *file, const int lineno, int ttype,
+       const void *buf, size_t size, const char *arg_fmt, ...)
+       __attribute__ ((format (printf, 6, 7)));
+#define tst_resm_hexd(ttype, buf, size, arg_fmt, ...) \
+       tst_resm_hexd_(__FILE__, __LINE__, (ttype), (buf), (size), \
+                      (arg_fmt), ##__VA_ARGS__)
+
+void tst_brk_(const char *file, const int lineno, int ttype,
+       const char *fname, void (*func)(void), const char *arg_fmt, ...)
+       __attribute__ ((format (printf, 6, 7)));
+#define tst_brk(ttype, fname, func, arg_fmt, ...) \
+       tst_brk_(__FILE__, __LINE__, (ttype), (fname), (func), \
+                (arg_fmt), ##__VA_ARGS__)
+
+void tst_brkm_(const char *file, const int lineno, int ttype,
+       void (*func)(void), const char *arg_fmt, ...)
+       __attribute__ ((format (printf, 5, 6))) LTP_ATTRIBUTE_NORETURN;
+#define tst_brkm(ttype, func, arg_fmt, ...) \
+       tst_brkm_(__FILE__, __LINE__, (ttype), (func), \
+                 (arg_fmt), ##__VA_ARGS__)
+
 void tst_require_root(void (*func)(void));
 int  tst_environ(void);
 void tst_exit(void) LTP_ATTRIBUTE_NORETURN;
diff --git a/lib/tst_res.c b/lib/tst_res.c
index 0383c98..c584265 100644
--- a/lib/tst_res.c
+++ b/lib/tst_res.c
@@ -36,12 +36,12 @@
  *    OS Testing - Silicon Graphics, Inc.
  *
  *    FUNCTION NAME     :
- *      tst_res() -       Print result message (include file contents)
- *      tst_resm() -      Print result message
- *      tst_resm_hexd() - Print result message (add buffer contents in hex)
- *      tst_brk() -       Print result message (include file contents)
+ *      tst_res_() -       Print result message (include file contents)
+ *      tst_resm_() -      Print result message
+ *      tst_resm_hexd_() - Print result message (add buffer contents in hex)
+ *      tst_brk_() -       Print result message (include file contents)
  *                        and break remaining test cases
- *      tst_brkm() -      Print result message and break remaining test
+ *      tst_brkm_() -      Print result message and break remaining test
  *                        cases
  *      tst_flush() -     Print any messages pending in the output stream
  *      tst_exit() -      Exit test with a meaningful exit value.
@@ -49,35 +49,6 @@
  *
  *    FUNCTION TITLE    : Standard automated test result reporting mechanism
  *
- *    SYNOPSIS:
- *      #include "test.h"
- *
- *      void tst_res(ttype, fname, tmesg [,arg]...)
- *      int  ttype;
- *      char *fname;
- *      char *tmesg;
- *
- *      void tst_resm(ttype, tmesg [,arg]...)
- *      int  ttype;
- *      char *tmesg;
- *
- *      void tst_brk(ttype, fname, cleanup, tmesg, [,argv]...)
- *      int  ttype;
- *      char *fname;
- *      void (*cleanup)();
- *      char *tmesg;
- *
- *      void tst_brkm(ttype, cleanup, tmesg [,arg]...)
- *      int  ttype;
- *      void (*cleanup)();
- *      char *tmesg;
- *
- *      void tst_flush()
- *
- *      void tst_exit()
- *
- *      int  tst_environ()
- *
  *    AUTHOR            : Kent Rogers (from Dave Fenner's original)
  *
  *    CO-PILOT          : Rich Logan
@@ -224,25 +195,29 @@ const char *strttype(int ttype)
 #include "signame.h"
 
 /*
- * tst_res() - Main result reporting function.  Handle test information
+ * tst_res_() - Main result reporting function.  Handle test information
  *             appropriately depending on output display mode.  Call
  *             tst_condense() or tst_print() to actually print results.
- *             All result functions (tst_resm(), tst_brk(), etc.)
+ *             All result functions (tst_resm_(), tst_brk_(), etc.)
  *             eventually get here to print the results.
  */
-void tst_res(int ttype, const char *fname, const char *arg_fmt, ...)
+void tst_res_(const char *file, const int lineno, int ttype,
+       const char *fname, const char *arg_fmt, ...)
 {
        pthread_mutex_lock(&tmutex);
 
        char tmesg[USERMESG];
+       int len = 0;
        int ttype_result = TTYPE_RESULT(ttype);
 
 #if DEBUG
-       printf("IN tst_res; tst_count = %d\n", tst_count);
+       printf("IN tst_res_; tst_count = %d\n", tst_count);
        fflush(stdout);
 #endif
 
-       EXPAND_VAR_ARGS(tmesg, arg_fmt, USERMESG);
+       if (file && (ttype_result != TPASS && ttype_result != TINFO))
+               len = sprintf(tmesg, "%s:%d: ", file, lineno);
+       EXPAND_VAR_ARGS(tmesg + len, arg_fmt, USERMESG - len);
 
        /*
         * Save the test result type by ORing ttype into the current exit
@@ -599,10 +574,11 @@ int tst_environ(void)
 static int tst_brk_entered = 0;
 
 /*
- * tst_brk() - Fail or break current test case, and break the remaining
+ * tst_brk_() - Fail or break current test case, and break the remaining
  *             tests cases.
  */
-void tst_brk(int ttype, const char *fname, void (*func) (void), const char 
*arg_fmt, ...)
+void tst_brk_(const char *file, const int lineno, int ttype, const char *fname,
+       void (*func)(void), const char *arg_fmt, ...)
 {
        pthread_mutex_lock(&tmutex);
 
@@ -610,7 +586,7 @@ void tst_brk(int ttype, const char *fname, void (*func) 
(void), const char *arg_
        int ttype_result = TTYPE_RESULT(ttype);
 
 #if DEBUG
-       printf("IN tst_brk\n");
+       printf("IN tst_brk_\n");
        fflush(stdout);
        fflush(stdout);
 #endif
@@ -629,14 +605,16 @@ void tst_brk(int ttype, const char *fname, void (*func) 
(void), const char *arg_
                ttype = (ttype & ~ttype_result) | TBROK;
        }
 
-       tst_res(ttype, fname, "%s", tmesg);
+       tst_res_(file, lineno, ttype, fname, "%s", tmesg);
        if (tst_brk_entered == 0) {
-               if (ttype_result == TCONF)
-                       tst_res(ttype, NULL,
+               if (ttype_result == TCONF) {
+                       tst_res_(file, lineno, ttype, NULL,
                                "Remaining cases not appropriate for "
                                "configuration");
-               else if (ttype_result == TBROK)
-                       tst_res(TBROK, NULL, "Remaining cases broken");
+               } else if (ttype_result == TBROK) {
+                       tst_res_(file, lineno, TBROK, NULL,
+                                "Remaining cases broken");
+               }
        }
 
        /*
@@ -655,9 +633,10 @@ void tst_brk(int ttype, const char *fname, void (*func) 
(void), const char *arg_
 }
 
 /*
- * tst_resm() - Interface to tst_res(), with no filename.
+ * tst_resm_() - Interface to tst_res(), with no filename.
  */
-void tst_resm(int ttype, const char *arg_fmt, ...)
+void tst_resm_(const char *file, const int lineno, int ttype,
+       const char *arg_fmt, ...)
 {
        char tmesg[USERMESG];
 
@@ -669,21 +648,22 @@ void tst_resm(int ttype, const char *arg_fmt, ...)
 
        EXPAND_VAR_ARGS(tmesg, arg_fmt, USERMESG);
 
-       tst_res(ttype, NULL, "%s", tmesg);
+       tst_res_(file, lineno, ttype, NULL, "%s", tmesg);
 }
 
 /*
- * tst_resm_hexd() - Interface to tst_res(), with no filename.
+ * tst_resm_hexd_() - Interface to tst_res(), with no filename.
  * Also, dump specified buffer in hex.
  */
-void tst_resm_hexd(int ttype, const void *buf, size_t size, const char 
*arg_fmt, ...)
+void tst_resm_hexd_(const char *file, const int lineno, int ttype,
+       const void *buf, size_t size, const char *arg_fmt, ...)
 {
        pthread_mutex_lock(&tmutex);
 
        char tmesg[USERMESG];
 
 #if DEBUG
-       printf("IN tst_resm_hexd\n");
+       printf("IN tst_resm_hexd_\n");
        fflush(stdout);
 #endif
 
@@ -696,7 +676,7 @@ void tst_resm_hexd(int ttype, const void *buf, size_t size, 
const char *arg_fmt,
 
        if (size > size_max || size == 0 ||
                (offset + size * (symb_num + 1)) >= USERMESG)
-               tst_res(ttype, NULL, "%s", tmesg);
+               tst_res_(file, lineno, ttype, NULL, "%s", tmesg);
        else
                pmesg += offset;
 
@@ -709,7 +689,7 @@ void tst_resm_hexd(int ttype, const void *buf, size_t size, 
const char *arg_fmt,
                sprintf(pmesg, "%02x", ((unsigned char *)buf)[i]);
                pmesg += symb_num;
                if ((i + 1) % size_max == 0 || i + 1 == size) {
-                       tst_res(ttype, NULL, "%s", tmesg);
+                       tst_res_(file, lineno, ttype, NULL, "%s", tmesg);
                        pmesg = tmesg;
                }
        }
@@ -718,21 +698,22 @@ void tst_resm_hexd(int ttype, const void *buf, size_t 
size, const char *arg_fmt,
 }
 
 /*
- * tst_brkm() - Interface to tst_brk(), with no filename.
+ * tst_brkm_() - Interface to tst_brk(), with no filename.
  */
-void tst_brkm(int ttype, void (*func) (void), const char *arg_fmt, ...)
+void tst_brkm_(const char *file, const int lineno, int ttype,
+       void (*func)(void), const char *arg_fmt, ...)
 {
        char tmesg[USERMESG];
 
 #if DEBUG
-       printf("IN tst_brkm\n");
+       printf("IN tst_brkm_\n");
        fflush(stdout);
        fflush(stdout);
 #endif
 
        EXPAND_VAR_ARGS(tmesg, arg_fmt, USERMESG);
 
-       tst_brk(ttype, NULL, func, "%s", tmesg);
+       tst_brk_(file, lineno, ttype, NULL, func, "%s", tmesg);
        /* Shouldn't be reach, but fixes build time warnings about noreturn. */
        abort();
 }
-- 
1.8.2.1


------------------------------------------------------------------------------
Want fast and easy access to all the code in your enterprise? Index and
search up to 200,000 lines of code with a free copy of Black Duck
Code Sight - the same software that powers the world's largest code
search on Ohloh, the Black Duck Open Hub! Try it now.
http://p.sf.net/sfu/bds
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list

Reply via email to