<div dir="ltr"><div dir="ltr"><div class="gmail_default" style="font-size:small">Hi Richard,</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Apr 12, 2021 at 10:55 PM Richard Palethorpe <<a href="mailto:rpalethorpe@suse.com" target="_blank">rpalethorpe@suse.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">Add 'at' variants for a number of system calls and LTP SAFE API<br>
functions. This avoids using sprintf everywhere to build paths.<br>
<br>
Also adds tst_decode_fd which allows us to retrieve the path for an FD<br>
for debugging purposes without having to store it ourselves. However<br>
the proc symlink may not be available on some systems.<br>
<br>
Signed-off-by: Richard Palethorpe <<a href="mailto:rpalethorpe@suse.com" target="_blank">rpalethorpe@suse.com</a>><br>
---<br>
 include/tst_safe_file_ops.h |  39 ++++++++<br>
 lib/tst_safe_file_ops.c     | 171 ++++++++++++++++++++++++++++++++++++<br>
 2 files changed, 210 insertions(+)<br>
 create mode 100644 lib/tst_safe_file_ops.c<br>
<br>
diff --git a/include/tst_safe_file_ops.h b/include/tst_safe_file_ops.h<br>
index 223eddd1f..dff6a793c 100644<br>
--- a/include/tst_safe_file_ops.h<br>
+++ b/include/tst_safe_file_ops.h<br>
@@ -57,4 +57,43 @@<br>
 #define TST_MOUNT_OVERLAY() \<br>
        (mount_overlay(__FILE__, __LINE__, 0) == 0)<br>
<br>
+#define SAFE_OPENAT(dirfd, path, oflags, ...)                  \<br>
+       safe_openat(__FILE__, __LINE__,                         \<br>
+                   (dirfd), (path), (oflags), ## __VA_ARGS__)<br>
+<br>
+#define SAFE_FILE_READAT(dirfd, path, buf, nbyte)                      \<br>
+       safe_file_readat(__FILE__, __LINE__,                            \<br>
+                        (dirfd), (path), (buf), (nbyte))<br>
+<br>
+<br>
+#define SAFE_FILE_PRINTFAT(dirfd, path, fmt, ...)                      \<br>
+       safe_file_printfat(__FILE__, __LINE__,                          \<br>
+                          (dirfd), (path), (fmt), __VA_ARGS__)<br>
+<br>
+#define SAFE_UNLINKAT(dirfd, path, flags)                              \<br>
+       safe_unlinkat(__FILE__, __LINE__, (dirfd), (path), (flags))<br>
+<br></blockquote><div><br></div><div><div class="gmail_default" style="font-size:small">The above macros are suggested to leave in this "tst_safe_file_ops.h" file.</div><br></div><div><div class="gmail_default" style="font-size:small">But, the function prototypes below should be moved to "safe_file_ops_fn.h",</div><div class="gmail_default" style="font-size:small">because that purposely to separate macros and function in different places.</div><div class="gmail_default" style="font-size:small">(I remember I had commented this in V2, probably you were missing it:)</div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
+char *tst_decode_fd(int fd);<br>
+<br>
+int safe_openat(const char *file, const int lineno,<br>
+               int dirfd, const char *path, int oflags, ...);<br>
+<br>
+ssize_t safe_file_readat(const char *file, const int lineno,<br>
+                        int dirfd, const char *path, char *buf, size_t nbyte);<br>
+<br>
+int tst_file_vprintfat(int dirfd, const char *path, const char *fmt, va_list va);<br>
+int tst_file_printfat(int dirfd, const char *path, const char *fmt, ...)<br>
+                       __attribute__ ((format (printf, 3, 4)));<br>
+<br>
+int safe_file_vprintfat(const char *file, const int lineno,<br>
+                       int dirfd, const char *path,<br>
+                       const char *fmt, va_list va);<br>
+<br>
+int safe_file_printfat(const char *file, const int lineno,<br>
+                      int dirfd, const char *path, const char *fmt, ...)<br>
+                       __attribute__ ((format (printf, 5, 6)));<br>
+<br>
+int safe_unlinkat(const char *file, const int lineno,<br>
+                 int dirfd, const char *path, int flags);</blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
+<br>
 #endif /* TST_SAFE_FILE_OPS */<br></blockquote><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
diff --git a/lib/tst_safe_file_ops.c b/lib/tst_safe_file_ops.c<br>
new file mode 100644<br>
index 000000000..af4157476<br>
--- /dev/null<br>
+++ b/lib/tst_safe_file_ops.c<br></blockquote><div><br></div><div><div class="gmail_default" style="font-size:small">And, we'd better achieve all the functions in "lib/safe_file_ops.c"</div><div class="gmail_default" style="font-size:small">but not create a separate new C file.</div></div></div><div><br></div>-- <br><div dir="ltr"><div dir="ltr"><div>Regards,<br></div><div>Li Wang<br></div></div></div></div>