+ gchar *tmpdir;
+ guint hash_number;
+
+ /* hmmm... maybe we need a modest_text_utils_validate_file_name? */
+ g_return_val_if_fail (orig_name || strlen(orig_name) == 0, NULL);
+ if (strlen(orig_name) > 200) {
+ g_warning ("%s: filename too long ('%s')",
+ __FUNCTION__, orig_name);
+ return NULL;
+ }
+
+ if (g_strstr_len (orig_name, strlen(orig_name), "/") != NULL) {
+ g_warning ("%s: filename contains '/' character(s) (%s)",
+ __FUNCTION__, orig_name);
+ return NULL;
+ }
+
+ /* make a random subdir under /tmp or /var/tmp */
+ if (hash_base != NULL) {
+ hash_number = g_str_hash (hash_base);
+ } else {
+ hash_number = (guint) random ();
+ }
+ tmpdir = g_strdup_printf ("%s/%u", g_get_tmp_dir (), hash_number);
+ if ((g_access (tmpdir, R_OK) == -1) && (g_mkdir (tmpdir, 0755) == -1)) {
+ g_warning ("%s: failed to create dir '%s': %s",
+ __FUNCTION__, tmpdir, g_strerror(errno));
+ g_free (tmpdir);
+ return NULL;
+ }