NeoMutt
2025-12-11-1009-ga75d9e
Teaching an old dog new tricks
DOXYGEN
Toggle main menu visibility
Loading...
Searching...
No Matches
tmp.c
Go to the documentation of this file.
1
22
28
29
#include "config.h"
30
#include <errno.h>
31
#include <inttypes.h>
32
#include <limits.h>
33
#include <stdio.h>
34
#include <stdlib.h>
35
#include <string.h>
36
#include <unistd.h>
37
#include "
mutt/lib.h
"
38
#include "
config/lib.h
"
39
#include "
tmp.h
"
40
#include "
globals.h
"
41
#include "
neomutt.h
"
42
52
void
buf_mktemp_full
(
struct
Buffer
*buf,
const
char
*prefix,
const
char
*suffix,
53
const
char
*src,
int
line,
const
char
*cfg)
54
{
55
const
char
*
const
c_tmp_dir =
cs_subset_path
(
NeoMutt
->
sub
, cfg);
56
buf_printf
(buf,
"%s/%s-%s-%d-%d-%"
PRIu64
"%s%s"
,
NONULL
(c_tmp_dir),
57
NONULL
(prefix),
NONULL
(
ShortHostname
), (
int
) getuid(),
58
(
int
) getpid(),
mutt_rand64
(), suffix ?
"."
:
""
,
NONULL
(suffix));
59
60
mutt_debug
(
LL_DEBUG3
,
"%s:%d: buf_mktemp returns \"%s\"\n"
, src, line,
buf_string
(buf));
61
if
(unlink(
buf_string
(buf)) && (errno != ENOENT))
62
{
63
mutt_debug
(
LL_DEBUG1
,
"%s:%d: ERROR: unlink(\"%s\"): %s (errno %d)\n"
, src,
64
line,
buf_string
(buf), strerror(errno), errno);
65
}
66
}
67
78
FILE *
mutt_file_mkstemp_full
(
const
char
*file,
int
line,
const
char
*func)
79
{
80
char
name[
PATH_MAX
] = { 0 };
81
82
const
char
*
const
c_tmp_dir =
cs_subset_path
(
NeoMutt
->
sub
,
"tmp_dir"
);
83
int
n = snprintf(name,
sizeof
(name),
"%s/neomutt-XXXXXX"
,
NONULL
(c_tmp_dir));
84
if
((n < 0) || ((
size_t
) n >=
sizeof
(name)))
85
return
NULL;
86
87
int
fd = mkstemp(name);
88
if
(fd == -1)
89
return
NULL;
90
91
FILE *fp = fdopen(fd,
"w+"
);
92
if
(!fp)
93
{
94
close(fd);
95
return
NULL;
96
}
97
98
if
((unlink(name) != 0) && (errno != ENOENT))
99
{
100
mutt_file_fclose
(&fp);
101
return
NULL;
102
}
103
104
MuttLogger
(0, file, line, func, 1,
"created temp file '%s'\n"
, name);
105
return
fp;
106
}
buf_printf
int buf_printf(struct Buffer *buf, const char *fmt,...)
Format a string overwriting a Buffer.
Definition
buffer.c:168
buf_string
static const char * buf_string(const struct Buffer *buf)
Convert a buffer to a const char * "string".
Definition
buffer.h:96
cs_subset_path
const char * cs_subset_path(const struct ConfigSubset *sub, const char *name)
Get a path config item by name.
Definition
helpers.c:168
lib.h
Convenience wrapper for the config headers.
mutt_file_fclose
#define mutt_file_fclose(FP)
Definition
file.h:144
ShortHostname
char * ShortHostname
Short version of the hostname.
Definition
globals.c:36
globals.h
Global variables.
mutt_debug
#define mutt_debug(LEVEL,...)
Definition
logging2.h:91
MuttLogger
int log_dispatcher_t MuttLogger
LL_DEBUG3
@ LL_DEBUG3
Log at debug level 3.
Definition
logging2.h:47
LL_DEBUG1
@ LL_DEBUG1
Log at debug level 1.
Definition
logging2.h:45
lib.h
Convenience wrapper for the library headers.
PATH_MAX
#define PATH_MAX
Definition
mutt.h:49
neomutt.h
Container for Accounts, Notifications.
mutt_rand64
uint64_t mutt_rand64(void)
Create a 64-bit random number.
Definition
random.c:123
NONULL
#define NONULL(x)
Definition
string2.h:44
Buffer
String manipulation buffer.
Definition
buffer.h:36
NeoMutt
Container for Accounts, Notifications.
Definition
neomutt.h:41
NeoMutt::sub
struct ConfigSubset * sub
Inherited config items.
Definition
neomutt.h:49
buf_mktemp_full
void buf_mktemp_full(struct Buffer *buf, const char *prefix, const char *suffix, const char *src, int line, const char *cfg)
Create a temporary file.
Definition
tmp.c:52
mutt_file_mkstemp_full
FILE * mutt_file_mkstemp_full(const char *file, int line, const char *func)
Create temporary file safely.
Definition
tmp.c:78
tmp.h
Create Temporary Files.