On MinGW, opened file cannot be removed.
* src/lhadd.c (build_temporary_file): ditto.
* src/lharc.c (fatal_error): ditto.
git-svn-id: svn+ssh://svn.sourceforge.jp/svnroot/lha/lha/trunk@75
6a8cc165-1e22-0410-a132-
eb4e3f353aba
EXTERN unsigned int n_max;
/* lhadd.c */
-EXTERN int temporary_fd = -1;
+EXTERN int temporary_fd;
/* ------------------------------------------------------------------------ */
/* Functions */
extern void free_sp();
extern void cleaning_files();
-extern void build_temporary_name();
+extern int build_temporary_name();
extern void build_backup_file_name();
extern void build_standard_archive_name();
remove_temporary_at_error = TRUE;
temporary_fd = build_temporary_name();
- if (fd == -1)
+ if (temporary_fd == -1)
fatal_error(temporary_name);
- afp = fdopen(temporary_name, WRITE_BINARY);
+ afp = fdopen(temporary_fd, WRITE_BINARY);
if (afp == NULL)
fatal_error(temporary_name);
-
return afp;
}
extract_directory = NULL;
xfilec = 257;
+ temporary_fd = -1;
}
/* ------------------------------------------------------------------------ */
strcpy((s ? s + 1 : temporary_name), "lhXXXXXX");
#endif
#ifdef HAVE_MKSTEMP
- return mkstemp(temporary_name);
+ {
+ int old_umask, fd;
+
+ old_umask = umask(077);
+ fd = mkstemp(temporary_name);
+ umask(old_umask);
+ return fd;
+ }
#else
- mktemp(temporary_name);
- return open(temporary_name, O_CREAT|O_EXCL|O_RDWR|O_BINARY, 0600);
+ {
+ int flags;
+ mktemp(temporary_name);
+
+ flags = O_CREAT|O_EXCL|O_RDWR;
+#ifdef O_BINARY
+ flags |= O_BINARY;
+#endif
+ return open(temporary_name, flags, 0600);
+ }
#endif
}