| 1 | /* Detecting file changes using modification times. | 
|---|
| 2 | Copyright (C) 2017-2020 Free Software Foundation, Inc. | 
|---|
| 3 | This file is part of the GNU C Library. | 
|---|
| 4 |  | 
|---|
| 5 | The GNU C Library is free software; you can redistribute it and/or | 
|---|
| 6 | modify it under the terms of the GNU Lesser General Public | 
|---|
| 7 | License as published by the Free Software Foundation; either | 
|---|
| 8 | version 2.1 of the License, or (at your option) any later version. | 
|---|
| 9 |  | 
|---|
| 10 | The GNU C Library is distributed in the hope that it will be useful, | 
|---|
| 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | 
|---|
| 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | 
|---|
| 13 | Lesser General Public License for more details. | 
|---|
| 14 |  | 
|---|
| 15 | You should have received a copy of the GNU Lesser General Public | 
|---|
| 16 | License along with the GNU C Library; if not, see | 
|---|
| 17 | <https://www.gnu.org/licenses/>.  */ | 
|---|
| 18 |  | 
|---|
| 19 | #ifndef _FILE_CHANGE_DETECTION_H | 
|---|
| 20 | #define _FILE_CHANGE_DETECTION_H | 
|---|
| 21 |  | 
|---|
| 22 | #include <stdbool.h> | 
|---|
| 23 | #include <stdio.h> | 
|---|
| 24 | #include <sys/stat.h> | 
|---|
| 25 | #include <sys/types.h> | 
|---|
| 26 |  | 
|---|
| 27 | /* Items for identifying a particular file version.  Excerpt from | 
|---|
| 28 | struct stat64.  */ | 
|---|
| 29 | struct file_change_detection | 
|---|
| 30 | { | 
|---|
| 31 | /* Special values: 0 if file does not exist.  -1 to force mismatch | 
|---|
| 32 | with the next comparison.  */ | 
|---|
| 33 | off64_t size; | 
|---|
| 34 |  | 
|---|
| 35 | ino64_t ino; | 
|---|
| 36 | struct timespec mtime; | 
|---|
| 37 | struct timespec ctime; | 
|---|
| 38 | }; | 
|---|
| 39 |  | 
|---|
| 40 | /* Returns true if *LEFT and *RIGHT describe the same version of the | 
|---|
| 41 | same file.  */ | 
|---|
| 42 | bool __file_is_unchanged (const struct file_change_detection *left, | 
|---|
| 43 | const struct file_change_detection *right); | 
|---|
| 44 |  | 
|---|
| 45 | /* Extract file change information to *FILE from the stat buffer | 
|---|
| 46 | *ST.  */ | 
|---|
| 47 | void __file_change_detection_for_stat (struct file_change_detection *file, | 
|---|
| 48 | const struct stat64 *st); | 
|---|
| 49 |  | 
|---|
| 50 | /* Writes file change information for PATH to *FILE.  Returns true on | 
|---|
| 51 | success.  For benign errors, *FILE is cleared, and true is | 
|---|
| 52 | returned.  For errors indicating resource outages and the like, | 
|---|
| 53 | false is returned.  */ | 
|---|
| 54 | bool __file_change_detection_for_path (struct file_change_detection *file, | 
|---|
| 55 | const char *path); | 
|---|
| 56 |  | 
|---|
| 57 | /* Writes file change information for the stream FP to *FILE.  Returns | 
|---|
| 58 | ture on success, false on failure.  If FP is NULL, treat the file | 
|---|
| 59 | as non-existing.  */ | 
|---|
| 60 | bool __file_change_detection_for_fp (struct file_change_detection *file, | 
|---|
| 61 | FILE *fp); | 
|---|
| 62 |  | 
|---|
| 63 | #ifndef _ISOMAC | 
|---|
| 64 | libc_hidden_proto (__file_is_unchanged) | 
|---|
| 65 | libc_hidden_proto (__file_change_detection_for_stat) | 
|---|
| 66 | libc_hidden_proto (__file_change_detection_for_path) | 
|---|
| 67 | libc_hidden_proto (__file_change_detection_for_fp) | 
|---|
| 68 | #endif | 
|---|
| 69 |  | 
|---|
| 70 | #endif /* _FILE_CHANGE_DETECTION_H */ | 
|---|
| 71 |  | 
|---|