safe_macros: Add opendir(), readdir(), closedir()

Signed-off-by: Cyril Hrubis <chrubis@suse.cz>
diff --git a/lib/safe_macros.c b/lib/safe_macros.c
index 688822e..9c0ba8d 100644
--- a/lib/safe_macros.c
+++ b/lib/safe_macros.c
@@ -711,3 +711,51 @@
 
 	return rval;
 }
+
+DIR* safe_opendir(const char *file, const int lineno, void (cleanup_fn)(void),
+                  const char *name)
+{
+	DIR *rval;
+
+	rval = opendir(name);
+
+	if (!rval) {
+		tst_brkm(TBROK | TERRNO, cleanup_fn,
+		         "%s:%d: opendir(%s) failed", file, lineno, name);
+	}
+
+	return rval;
+}
+
+int safe_closedir(const char *file, const int lineno, void (cleanup_fn)(void),
+                  DIR *dirp)
+{
+	int rval;
+
+	rval = closedir(dirp);
+
+	if (rval) {
+		tst_brkm(TBROK | TERRNO, cleanup_fn,
+		         "%s:%d: closedir(%p) failed", file, lineno, dirp);
+	}
+
+	return rval;
+}
+
+struct dirent *safe_readdir(const char *file, const int lineno, void (cleanup_fn)(void),
+                            DIR *dirp)
+{
+	struct dirent *rval;
+	int err = errno;
+
+	errno = 0;
+	rval = readdir(dirp);
+
+	if (!rval && errno) {
+		tst_brkm(TBROK | TERRNO, cleanup_fn,
+		         "%s:%d: readdir(%p) failed", file, lineno, dirp);
+	}
+
+	errno = err;
+	return rval;
+}