mesa/src/util/os_file_notify.h
Mark Collins 9a4bed6f05 util: Add file modification notifier utility
A helper to watch files for changes or deletions using inotify, with
a callback mechanism to notify the user of changes.

Signed-off-by: Mark Collins <mark@igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/32906>
2025-01-30 17:42:06 +00:00

52 lines
1.8 KiB
C

/*
* Copyright © 2025 Igalia S.L.
* SPDX-License-Identifier: MIT
*
* File modification and deletion notification mechanism.
*/
#ifndef _OS_FILE_NOTIFY_H_
#define _OS_FILE_NOTIFY_H_
#include <stdbool.h>
#include <stdio.h>
#ifdef __cplusplus
extern "C" {
#endif
struct os_file_notifier;
typedef struct os_file_notifier *os_file_notifier_t;
/*
* Callback function for file notification.
* The `data` parameter is the same as the one passed to os_file_notifier_create().
* The `path` parameter is the path of the file that was modified.
* The `created` parameter is true if the file was created.
* The `deleted` parameter is true if the file was deleted.
* The `dir_deleted` parameter is true if the file's parent directory was deleted. No further events will be delivered.
*/
typedef void (*os_file_notify_cb)(void *data, const char *path, bool created, bool deleted, bool dir_deleted);
/*
* Create a new file notifier which watches the file at the specified path.
* If a file notifier cannot be created, NULL is returned with `error_str` (if non-NULL) set to an error message.
* Note: The folder must already exist, if the folder containing the file doesn't exist this will fail.
* If the folder is deleted after the file notifier is created, the file notifier will no longer deliver events.
* If the file is deleted and recreated, the file notifier will deliver a deletion event followed by a creation event.
* The file notifier always delivers an event at startup. If the file doesn't exist, the `deleted` parameter will be true.
*/
os_file_notifier_t
os_file_notifier_create(const char *path, os_file_notify_cb cb, void *data, const char **error_str);
/*
* Destroy a file notifier.
*/
void
os_file_notifier_destroy(os_file_notifier_t notifier);
#ifdef __cplusplus
}
#endif
#endif /* _OS_FILE_NOTIFY_H_ */