Patch #17654: Fix for Scene.Get with input >20 chars
authorJoshua Leung <aligorith@gmail.com>
Sat, 20 Sep 2008 10:10:50 +0000 (10:10 +0000)
committerJoshua Leung <aligorith@gmail.com>
Sat, 20 Sep 2008 10:10:50 +0000 (10:10 +0000)
Patch by Darryl Pogue (paradox).

Blender cuts off datablock names at 20 chars, which causes issues if you're trying to access Scenes with a string longer
than 20 chars.

Ex.

s = 'GuildPub-Writers_GLOBAL'
Blender.Scene.New(s) #This creates the scene "GuildPub-Writers_GLOB"
Blender.Scene.Get(s) #This throws an error: the name and the string don't match

This patch cuts down the input of Scene.Get() to the 20 char limits, thus making the the above example return the correct
scene.

source/blender/python/api2_2x/Scene.c

index eba951b88133b434ce0946e226fba18ae65ea9bb..edb5e015eea10922b635f7648874e76623ca6dae 100644 (file)
@@ -635,16 +635,19 @@ static PyObject *M_Scene_New( PyObject * self, PyObject * args,
 /*-----------------------Scene.Get()------------------------------------*/
 static PyObject *M_Scene_Get( PyObject * self, PyObject * args )
 {
-       char *name = NULL;
+       char *tname = NULL, name[22];
        Scene *scene_iter;
 
-       if( !PyArg_ParseTuple( args, "|s", &name ) )
+       if( !PyArg_ParseTuple( args, "|s", &tname ) )
                return ( EXPP_ReturnPyObjError( PyExc_TypeError,
                                                "expected string argument (or nothing)" ) );
 
+       strncpy(name, tname, 21);
+       if( strlen(tname) >= 21 ) name[21]= 0;
+       
        scene_iter = G.main->scene.first;
 
-       if( name ) {            /* (name) - Search scene by name */
+       if( tname ) {           /* (name) - Search scene by name */
 
                PyObject *wanted_scene = NULL;