From d9a7358b4cd09980e35ea8e51e77d487c8c99444 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 1 Nov 2010 01:46:26 +0000 Subject: bugfix [#24462] UV Layouts saved as PNG results in two files (one is 0 KB, other has corrupted filename) --- source/blender/blenlib/intern/path_util.c | 13 ++++++++++++- source/blender/makesrna/RNA_define.h | 1 + source/blender/makesrna/intern/rna_define.c | 5 +++++ source/blender/makesrna/intern/rna_scene_api.c | 3 ++- 4 files changed, 20 insertions(+), 2 deletions(-) (limited to 'source/blender') diff --git a/source/blender/blenlib/intern/path_util.c b/source/blender/blenlib/intern/path_util.c index 8a6f6205eac..91558d4806e 100644 --- a/source/blender/blenlib/intern/path_util.c +++ b/source/blender/blenlib/intern/path_util.c @@ -543,9 +543,20 @@ int BLI_path_frame(char *path, int frame, int digits) ensure_digits(path, digits); if (stringframe_chars(path, &ch_sta, &ch_end)) { /* warning, ch_end is the last # +1 */ - char tmp[FILE_MAX], format[64]; + char tmp[FILE_MAX]; +#if 0 // neat but breaks on non ascii strings. + char format[64]; sprintf(format, "%%.%ds%%.%dd%%s", ch_sta, ch_end-ch_sta); /* example result: "%.12s%.5d%s" */ sprintf(tmp, format, path, frame, path+ch_end); +#else + char format[8]; + char *p; + sprintf(format, "%%.%dd", ch_end-ch_sta); /* example result: "%.5d" */ + memcpy(tmp, path, sizeof(char) * ch_sta); + p= tmp + ch_sta; + p += sprintf(p, format, frame); + memcpy(p, path + ch_end, strlen(path + ch_end)); +#endif strcpy(path, tmp); return 1; } diff --git a/source/blender/makesrna/RNA_define.h b/source/blender/makesrna/RNA_define.h index 16ca718e335..dc31573e8dd 100644 --- a/source/blender/makesrna/RNA_define.h +++ b/source/blender/makesrna/RNA_define.h @@ -132,6 +132,7 @@ void RNA_def_property_collection_sdna(PropertyRNA *prop, const char *structname, void RNA_def_property_flag(PropertyRNA *prop, int flag); void RNA_def_property_clear_flag(PropertyRNA *prop, int flag); +void RNA_def_property_subtype(PropertyRNA *prop, PropertySubType subtype); void RNA_def_property_array(PropertyRNA *prop, int length); void RNA_def_property_multi_array(PropertyRNA *prop, int dimension, int length[]); void RNA_def_property_range(PropertyRNA *prop, double min, double max); diff --git a/source/blender/makesrna/intern/rna_define.c b/source/blender/makesrna/intern/rna_define.c index 0a8e0bad7f0..66ef0f3b950 100644 --- a/source/blender/makesrna/intern/rna_define.c +++ b/source/blender/makesrna/intern/rna_define.c @@ -1005,6 +1005,11 @@ void RNA_def_property_clear_flag(PropertyRNA *prop, int flag) prop->flag &= ~flag; } +void RNA_def_property_subtype(PropertyRNA *prop, PropertySubType subtype) +{ + prop->subtype= subtype; +} + void RNA_def_property_array(PropertyRNA *prop, int length) { StructRNA *srna= DefRNA.laststruct; diff --git a/source/blender/makesrna/intern/rna_scene_api.c b/source/blender/makesrna/intern/rna_scene_api.c index 800922ceba0..4b5edb5c6e9 100644 --- a/source/blender/makesrna/intern/rna_scene_api.c +++ b/source/blender/makesrna/intern/rna_scene_api.c @@ -96,8 +96,9 @@ void RNA_api_scene_render(StructRNA *srna) func= RNA_def_function(srna, "frame_path", "rna_SceneRender_get_frame_path"); RNA_def_function_ui_description(func, "Return the absolute path to the filename to be written for a given frame."); parm= RNA_def_int(func, "frame", INT_MIN, INT_MIN, INT_MAX, "", "Frame number to use, if unset the current frame will be used.", MINAFRAME, MAXFRAME); - parm= RNA_def_string(func, "name", "", FILE_MAX, "File Name", "the resulting filename from the scenes render settings."); + parm= RNA_def_string(func, "filepath", "", FILE_MAX, "File Path", "the resulting filepath from the scenes render settings."); RNA_def_property_flag(parm, PROP_THICK_WRAP); /* needed for string return value */ + RNA_def_property_subtype(parm, PROP_FILEPATH); /* allow non utf8 */ RNA_def_function_output(func, parm); } -- cgit v1.2.3