Move para_tmpname() to file_write.c and make it static.
authorAndre Noll <maan@systemlinux.org>
Sun, 14 Jun 2009 10:30:41 +0000 (12:30 +0200)
committerAndre Noll <maan@systemlinux.org>
Sun, 14 Jun 2009 10:30:41 +0000 (12:30 +0200)
Also use para_random() instead of rand().

file_write.c
string.c
string.h

index 92777d7..1c534ae 100644 (file)
@@ -8,6 +8,7 @@
 
 #include <sys/types.h>
 #include <dirent.h>
+#include <sys/time.h>
 
 #include "para.h"
 #include "list.h"
@@ -27,20 +28,37 @@ struct private_file_write_data {
        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)
index f51f357..d0bb60c 100644 (file)
--- a/string.c
+++ b/string.c
@@ -231,27 +231,6 @@ void chop(char *buf)
                buf[n - 1] = '\0';
 }
 
-/**
- * Get a random filename.
- *
- * This is by no means a secure way to create temporary files in a hostile
- * directory like \p /tmp. However, it is OK to use for temp files, fifos,
- * sockets that are created in ~/.paraslash. Result must be freed by the
- * caller.
- *
- * \return A pointer to a random filename.
- */
-__must_check __malloc char *para_tmpname(void)
-{
-       struct timeval now;
-       unsigned int seed;
-
-       gettimeofday(&now, NULL);
-       seed = now.tv_usec;
-       srand(seed);
-       return make_message("%08i", rand());
-}
-
 /**
  * Get the logname of the current user.
  *
index 272f107..a9dfae9 100644 (file)
--- a/string.h
+++ b/string.h
@@ -35,7 +35,6 @@ __must_check __malloc char *para_strcat(char *a, const char *b);
 __must_check __malloc char *para_dirname(const char *name);
 __must_check const char *para_basename(const char *name);
 void chop(char *buf);
-__must_check __malloc char *para_tmpname(void);
 __must_check __malloc char *para_logname(void);
 __must_check __malloc char *para_homedir(void);
 unsigned split_args(char *args, char *** const argv_ptr, const char *delim);