14 #ifndef TMP_LOGFILE_TEMPLATE 15 # define TMP_LOGFILE_TEMPLATE "logfile.XXXXXX" 19 # define TMPDIR P_tmpdir 21 # define TMPDIR "/tmp" 24 static char *_logfile_tmplog;
28 if(_logfile_tmplog == NULL)
37 int fd = mkstemp(name);
40 error(
_(
"cannot create temporary log file '%s': %s"), name, strerror(errno));
44 FILE *fp = fdopen(fd,
"w");
47 _logfile_tmplog = name;
50 error(
_(
"cannot create temporary log file '%s': %s"), name, strerror(errno));
58 if(*tmplogfp != NULL && _logfile_tmplog != NULL)
62 if(remove(_logfile_tmplog) != 0)
64 output(LOG_WARNING,
_(
"cannot remove temporary log file '%s': %s"), _logfile_tmplog, strerror(errno));
66 free(_logfile_tmplog);
67 _logfile_tmplog = NULL;
75 FILE *destfp = fopen(file,
"w");
78 error(
_(
"cannot create log file '%s': %s"), file, strerror(errno));
82 if(tmplogfp != NULL && _logfile_tmplog != NULL)
85 FILE *srcfp = fopen(_logfile_tmplog,
"r");
94 char *buf = (
char *)malloc(size);
95 while(feof(srcfp) == 0)
97 read = fread_unlocked(buf, 1, size, srcfp);
98 if(read != size && ferror(srcfp) != 0)
100 error(
_(
"cannot copy log file: %s"), strerror(errno));
104 write = fwrite_unlocked(buf, 1, read, destfp);
107 error(
_(
"number of bytes read and written are not the same, while coping logfile"));
108 debug(
_(
"bytes read: %d; bytes written: %d"), (
int)read, (
int)write);
116 fp = freopen(file,
"a", tmplogfp);
125 if(remove(_logfile_tmplog) != 0)
127 output(LOG_WARNING,
_(
"cannot remove temporary log file '%s': %s"), _logfile_tmplog, strerror(errno));
130 free(_logfile_tmplog);
131 _logfile_tmplog = NULL;
FILE * mk_temp_logfile(void)
#define str_len(s)
Shorthand for counting '\0' terminating strings. See _len for more info.
void close_logfile(FILE **fd)
void remove_temp_logfile(FILE **tmplogfp)
#define TMP_LOGFILE_TEMPLATE
FILE * mk_logfile(FILE *tmplogfp, const char *file)