aboutsummaryrefslogtreecommitdiff
path: root/src/include/common/file_utils.h
diff options
context:
space:
mode:
authorThomas Munro <tmunro@postgresql.org>2020-09-07 18:11:46 +1200
committerThomas Munro <tmunro@postgresql.org>2020-09-07 18:28:06 +1200
commit861c6e7c8e4dfdd842442dde47cc653764baff4f (patch)
tree59e93bee1eb19525460711f762293c894791cc62 /src/include/common/file_utils.h
parentf0942b1327e8fa32b38a02eaff627c16b517c3f9 (diff)
downloadpostgresql-861c6e7c8e4dfdd842442dde47cc653764baff4f.tar.gz
postgresql-861c6e7c8e4dfdd842442dde47cc653764baff4f.zip
Skip unnecessary stat() calls in walkdir().
Some kernels can tell us the type of a "dirent", so we can avoid a call to stat() or lstat() in many cases. Define a new function get_dirent_type() to contain that logic, for use by the backend and frontend versions of walkdir(), and perhaps other callers in future. Reviewed-by: Tom Lane <tgl@sss.pgh.pa.us> Reviewed-by: Juan José Santamaría Flecha <juanjo.santamaria@gmail.com> Discussion: https://postgr.es/m/CA%2BhUKG%2BFzxupGGN4GpUdbzZN%2Btn6FQPHo8w0Q%2BAPH5Wz8RG%2Bww%40mail.gmail.com
Diffstat (limited to 'src/include/common/file_utils.h')
-rw-r--r--src/include/common/file_utils.h20
1 files changed, 18 insertions, 2 deletions
diff --git a/src/include/common/file_utils.h b/src/include/common/file_utils.h
index a7add75efa1..fef846485f8 100644
--- a/src/include/common/file_utils.h
+++ b/src/include/common/file_utils.h
@@ -1,7 +1,5 @@
/*-------------------------------------------------------------------------
*
- * File-processing utility routines for frontend code
- *
* Assorted utility functions to work on files.
*
*
@@ -15,10 +13,28 @@
#ifndef FILE_UTILS_H
#define FILE_UTILS_H
+#include <dirent.h>
+
+typedef enum PGFileType
+{
+ PGFILETYPE_ERROR,
+ PGFILETYPE_UNKNOWN,
+ PGFILETYPE_REG,
+ PGFILETYPE_DIR,
+ PGFILETYPE_LNK
+} PGFileType;
+
+#ifdef FRONTEND
extern int fsync_fname(const char *fname, bool isdir);
extern void fsync_pgdata(const char *pg_data, int serverVersion);
extern void fsync_dir_recurse(const char *dir);
extern int durable_rename(const char *oldfile, const char *newfile);
extern int fsync_parent_path(const char *fname);
+#endif
+
+extern PGFileType get_dirent_type(const char *path,
+ const struct dirent *de,
+ bool look_through_symlinks,
+ int elevel);
#endif /* FILE_UTILS_H */