<div dir="ltr"><div dir="ltr"><div class="gmail_default" style="font-size:small"><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Mar 30, 2020 at 9:01 PM Li Wang <<a href="mailto:liwang@redhat.com">liwang@redhat.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr"><div style="font-size:small"><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Mar 30, 2020 at 8:43 PM Petr Vorel <<a href="mailto:pvorel@suse.cz" target="_blank">pvorel@suse.cz</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Reviewed-by: Li Wang <<a href="mailto:liwang@redhat.com" target="_blank">liwang@redhat.com</a>><br>
Reviewed-by: Yang Xu <<a href="mailto:xuyang2018.jy@cn.fujitsu.com" target="_blank">xuyang2018.jy@cn.fujitsu.com</a>><br>
Reviewed-by: Cyril Hrubis <<a href="mailto:chrubis@suse.cz" target="_blank">chrubis@suse.cz</a>><br>
Signed-off-by: Petr Vorel <<a href="mailto:pvorel@suse.cz" target="_blank">pvorel@suse.cz</a>><br>
---<br>
 doc/test-writing-guidelines.txt |  3 +++<br>
 include/tst_safe_macros.h       | 18 ++++++++++++++++++<br>
 2 files changed, 21 insertions(+)<br>
<br>
diff --git a/doc/test-writing-guidelines.txt b/doc/test-writing-guidelines.txt<br>
index 7069d3c8f..6f1eee490 100644<br>
--- a/doc/test-writing-guidelines.txt<br>
+++ b/doc/test-writing-guidelines.txt<br>
@@ -1283,6 +1283,9 @@ return value is '255' if 'execvp()' failed with 'ENOENT' and '254' otherwise.<br>
 'stdout_path' and 'stderr_path' determine where to redirect the program<br>
 stdout and stderr I/O streams.<br>
<br>
+The 'SAFE_CMD()' macro can be used automatic handling non zero exits (exits<br>
+with 'TBROK') or 'ENOENT' (exits with 'TCONF').<br>
+<br>
 .Example<br>
 [source,c]<br>
 -------------------------------------------------------------------------------<br>
diff --git a/include/tst_safe_macros.h b/include/tst_safe_macros.h<br>
index d95d26219..38eb67d1d 100644<br>
--- a/include/tst_safe_macros.h<br>
+++ b/include/tst_safe_macros.h<br>
@@ -21,6 +21,7 @@<br>
 #include <grp.h><br>
<br>
 #include "safe_macros_fn.h"<br>
+#include "tst_cmd.h"<br>
<br>
 #define SAFE_BASENAME(path) \<br>
        safe_basename(__FILE__, __LINE__, NULL, (path))<br>
@@ -534,4 +535,21 @@ int safe_personality(const char *filename, unsigned int lineno,<br>
 void safe_unshare(const char *file, const int lineno, int flags);<br>
 #define SAFE_UNSHARE(flags) safe_unshare(__FILE__, __LINE__, (flags))<br>
<br>
+void safe_cmd(const char *file, const int lineno, const char *const argv[],<br>
+                                 const char *stdout_path, const char *stderr_path)<br>
+{<br>
+       int rval;<br>
+<br>
+       switch ((rval = tst_run_cmd(argv, stdout_path, stderr_path,<br></blockquote></div></div></blockquote><div><br></div><div class="gmail_default" style="font-size:small">tst_cmd ^</div><div class="gmail_default" style="font-size:small"></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
+                                   TST_RUN_CMD_PASS_EXIT_VAL |<br>
+                                   TST_RUN_CMD_CHECK_CMD))) {<br></blockquote><div><br></div><div><div style="font-size:small">This should be TST_CMD_TCONF_ON_MISSING ^.</div></div></div><div><br></div><div><div style="font-size:small">I'd help to build&run the whole patches tomorrow, anything wrong if I can find will reply to you then.</div></div><div><br></div>-- <br><div dir="ltr"><div dir="ltr"><div>Regards,<br></div><div>Li Wang<br></div></div></div></div>
</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature"><div dir="ltr"><div>Regards,<br></div><div>Li Wang<br></div></div></div></div>