NeoMutt  2025-12-11-872-g385a04
Teaching an old dog new tricks
DOXYGEN
Loading...
Searching...
No Matches
file.h
Go to the documentation of this file.
1
23
24#ifndef MUTT_MUTT_FILE_H
25#define MUTT_MUTT_FILE_H
26
27#include "config.h"
28#include <dirent.h>
29#include <stdbool.h>
30#include <stdint.h>
31#include <stdio.h>
32#include <sys/types.h>
33
34struct Buffer;
35struct stat;
36extern const char FilenameSafeChars[];
37
42{
44 MUTT_RL_CONT = 1U << 0,
45 MUTT_RL_EOL = 1U << 1,
46};
47typedef uint8_t ReadLineFlags;
48
49struct timespec;
50
62
71
76{
77 char *line;
78 size_t size;
80};
81
93typedef bool (*mutt_file_map_t)(char *line, int line_num, void *user_data);
94
95int mutt_file_check_empty(const char *path);
96int mutt_file_chmod_add(const char *path, mode_t mode);
97int mutt_file_chmod_add_stat(const char *path, mode_t mode, struct stat *st);
98int mutt_file_chmod_rm_stat(const char *path, mode_t mode, struct stat *st);
99int mutt_file_copy_bytes(FILE *fp_in, FILE *fp_out, size_t size);
100int mutt_file_copy_stream(FILE *fp_in, FILE *fp_out);
101time_t mutt_file_decrease_mtime(const char *fp, struct stat *st);
102void mutt_file_expand_fmt(struct Buffer *dest, const char *fmt, const char *src);
103void mutt_file_expand_fmt_quote(char *dest, size_t destlen, const char *fmt, const char *src);
104int mutt_file_fclose_full(FILE **fp, const char *file, int line, const char *func);
105FILE * mutt_file_fopen_full(const char *path, const char *mode, const mode_t perms, const char *file, int line, const char *func);
106FILE * mutt_file_fopen_masked_full(const char *path, const char *mode, const char *file, int line, const char *func);
107int mutt_file_fsync_close(FILE **fp);
108long mutt_file_get_size(const char *path);
109long mutt_file_get_size_fp(FILE* fp);
110void mutt_file_get_stat_timespec(struct timespec *dest, struct stat *st, enum MuttStatType type);
111bool mutt_file_iter_line(struct MuttFileIter *iter, FILE *fp, ReadLineFlags flags);
112int mutt_file_lock(int fd, bool excl, bool timeout);
113bool mutt_file_map_lines(mutt_file_map_t func, void *user_data, FILE *fp, ReadLineFlags flags);
114int mutt_file_mkdir(const char *path, mode_t mode);
115int mutt_file_open(const char *path, uint32_t flags, mode_t mode);
116DIR * mutt_file_opendir(const char *path, enum MuttOpenDirMode mode);
117char * mutt_file_read_keyword(const char *file, char *buf, size_t buflen);
118char * mutt_file_read_line(char *line, size_t *size, FILE *fp, int *line_num, ReadLineFlags flags);
119int mutt_file_rename(const char *oldfile, const char *newfile);
120int mutt_file_rmtree(const char *path);
121const char *mutt_file_rotate(const char *path, int num);
122int mutt_file_safe_rename(const char *src, const char *target);
123void mutt_file_sanitize_filename(char *path, bool slash);
124int mutt_file_sanitize_regex(struct Buffer *dest, const char *src);
125size_t mutt_file_save_str(FILE *fp, const char *str);
126bool mutt_file_seek(FILE *fp, LOFF_T offset, int whence);
127void mutt_file_set_mtime(const char *from, const char *to);
128int mutt_file_stat_compare(struct stat *st1, enum MuttStatType st1_type, struct stat *st2, enum MuttStatType st2_type);
129int mutt_file_stat_timespec_compare(struct stat *st, enum MuttStatType type, struct timespec *b);
130int mutt_file_symlink(const char *oldpath, const char *newpath);
131int mutt_file_timespec_compare(struct timespec *a, struct timespec *b);
132bool mutt_file_touch(const char *path);
133void mutt_file_touch_atime(int fd);
134void mutt_file_unlink(const char *s);
135void mutt_file_unlink_empty(const char *path);
136int mutt_file_unlock(int fd);
137void mutt_file_resolve_symlink(struct Buffer *buf);
138
139void buf_quote_filename(struct Buffer *buf, const char *filename, bool add_outer);
140void buf_file_expand_fmt_quote(struct Buffer *dest, const char *fmt, const char *src);
141
142// Safest default permissions should be 0600
143#define mutt_file_fopen(PATH, MODE) mutt_file_fopen_full(PATH, MODE, 0600, __FILE__, __LINE__, __func__)
144#define mutt_file_fclose(FP) mutt_file_fclose_full(FP, __FILE__, __LINE__, __func__)
145
146#endif /* MUTT_MUTT_FILE_H */
const char FilenameSafeChars[]
Set of characters <=0x7F that are safe to use in filenames.
Definition file.c:71
bool mutt_file_touch(const char *path)
Make sure a file exists.
Definition file.c:974
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:1474
int mutt_file_copy_stream(FILE *fp_in, FILE *fp_out)
Copy the contents of one file into another.
Definition file.c:224
FILE * mutt_file_fopen_full(const char *path, const char *mode, const mode_t perms, const char *file, int line, const char *func)
Call fopen() safely.
Definition file.c:556
void buf_quote_filename(struct Buffer *buf, const char *filename, bool add_outer)
Quote a filename to survive the shell's quoting rules.
Definition file.c:803
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:678
int mutt_file_safe_rename(const char *src, const char *target)
NFS-safe renaming of files.
Definition file.c:310
void mutt_file_unlink_empty(const char *path)
Delete a file if it's empty.
Definition file.c:1221
MuttOpenDirMode
Mode flag for mutt_file_opendir()
Definition file.h:67
@ MUTT_OPENDIR_CREATE
Create the directory if it doesn't exist.
Definition file.h:69
@ MUTT_OPENDIR_NONE
Plain opendir()
Definition file.h:68
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:1536
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:192
char * mutt_file_read_keyword(const char *file, char *buf, size_t buflen)
Read a keyword from a file.
Definition file.c:1298
void buf_file_expand_fmt_quote(struct Buffer *dest, const char *fmt, const char *src)
Replace s in a string with a filename.
Definition file.c:1351
void mutt_file_touch_atime(int fd)
Set the access time to current time.
Definition file.c:961
int mutt_file_sanitize_regex(struct Buffer *dest, const char *src)
Escape any regex-magic characters in a string.
Definition file.c:624
int mutt_file_check_empty(const char *path)
Is the mailbox empty.
Definition file.c:1331
int mutt_file_mkdir(const char *path, mode_t mode)
Recursively create directories.
Definition file.c:844
int mutt_file_lock(int fd, bool excl, bool timeout)
(Try to) Lock a file using fcntl()
Definition file.c:1088
long mutt_file_get_size_fp(FILE *fp)
Get the size of a file.
Definition file.c:1432
void mutt_file_sanitize_filename(char *path, bool slash)
Replace unsafe characters in a filename.
Definition file.c:582
int mutt_file_timespec_compare(struct timespec *a, struct timespec *b)
Compare to time values.
Definition file.c:1452
int mutt_file_unlock(int fd)
Unlock a file previously locked by mutt_file_lock()
Definition file.c:1135
time_t mutt_file_decrease_mtime(const char *fp, struct stat *st)
Decrease a file's modification time by 1 second.
Definition file.c:898
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:780
DIR * mutt_file_opendir(const char *path, enum MuttOpenDirMode mode)
Open a directory.
Definition file.c:535
bool mutt_file_seek(FILE *fp, LOFF_T offset, int whence)
Wrapper for fseeko with error handling.
Definition file.c:648
int mutt_file_fclose_full(FILE **fp, const char *file, int line, const char *func)
Close a FILE handle (and NULL the pointer)
Definition file.c:100
long mutt_file_get_size(const char *path)
Get the size of a file.
Definition file.c:1414
int mutt_file_rename(const char *oldfile, const char *newfile)
Rename a file.
Definition file.c:1257
bool mutt_file_iter_line(struct MuttFileIter *iter, FILE *fp, ReadLineFlags flags)
Iterate over the lines from an open file pointer.
Definition file.c:759
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:485
int mutt_file_symlink(const char *oldpath, const char *newpath)
Create a symlink.
Definition file.c:254
int mutt_file_chmod_add_stat(const char *path, mode_t mode, struct stat *st)
Add permissions to a file.
Definition file.c:1025
bool(* mutt_file_map_t)(char *line, int line_num, void *user_data)
Definition file.h:93
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:1366
void mutt_file_resolve_symlink(struct Buffer *buf)
Resolve a symlink in place.
Definition file.c:1554
void mutt_file_set_mtime(const char *from, const char *to)
Set the modification time of one file from another.
Definition file.c:938
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:1514
MuttStatType
File timestamp selectors for mutt_file_get_stat_timespec()
Definition file.h:57
@ MUTT_STAT_CTIME
File/dir's ctime - last status change time.
Definition file.h:60
@ MUTT_STAT_ATIME
File/dir's atime - last accessed time.
Definition file.h:58
@ MUTT_STAT_MTIME
File/dir's mtime - last modified time.
Definition file.h:59
uint8_t ReadLineFlags
Definition file.h:47
FILE * mutt_file_fopen_masked_full(const char *path, const char *mode, const char *file, int line, const char *func)
Wrapper around mutt_file_fopen_full()
Definition neomutt.c:641
int mutt_file_chmod_add(const char *path, mode_t mode)
Add permissions to a file.
Definition file.c:1002
int mutt_file_open(const char *path, uint32_t flags, mode_t mode)
Open a file.
Definition file.c:516
void mutt_file_unlink(const char *s)
Delete a file, carefully.
Definition file.c:156
int mutt_file_fsync_close(FILE **fp)
Flush the data, before closing a file (and NULL the pointer)
Definition file.c:128
ReadLineFlag
Flags for mutt_file_read_line(), e.g.
Definition file.h:42
@ MUTT_RL_EOL
don't strip \n / \r\n
Definition file.h:45
@ MUTT_RL_CONT
-continuation
Definition file.h:44
@ MUTT_RL_NONE
No flags are set.
Definition file.h:43
int mutt_file_rmtree(const char *path)
Recursively remove a directory.
Definition file.c:425
size_t mutt_file_save_str(FILE *fp, const char *str)
Save a string to a file.
Definition file.c:1574
int mutt_file_chmod_rm_stat(const char *path, mode_t mode, struct stat *st)
Remove permissions from a file.
Definition file.c:1059
String manipulation buffer.
Definition buffer.h:36
State record for mutt_file_iter_line()
Definition file.h:76
char * line
the line data
Definition file.h:77
int line_num
line number
Definition file.h:79
size_t size
allocated size of line data
Definition file.h:78