NeoMutt  2022-04-29-249-gaae397
Teaching an old dog new tricks
DOXYGEN
file.h
Go to the documentation of this file.
1
23#ifndef MUTT_LIB_FILE_H
24#define MUTT_LIB_FILE_H
25
26#include "config.h"
27#include <stdbool.h>
28#include <stdint.h>
29#include <stdio.h>
30#include <sys/types.h>
31
32struct Buffer;
33struct stat;
34extern const char filename_safe_chars[];
35
36/* Flags for mutt_file_read_line() */
37typedef uint8_t ReadLineFlags;
38#define MUTT_RL_NO_FLAGS 0
39#define MUTT_RL_CONT (1 << 0)
40#define MUTT_RL_EOL (1 << 1)
41
42#ifdef HAVE_STRUCT_TIMESPEC
43struct timespec;
44#else
49{
50 time_t tv_sec;
51 long tv_nsec;
52};
53#endif
54
61{
65};
66
71{
72 char *line;
73 size_t size;
75};
76
88typedef bool (*mutt_file_map_t)(char *line, int line_num, void *user_data);
89
90int mutt_file_check_empty(const char *path);
91int mutt_file_chmod(const char *path, mode_t mode);
92int mutt_file_chmod_add(const char *path, mode_t mode);
93int mutt_file_chmod_add_stat(const char *path, mode_t mode, struct stat *st);
94int mutt_file_chmod_rm(const char *path, mode_t mode);
95int mutt_file_chmod_rm_stat(const char *path, mode_t mode, struct stat *st);
96int mutt_file_copy_bytes(FILE *fp_in, FILE *fp_out, size_t size);
97int mutt_file_copy_stream(FILE *fp_in, FILE *fp_out);
98time_t mutt_file_decrease_mtime(const char *fp, struct stat *st);
99void mutt_file_expand_fmt(struct Buffer *dest, const char *fmt, const char *src);
100void mutt_file_expand_fmt_quote(char *dest, size_t destlen, const char *fmt, const char *src);
101int mutt_file_fclose(FILE **fp);
102FILE * mutt_file_fopen(const char *path, const char *mode);
103int mutt_file_fsync_close(FILE **fp);
104long mutt_file_get_size(const char *path);
105long mutt_file_get_size_fp(FILE* fp);
106void mutt_file_get_stat_timespec(struct timespec *dest, struct stat *st, enum MuttStatType type);
107bool mutt_file_iter_line(struct MuttFileIter *iter, FILE *fp, ReadLineFlags flags);
108int mutt_file_lock(int fd, bool excl, bool timeout);
109bool mutt_file_map_lines(mutt_file_map_t func, void *user_data, FILE *fp, ReadLineFlags flags);
110int mutt_file_mkdir(const char *path, mode_t mode);
111FILE * mutt_file_mkstemp_full(const char *file, int line, const char *func);
112#define mutt_file_mkstemp() mutt_file_mkstemp_full(__FILE__, __LINE__, __func__)
113int mutt_file_open(const char *path, uint32_t flags);
114size_t mutt_file_quote_filename(const char *filename, char *buf, size_t buflen);
115char * mutt_file_read_keyword(const char *file, char *buf, size_t buflen);
116char * mutt_file_read_line(char *line, size_t *size, FILE *fp, int *line_num, ReadLineFlags flags);
117int mutt_file_rename(const char *oldfile, const char *newfile);
118int mutt_file_rmtree(const char *path);
119const char *mutt_file_rotate(const char *path, int num);
120int mutt_file_safe_rename(const char *src, const char *target);
121void mutt_file_sanitize_filename(char *path, bool slash);
122int mutt_file_sanitize_regex(struct Buffer *dest, const char *src);
123bool mutt_file_seek(FILE *fp, LOFF_T offset, int whence);
124void mutt_file_set_mtime(const char *from, const char *to);
125int mutt_file_stat_compare(struct stat *st1, enum MuttStatType st1_type, struct stat *st2, enum MuttStatType st2_type);
126int mutt_file_stat_timespec_compare(struct stat *st, enum MuttStatType type, struct timespec *b);
127int mutt_file_symlink(const char *oldpath, const char *newpath);
128int mutt_file_timespec_compare(struct timespec *a, struct timespec *b);
129void mutt_file_touch_atime(int fd);
130void mutt_file_unlink(const char *s);
131void mutt_file_unlink_empty(const char *path);
132int mutt_file_unlock(int fd);
133void mutt_file_resolve_symlink(struct Buffer *buf);
134
135void mutt_buffer_quote_filename(struct Buffer *buf, const char *filename, bool add_outer);
136void mutt_buffer_file_expand_fmt_quote(struct Buffer *dest, const char *fmt, const char *src);
137
138#endif /* MUTT_LIB_FILE_H */
void mutt_file_get_stat_timespec(struct timespec *dest, struct stat *st, enum MuttStatType type)
Read the stat() time into a time value.
Definition: file.c:1611
int mutt_file_copy_stream(FILE *fp_in, FILE *fp_out)
Copy the contents of one file into another.
Definition: file.c:260
int mutt_file_open(const char *path, uint32_t flags)
Open a file.
Definition: file.c:549
char * mutt_file_read_line(char *line, size_t *size, FILE *fp, int *line_num, ReadLineFlags flags)
Read a line from a file.
Definition: file.c:720
FILE * mutt_file_fopen(const char *path, const char *mode)
Call fopen() safely.
Definition: file.c:618
int mutt_file_safe_rename(const char *src, const char *target)
NFS-safe renaming of files.
Definition: file.c:344
void mutt_file_unlink_empty(const char *path)
Delete a file if it's empty.
Definition: file.c:1367
int mutt_file_stat_compare(struct stat *st1, enum MuttStatType st1_type, struct stat *st2, enum MuttStatType st2_type)
Compare two stat infos.
Definition: file.c:1673
int mutt_file_copy_bytes(FILE *fp_in, FILE *fp_out, size_t size)
Copy some content from one file to another.
Definition: file.c:230
int mutt_file_fclose(FILE **fp)
Close a FILE handle (and NULL the pointer)
Definition: file.c:152
char * mutt_file_read_keyword(const char *file, char *buf, size_t buflen)
Read a keyword from a file.
Definition: file.c:1438
void mutt_file_touch_atime(int fd)
Set the access time to current time.
Definition: file.c:1082
int mutt_file_sanitize_regex(struct Buffer *dest, const char *src)
Escape any regex-magic characters in a string.
Definition: file.c:666
int mutt_file_check_empty(const char *path)
Is the mailbox empty.
Definition: file.c:1468
int mutt_file_mkdir(const char *path, mode_t mode)
Recursively create directories.
Definition: file.c:930
const char filename_safe_chars[]
Definition: file.c:61
int mutt_file_lock(int fd, bool excl, bool timeout)
(Try to) Lock a file using fcntl()
Definition: file.c:1231
long mutt_file_get_size_fp(FILE *fp)
Get the size of a file.
Definition: file.c:1569
void mutt_file_sanitize_filename(char *path, bool slash)
Replace unsafe characters in a filename.
Definition: file.c:647
int mutt_file_timespec_compare(struct timespec *a, struct timespec *b)
Compare to time values.
Definition: file.c:1589
void mutt_buffer_quote_filename(struct Buffer *buf, const char *filename, bool add_outer)
Quote a filename to survive the shell's quoting rules.
Definition: file.c:891
int mutt_file_unlock(int fd)
Unlock a file previously locked by mutt_file_lock()
Definition: file.c:1279
int mutt_file_chmod_rm(const char *path, mode_t mode)
Remove permissions from a file.
Definition: file.c:1179
time_t mutt_file_decrease_mtime(const char *fp, struct stat *st)
Decrease a file's modification time by 1 second.
Definition: file.c:1019
bool mutt_file_map_lines(mutt_file_map_t func, void *user_data, FILE *fp, ReadLineFlags flags)
Process lines of text read from a file pointer.
Definition: file.c:822
size_t mutt_file_quote_filename(const char *filename, char *buf, size_t buflen)
Quote a filename to survive the shell's quoting rules.
Definition: file.c:848
bool mutt_file_seek(FILE *fp, LOFF_T offset, int whence)
Wrapper for fseeko with error handling.
Definition: file.c:690
long mutt_file_get_size(const char *path)
Get the size of a file.
Definition: file.c:1551
int mutt_file_chmod(const char *path, mode_t mode)
Set permissions of a file.
Definition: file.c:1098
int mutt_file_rename(const char *oldfile, const char *newfile)
Rename a file.
Definition: file.c:1403
bool mutt_file_iter_line(struct MuttFileIter *iter, FILE *fp, ReadLineFlags flags)
Iterate over the lines from an open file pointer.
Definition: file.c:801
void mutt_file_expand_fmt_quote(char *dest, size_t destlen, const char *fmt, const char *src)
const char * mutt_file_rotate(const char *path, int num)
Rotate a set of numbered files.
Definition: file.c:519
int mutt_file_symlink(const char *oldpath, const char *newpath)
Create a symlink.
Definition: file.c:288
int mutt_file_chmod_add_stat(const char *path, mode_t mode, struct stat *st)
Add permissions to a file.
Definition: file.c:1146
bool(* mutt_file_map_t)(char *line, int line_num, void *user_data)
Definition: file.h:88
void mutt_file_expand_fmt(struct Buffer *dest, const char *fmt, const char *src)
Replace s in a string with a filename.
Definition: file.c:1503
FILE * mutt_file_mkstemp_full(const char *file, int line, const char *func)
Create temporary file safely.
Definition: file.c:985
void mutt_file_resolve_symlink(struct Buffer *buf)
Resolve a symlink in place.
Definition: file.c:1691
void mutt_file_set_mtime(const char *from, const char *to)
Set the modification time of one file from another.
Definition: file.c:1059
int mutt_file_stat_timespec_compare(struct stat *st, enum MuttStatType type, struct timespec *b)
Compare stat info with a time value.
Definition: file.c:1651
MuttStatType
Flags for mutt_file_get_stat_timespec.
Definition: file.h:61
@ MUTT_STAT_CTIME
File/dir's ctime - creation time.
Definition: file.h:64
@ MUTT_STAT_ATIME
File/dir's atime - last accessed time.
Definition: file.h:62
@ MUTT_STAT_MTIME
File/dir's mtime - last modified time.
Definition: file.h:63
uint8_t ReadLineFlags
Flags for mutt_file_read_line(), e.g. MUTT_RL_CONT.
Definition: file.h:37
int mutt_file_chmod_add(const char *path, mode_t mode)
Add permissions to a file.
Definition: file.c:1123
void mutt_file_unlink(const char *s)
Delete a file, carefully.
Definition: file.c:194
int mutt_file_fsync_close(FILE **fp)
Flush the data, before closing a file (and NULL the pointer)
Definition: file.c:168
void mutt_buffer_file_expand_fmt_quote(struct Buffer *dest, const char *fmt, const char *src)
Replace s in a string with a filename.
Definition: file.c:1488
int mutt_file_rmtree(const char *path)
Recursively remove a directory.
Definition: file.c:459
int mutt_file_chmod_rm_stat(const char *path, mode_t mode, struct stat *st)
Remove permissions from a file.
Definition: file.c:1202
String manipulation buffer.
Definition: buffer.h:34
State record for mutt_file_iter_line()
Definition: file.h:71
char * line
the line data
Definition: file.h:72
int line_num
line number
Definition: file.h:74
size_t size
allocated size of line data
Definition: file.h:73
Time value with nanosecond precision.
Definition: file.h:49
long tv_nsec
Number of nanosecond, on top.
Definition: file.h:51
time_t tv_sec
Number of seconds since the epoch.
Definition: file.h:50