Fix T35176: Python fails with blend files from non-ASCII paths
Thanks to Tamito for updating the patch to support Freestyle!
This commit is contained in:
		@@ -47,6 +47,8 @@
 | 
			
		||||
#include "BKE_text.h"  /* txt_to_buf */
 | 
			
		||||
#include "BKE_main.h"
 | 
			
		||||
 | 
			
		||||
#include "py_capi_utils.h"
 | 
			
		||||
 | 
			
		||||
#include "bpy_internal_import.h"  /* own include */
 | 
			
		||||
 | 
			
		||||
static Main *bpy_import_main = NULL;
 | 
			
		||||
@@ -133,6 +135,7 @@ void bpy_text_filename_get(char *fn, size_t fn_len, Text *text)
 | 
			
		||||
bool bpy_text_compile(Text *text)
 | 
			
		||||
{
 | 
			
		||||
	char fn_dummy[FILE_MAX];
 | 
			
		||||
	PyObject *fn_dummy_py;
 | 
			
		||||
	char *buf;
 | 
			
		||||
 | 
			
		||||
	bpy_text_filename_get(fn_dummy, sizeof(fn_dummy), text);
 | 
			
		||||
@@ -140,10 +143,14 @@ bool bpy_text_compile(Text *text)
 | 
			
		||||
	/* if previously compiled, free the object */
 | 
			
		||||
	free_compiled_text(text);
 | 
			
		||||
 | 
			
		||||
	fn_dummy_py = PyC_UnicodeFromByte(fn_dummy);
 | 
			
		||||
 | 
			
		||||
	buf = txt_to_buf(text);
 | 
			
		||||
	text->compiled = Py_CompileString(buf, fn_dummy, Py_file_input);
 | 
			
		||||
	text->compiled = Py_CompileStringObject(buf, fn_dummy_py, Py_file_input, NULL, -1);
 | 
			
		||||
	MEM_freeN(buf);
 | 
			
		||||
 | 
			
		||||
	Py_DECREF(fn_dummy_py);
 | 
			
		||||
 | 
			
		||||
	if (PyErr_Occurred()) {
 | 
			
		||||
		PyErr_Print();
 | 
			
		||||
		PyErr_Clear();
 | 
			
		||||
 
 | 
			
		||||
@@ -463,12 +463,17 @@ static int python_script_exec(bContext *C, const char *fn, struct Text *text,
 | 
			
		||||
		bpy_text_filename_get(fn_dummy, sizeof(fn_dummy), text);
 | 
			
		||||
 | 
			
		||||
		if (text->compiled == NULL) {   /* if it wasn't already compiled, do it now */
 | 
			
		||||
			char *buf = txt_to_buf(text);
 | 
			
		||||
			char *buf;
 | 
			
		||||
			PyObject *fn_dummy_py;
 | 
			
		||||
 | 
			
		||||
			text->compiled = Py_CompileString(buf, fn_dummy, Py_file_input);
 | 
			
		||||
			fn_dummy_py = PyC_UnicodeFromByte(fn_dummy);
 | 
			
		||||
 | 
			
		||||
			buf = txt_to_buf(text);
 | 
			
		||||
			text->compiled = Py_CompileStringObject(buf, fn_dummy_py, Py_file_input, NULL, -1);
 | 
			
		||||
			MEM_freeN(buf);
 | 
			
		||||
 | 
			
		||||
			Py_DECREF(fn_dummy_py);
 | 
			
		||||
 | 
			
		||||
			if (PyErr_Occurred()) {
 | 
			
		||||
				if (do_jump) {
 | 
			
		||||
					python_script_error_jump_text(text);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user