/** \file file_write.c simple output plugin for testing purposes */
+#include <regex.h>
#include <sys/types.h>
#include <dirent.h>
+#include <sys/time.h>
#include "para.h"
#include "list.h"
int check_fd;
};
+/*
+ * Get a random filename.
+ *
+ * This is by no means a secure way to create temporary files in a hostile
+ * directory like \p /tmp. However, we use it only for creating temp files in
+ * ~/.paraslash, for which it is OK. Result must be freed by the caller.
+ */
+__must_check __malloc static char *random_filename(void)
+{
+ char *result, *home = para_homedir();
+ struct timeval tv;
+
+ gettimeofday(&tv, NULL);
+ srandom(tv.tv_usec);
+ result = make_message("%s/.paraslash/%08lu", home,
+ para_random(99999999));
+ free(home);
+ return result;
+}
+
static int file_write_open(struct writer_node *wn)
{
struct private_file_write_data *pfwd = para_calloc(
sizeof(struct private_file_write_data));
struct file_write_args_info *conf = wn->conf;
char *filename;
+
if (conf->filename_given)
filename = conf->filename_arg;
- else {
- char *tmp = para_tmpname(), *home = para_homedir();
- filename = make_message("%s/.paraslash/%s", home, tmp);
- free(home);
- free(tmp);
- }
+ else
+ filename = random_filename();
wn->private_data = pfwd;
pfwd->fd = open(filename, O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR);
if (!conf->filename_given)
.short_help = file_write_args_info_help,
.detailed_help = file_write_args_info_detailed_help
};
+ file_cmdline_parser_free(&dummy);
}