Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2020-10-05 02:07:59 +0300
committerCampbell Barton <ideasman42@gmail.com>2020-10-05 02:07:59 +0300
commitf4f6fdc26868d157b57c69e3a0e8f1c50beb7da4 (patch)
tree29ccf18cca9d95c23475e3eebe64fcfbedac0826
parent659f81f1cbc3189c3a00cf290f4bade7614c4e91 (diff)
Cleanup: simplify tempdir_session_create
Remove the need for a temporary allocated path.
-rw-r--r--source/blender/blenkernel/intern/appdir.c44
1 files changed, 26 insertions, 18 deletions
diff --git a/source/blender/blenkernel/intern/appdir.c b/source/blender/blenkernel/intern/appdir.c
index feed56f733d..44fc608530b 100644
--- a/source/blender/blenkernel/intern/appdir.c
+++ b/source/blender/blenkernel/intern/appdir.c
@@ -30,6 +30,7 @@
#include "BLI_path_util.h"
#include "BLI_string.h"
#include "BLI_string_utf8.h"
+#include "BLI_string_utils.h"
#include "BLI_utildefines.h"
#include "BKE_appdir.h" /* own include */
@@ -1066,32 +1067,39 @@ static void tempdir_session_create(char *tempdir_session,
const char *tempdir)
{
tempdir_session[0] = '\0';
+
+ const int tempdir_len = strlen(tempdir);
/* 'XXXXXX' is kind of tag to be replaced by `mktemp-family` by an UUID. */
- char *tmp_name = BLI_strdupcat(tempdir, "blender_XXXXXX");
- const size_t ln = strlen(tmp_name) + 1;
- if (ln <= tempdir_session_len) {
+ const char *session_name = "blender_XXXXXX";
+ const int session_name_len = strlen(session_name);
+
+ /* +1 as a slash is added,
+ * #_mktemp_s also requires the last null character is included. */
+ const int tempdir_session_len_required = tempdir_len + session_name_len + 1;
+
+ if (tempdir_session_len_required <= tempdir_session_len) {
+ /* No need to use path joining utility as we know the last character of #tempdir is a slash. */
+ BLI_string_join(tempdir_session, tempdir_session_len, tempdir, session_name);
#ifdef WIN32
- const bool needs_create = (_mktemp_s(tmp_name, ln) == 0);
+ const bool needs_create = (_mktemp_s(tempdir_session, tempdir_session_len_required) == 0);
#else
- const bool needs_create = (mkdtemp(tmp_name) == NULL);
+ const bool needs_create = (mkdtemp(tempdir_session) == NULL);
#endif
if (needs_create) {
- BLI_dir_create_recursive(tmp_name);
+ BLI_dir_create_recursive(tempdir_session);
+ }
+ if (BLI_is_dir(tempdir_session)) {
+ BLI_path_slash_ensure(tempdir_session);
+ /* Success. */
+ return;
}
- }
- if (BLI_is_dir(tmp_name)) {
- BLI_strncpy(tempdir_session, tmp_name, tempdir_session_len);
- BLI_path_slash_ensure(tempdir_session);
- }
- else {
- CLOG_WARN(&LOG,
- "Could not generate a temp file name for '%s', falling back to '%s'",
- tmp_name,
- tempdir);
- BLI_strncpy(tempdir_session, tmp_name, tempdir_session_len);
}
- MEM_freeN(tmp_name);
+ CLOG_WARN(&LOG,
+ "Could not generate a temp file name for '%s', falling back to '%s'",
+ tempdir_session,
+ tempdir);
+ BLI_strncpy(tempdir_session, tempdir, tempdir_session_len);
}
/**