mirror of
https://github.com/postgres/postgres.git
synced 2025-11-15 03:41:20 +03:00
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
This commit is contained in:
@@ -1,6 +1,4 @@
|
||||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* 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 */
|
||||
|
||||
Reference in New Issue
Block a user