struct temp_file {
- char *name, *path;
FILE *fp;
+ char name[1];
};
struct hashtab_name *key;
struct temp_file *tmp;
- char *name;
FILE *fp;
-
int fd;
if (!(temp_path = getenv ("TMPDIR"))) {
return 0;
}
- if ((name = strrchr (template, '/'))) {
- name++;
- } else {
- name = template;
- }
-
if ((fp = fdopen (fd, "w+b"))) {
+
+ if (!(key = hashtab_get_key (&hashtab_tmpfiles, template))) {
- if (!(key = hashtab_get_key (&hashtab_tmpfiles, name))) {
-
- if (!((key = hashtab_alloc_name (xstrdup (name))))) {
+ if (!((key = hashtab_alloc_name (xstrdup (template))))) {
remove (template);
fclose (fp);
}
- tmp = xmalloc (sizeof (*tmp));
- tmp->fp = fp;
+ tmp = xmalloc (sizeof (*tmp) + strlen (template )+ 1);
- tmp->path = xstrdup (template);
- tmp->name = xstrdup (name);
+ sprintf (tmp->name, "%s", template);
+ tmp->fp = fp;
hashtab_put (&hashtab_tmpfiles, key, tmp);
return fp;
return ret;
}
- remove (tmp->path);
+ remove (tmp->name);
hashtab_remove (&hashtab_tmpfiles, hashtab_get_key (&hashtab_tmpfiles, tmp->name));
return 0;
continue;
}
- remove (tmp->path);
+ remove (tmp->name);
hashtab_remove (&hashtab_tmpfiles, hashtab_get_key (&hashtab_tmpfiles, tmp->name));
}