NeoMutt  2025-09-05-43-g177ed6
Teaching an old dog new tricks
DOXYGEN
Loading...
Searching...
No Matches
tmp.h File Reference

Create Temporary Files. More...

#include <stdio.h>
+ Include dependency graph for tmp.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define buf_mktemp(buf)
 
#define buf_mktemp_pfx_sfx(buf, prefix, suffix)
 
#define mutt_file_mkstemp()
 

Functions

void buf_mktemp_full (struct Buffer *buf, const char *prefix, const char *suffix, const char *src, int line)
 Create a temporary file.
 
FILE * mutt_file_mkstemp_full (const char *file, int line, const char *func)
 Create temporary file safely.
 

Detailed Description

Create Temporary Files.

Authors
  • Richard Russon

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.

Definition in file tmp.h.

Macro Definition Documentation

◆ buf_mktemp

#define buf_mktemp ( buf)
Value:
buf_mktemp_pfx_sfx(buf, "neomutt", NULL)
#define buf_mktemp_pfx_sfx(buf, prefix, suffix)
Definition tmp.h:34

Definition at line 33 of file tmp.h.

◆ buf_mktemp_pfx_sfx

#define buf_mktemp_pfx_sfx ( buf,
prefix,
suffix )
Value:
buf_mktemp_full(buf, prefix, suffix, __FILE__, __LINE__)
void buf_mktemp_full(struct Buffer *buf, const char *prefix, const char *suffix, const char *src, int line)
Create a temporary file.
Definition tmp.c:51

Definition at line 34 of file tmp.h.

◆ mutt_file_mkstemp

#define mutt_file_mkstemp ( )
Value:
mutt_file_mkstemp_full(__FILE__, __LINE__, __func__)
FILE * mutt_file_mkstemp_full(const char *file, int line, const char *func)
Create temporary file safely.
Definition tmp.c:77

Definition at line 36 of file tmp.h.

Function Documentation

◆ buf_mktemp_full()

void buf_mktemp_full ( struct Buffer * buf,
const char * prefix,
const char * suffix,
const char * src,
int line )

Create a temporary file.

Parameters
bufBuffer for result
prefixPrefix for filename
suffixSuffix for filename
srcSource file of caller
lineSource line number of caller

Definition at line 51 of file tmp.c.

53{
54 const char *const c_tmp_dir = cs_subset_path(NeoMutt->sub, "tmp_dir");
55 buf_printf(buf, "%s/%s-%s-%d-%d-%" PRIu64 "%s%s", NONULL(c_tmp_dir),
56 NONULL(prefix), NONULL(ShortHostname), (int) getuid(),
57 (int) getpid(), mutt_rand64(), suffix ? "." : "", NONULL(suffix));
58
59 mutt_debug(LL_DEBUG3, "%s:%d: buf_mktemp returns \"%s\"\n", src, line, buf_string(buf));
60 if (unlink(buf_string(buf)) && (errno != ENOENT))
61 {
62 mutt_debug(LL_DEBUG1, "%s:%d: ERROR: unlink(\"%s\"): %s (errno %d)\n", src,
63 line, buf_string(buf), strerror(errno), errno);
64 }
65}
int buf_printf(struct Buffer *buf, const char *fmt,...)
Format a string overwriting a Buffer.
Definition buffer.c:161
static const char * buf_string(const struct Buffer *buf)
Convert a buffer to a const char * "string".
Definition buffer.h:96
const char * cs_subset_path(const struct ConfigSubset *sub, const char *name)
Get a path config item by name.
Definition helpers.c:168
char * ShortHostname
Short version of the hostname.
Definition globals.c:37
#define mutt_debug(LEVEL,...)
Definition logging2.h:90
@ LL_DEBUG3
Log at debug level 3.
Definition logging2.h:46
@ LL_DEBUG1
Log at debug level 1.
Definition logging2.h:44
uint64_t mutt_rand64(void)
Create a 64-bit random number.
Definition random.c:123
#define NONULL(x)
Definition string2.h:43
Container for Accounts, Notifications.
Definition neomutt.h:43
struct ConfigSubset * sub
Inherited config items.
Definition neomutt.h:47
+ Here is the call graph for this function:

◆ mutt_file_mkstemp_full()

FILE * mutt_file_mkstemp_full ( const char * file,
int line,
const char * func )

Create temporary file safely.

Parameters
fileSource file of caller
lineSource line number of caller
funcFunction name of caller
Return values
ptrFILE handle
NULLError, see errno

Create and immediately unlink a temp file using mkstemp().

Definition at line 77 of file tmp.c.

78{
79 char name[PATH_MAX] = { 0 };
80
81 const char *const c_tmp_dir = cs_subset_path(NeoMutt->sub, "tmp_dir");
82 int n = snprintf(name, sizeof(name), "%s/neomutt-XXXXXX", NONULL(c_tmp_dir));
83 if (n < 0)
84 return NULL;
85
86 int fd = mkstemp(name);
87 if (fd == -1)
88 return NULL;
89
90 FILE *fp = fdopen(fd, "w+");
91
92 if ((unlink(name) != 0) && (errno != ENOENT))
93 {
95 return NULL;
96 }
97
98 MuttLogger(0, file, line, func, 1, "created temp file '%s'\n", name);
99 return fp;
100}
#define mutt_file_fclose(FP)
Definition file.h:139
int log_dispatcher_t MuttLogger
#define PATH_MAX
Definition mutt.h:42
+ Here is the call graph for this function: