return (ARCHIVE_OK);
archive_string_init(&tempfile);
- if (__archive_get_tempdir(&tempfile) != ARCHIVE_OK) {
- ret = ARCHIVE_WARN;
- goto cleanup;
- }
- archive_strcat(&tempfile, "tar.md.XXXXXX");
- tempfd = mkstemp(tempfile.s);
+ archive_strcpy(&tempfile, name);
+ archive_string_dirname(&tempfile);
+ archive_strcat(&tempfile, "/tar.XXXXXXXX");
+ tempfd = __archive_mkstemp(tempfile.s);
if (tempfd < 0) {
archive_set_error(&a->archive, errno,
"Could not open extended attribute file");
static int
la_mktemp(struct archive_write_disk *a)
{
+ struct archive_string *tmp = &a->_tmpname_data;
int oerrno, fd;
mode_t mode;
- archive_string_empty(&a->_tmpname_data);
- archive_string_sprintf(&a->_tmpname_data, "%s.XXXXXX", a->name);
- a->tmpname = a->_tmpname_data.s;
+ archive_strcpy(tmp, a->name);
+ archive_string_dirname(tmp);
+ archive_strcat(tmp, "/tar.XXXXXXXX");
+ a->tmpname = tmp->s;
fd = __archive_mkstemp(a->tmpname);
if (fd == -1)
int tmpfd;
archive_string_init(&tmpdatafork);
- archive_strcpy(&tmpdatafork, "tar.md.XXXXXX");
- tmpfd = mkstemp(tmpdatafork.s);
+ archive_strcpy(&tmpdatafork, pathname);
+ archive_string_dirname(&tmpdatafork);
+ archive_strcat(&tmpdatafork, "/tar.XXXXXXXX");
+ tmpfd = __archive_mkstemp(tmpdatafork.s);
if (tmpfd < 0) {
archive_set_error(&a->archive, errno,
"Failed to mkstemp");
* silly dance of writing the data to disk just so that
* copyfile() can read it back in again. */
archive_string_init(&tmp);
- archive_strcpy(&tmp, "tar.mmd.XXXXXX");
- fd = mkstemp(tmp.s);
+ archive_strcpy(&tmp, pathname);
+ archive_string_dirname(&tmp);
+ archive_strcat(&tmp, "/tar.XXXXXXXX");
+ fd = __archive_mkstemp(tmp.s);
if (fd < 0) {
archive_set_error(&a->archive, errno,