diff options
author | Campbell Barton <ideasman42@gmail.com> | 2015-07-11 18:43:32 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2015-07-11 18:45:30 +0300 |
commit | a6259d4290a5631af9108003cd13bf2848c3a0f6 (patch) | |
tree | 294d31faee7425b78dd0af7bcfba2bccfed9270d /source/blender/imbuf/intern/openexr | |
parent | e42e01875ecc48f2da314f9dca27fa4a949fbb77 (diff) |
Avoid static var for OpenEXR
Diffstat (limited to 'source/blender/imbuf/intern/openexr')
-rw-r--r-- | source/blender/imbuf/intern/openexr/openexr_api.cpp | 23 |
1 files changed, 11 insertions, 12 deletions
diff --git a/source/blender/imbuf/intern/openexr/openexr_api.cpp b/source/blender/imbuf/intern/openexr/openexr_api.cpp index 36742cb91eb..3ba8d8e98c1 100644 --- a/source/blender/imbuf/intern/openexr/openexr_api.cpp +++ b/source/blender/imbuf/intern/openexr/openexr_api.cpp @@ -763,12 +763,13 @@ static void imb_exr_get_views(MultiPartInputFile& file, StringVector& views) } /* Multilayer Blender files have the view name in all the passes (even the default view one) */ -static const char *imb_exr_insert_view_name(const char *passname, const char *viewname) +static void imb_exr_insert_view_name(char *name_full, const char *passname, const char *viewname) { - if (viewname == NULL || viewname[0] == '\0') - return passname; + BLI_assert(!ELEM(name_full, passname, viewname)); + if (viewname == NULL || viewname[0] == '\0') { + BLI_strncpy(name_full, passname, sizeof(((ExrChannel *)NULL)->name)); + } - static char retstr[EXR_PASS_MAXNAME]; const char delims[] = {'.', '\0'}; const char *sep; const char *token; @@ -777,13 +778,11 @@ static const char *imb_exr_insert_view_name(const char *passname, const char *vi len = BLI_str_rpartition(passname, delims, &sep, &token); if (sep) { - BLI_snprintf(retstr, sizeof(retstr), "%.*s.%s.%s", (int)len, passname, viewname, token); + BLI_snprintf(name_full, EXR_PASS_MAXNAME, "%.*s.%s.%s", (int)len, passname, viewname, token); } else { - BLI_snprintf(retstr, sizeof(retstr), "%s.%s", passname, viewname); + BLI_snprintf(name_full, EXR_PASS_MAXNAME, "%s.%s", passname, viewname); } - - return retstr; } /* adds flattened ExrChannels */ @@ -818,8 +817,7 @@ void IMB_exr_add_channel(void *handle, /* name has to be unique, thus it's a combination of layer, pass, view, and channel */ if (layname && layname[0] != '\0') { - std::string raw_name = imb_exr_insert_view_name(echan->m->name.c_str(), echan->m->view.c_str()); - BLI_strncpy(echan->name, raw_name.c_str(), sizeof(echan->name)); + imb_exr_insert_view_name(echan->name, echan->m->name.c_str(), echan->m->view.c_str()); } else if (data->multiView->size() > 1) { std::string raw_name = insertViewName(echan->m->name, *data->multiView, echan->view_id); @@ -1045,8 +1043,9 @@ float *IMB_exr_channel_rect(void *handle, const char *layname, const char *pass /* name has to be unique, thus it's a combination of layer, pass, view, and channel */ if (layname && layname[0] != '\0') { - std::string raw_name = imb_exr_insert_view_name(name, viewname); - BLI_strncpy(name, raw_name.c_str(), sizeof(name)); + char temp_buf[EXR_PASS_MAXNAME]; + imb_exr_insert_view_name(temp_buf, name, viewname); + BLI_strncpy(name, temp_buf, sizeof(name)); } else if (data->multiView->size() > 1) { size_t view_id = std::max(0, imb_exr_get_multiView_id(*data->multiView, viewname)); |