From 0fc1d0788dac3266f626946424cdff41bdc8aaed Mon Sep 17 00:00:00 2001 From: Alasdair Kergon Date: Thu, 5 Dec 2002 22:51:15 +0000 Subject: [PATCH] Add sync_dir() --- lib/misc/lvm-file.c | 32 ++++++++++++++++++++++++++++++++ lib/misc/lvm-file.h | 3 +++ 2 files changed, 35 insertions(+) diff --git a/lib/misc/lvm-file.c b/lib/misc/lvm-file.c index cde9e9e42..fdbd07af7 100644 --- a/lib/misc/lvm-file.c +++ b/lib/misc/lvm-file.c @@ -194,3 +194,35 @@ int is_empty_dir(const char *dir) return dirent ? 0 : 1; } + +void sync_dir(const char *file) +{ + int fd; + char *dir, *c; + + if (!(dir = dbg_strdup(file))) { + log_error("sync_dir failed in strdup"); + return; + } + + if (!dir_exists(dir)) { + c = dir + strlen(dir); + while (*c != '/' && c > dir) + c--; + + *c = '\0'; + } + + if ((fd = open(dir, O_RDONLY)) == -1) { + log_sys_error("open", dir); + goto out; + } + + if (fsync(fd) == -1) + log_sys_error("fsync", dir); + + close(fd); + + out: + dbg_free(dir); +} diff --git a/lib/misc/lvm-file.h b/lib/misc/lvm-file.h index 687161f93..5855e03ff 100644 --- a/lib/misc/lvm-file.h +++ b/lib/misc/lvm-file.h @@ -32,3 +32,6 @@ int is_empty_dir(const char *dir); * if directory was successfully created (or already exists), else 0. */ int create_dir(const char *dir); + +/* Sync directory changes */ +void sync_dir(const char *file); -- 2.43.5