Teaching an old dog new tricks
No Matches
tmp.c File Reference

Create Temporary Files. More...

#include "config.h"
#include <errno.h>
#include <inttypes.h>
#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include "mutt/lib.h"
#include "config/lib.h"
#include "globals.h"
#include "neomutt.h"
+ Include dependency graph for tmp.c:

Go to the source code of this file.


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.

  • 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

Definition in file tmp.c.

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.

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

Definition at line 50 of file tmp.c.

53 const char *const c_tmp_dir = cs_subset_path(NeoMutt->sub, "tmp_dir");
54 buf_printf(buf, "%s/%s-%s-%d-%d-%" PRIu64 "%s%s", NONULL(c_tmp_dir),
55 NONULL(prefix), NONULL(ShortHostname), (int) getuid(),
56 (int) getpid(), mutt_rand64(), suffix ? "." : "", NONULL(suffix));
58 mutt_debug(LL_DEBUG3, "%s:%d: buf_mktemp returns \"%s\"\n", src, line, buf_string(buf));
59 if (unlink(buf_string(buf)) && (errno != ENOENT))
60 {
61 mutt_debug(LL_DEBUG1, "%s:%d: ERROR: unlink(\"%s\"): %s (errno %d)\n", src,
62 line, buf_string(buf), strerror(errno), errno);
63 }
int buf_printf(struct Buffer *buf, const char *fmt,...)
Format a string overwriting a Buffer.
Definition: buffer.c:173
static const char * buf_string(const struct Buffer *buf)
Convert a buffer to a const char * "string".
Definition: buffer.h:93
const char * cs_subset_path(const struct ConfigSubset *sub, const char *name)
Get a path config item by name.
Definition: helpers.c:169
char * ShortHostname
Short version of the hostname.
Definition: globals.c:40
#define mutt_debug(LEVEL,...)
Definition: logging2.h:89
Log at debug level 3.
Definition: logging2.h:45
Log at debug level 1.
Definition: logging2.h:43
uint64_t mutt_rand64(void)
Create a 64-bit random number.
Definition: random.c:134
#define NONULL(x)
Definition: string2.h:37
Container for Accounts, Notifications.
Definition: neomutt.h:41
struct ConfigSubset * sub
Inherited config items.
Definition: neomutt.h:45
+ 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.

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 76 of file tmp.c.

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