Revision: 41191
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=41191
Author:   campbellbarton
Date:     2011-10-22 10:49:35 +0000 (Sat, 22 Oct 2011)
Log Message:
-----------
py api - added PyC_UnicodeFromByteAndSize() to match 
PyUnicode_FromStringAndSize()
also made RNA_property_string_get_alloc() return the length of the new string 
to avoid having to run strlen on it after.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/animation/anim_ipo_utils.c
    trunk/blender/source/blender/editors/interface/interface.c
    trunk/blender/source/blender/editors/interface/interface_layout.c
    trunk/blender/source/blender/editors/interface/interface_templates.c
    trunk/blender/source/blender/editors/space_buttons/buttons_context.c
    trunk/blender/source/blender/editors/space_buttons/buttons_ops.c
    trunk/blender/source/blender/editors/space_outliner/outliner_edit.c
    trunk/blender/source/blender/editors/space_outliner/outliner_tree.c
    trunk/blender/source/blender/makesrna/RNA_access.h
    trunk/blender/source/blender/makesrna/intern/rna_access.c
    trunk/blender/source/blender/python/generic/IDProp.c
    trunk/blender/source/blender/python/generic/py_capi_utils.c
    trunk/blender/source/blender/python/generic/py_capi_utils.h
    trunk/blender/source/blender/python/intern/bpy_interface.c
    trunk/blender/source/blender/python/intern/bpy_rna.c

Modified: trunk/blender/source/blender/editors/animation/anim_ipo_utils.c
===================================================================
--- trunk/blender/source/blender/editors/animation/anim_ipo_utils.c     
2011-10-22 09:28:10 UTC (rev 41190)
+++ trunk/blender/source/blender/editors/animation/anim_ipo_utils.c     
2011-10-22 10:49:35 UTC (rev 41191)
@@ -118,7 +118,7 @@
                                PropertyRNA *nameprop= 
RNA_struct_name_property(ptr.type);
                                if (nameprop) {
                                        /* this gets a string which will need 
to be freed */
-                                       structname= 
RNA_property_string_get_alloc(&ptr, nameprop, NULL, 0);
+                                       structname= 
RNA_property_string_get_alloc(&ptr, nameprop, NULL, 0, NULL);
                                        free_structname= 1;
                                }
                                else

Modified: trunk/blender/source/blender/editors/interface/interface.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface.c  2011-10-22 
09:28:10 UTC (rev 41190)
+++ trunk/blender/source/blender/editors/interface/interface.c  2011-10-22 
10:49:35 UTC (rev 41191)
@@ -1593,17 +1593,18 @@
        if(but->rnaprop && ELEM3(but->type, TEX, IDPOIN, SEARCH_MENU)) {
                PropertyType type;
                char *buf= NULL;
+               int buf_len;
 
                type= RNA_property_type(but->rnaprop);
 
                if(type == PROP_STRING) {
                        /* RNA string */
-                       buf= RNA_property_string_get_alloc(&but->rnapoin, 
but->rnaprop, str, maxlen);
+                       buf= RNA_property_string_get_alloc(&but->rnapoin, 
but->rnaprop, str, maxlen, &buf_len);
                }
                else if(type == PROP_POINTER) {
                        /* RNA pointer */
                        PointerRNA ptr= RNA_property_pointer_get(&but->rnapoin, 
but->rnaprop);
-                       buf= RNA_struct_name_get_alloc(&ptr, str, maxlen);
+                       buf= RNA_struct_name_get_alloc(&ptr, str, maxlen, 
&buf_len);
                }
 
                if(!buf) {
@@ -1611,7 +1612,7 @@
                }
                else if(buf && buf != str) {
                        /* string was too long, we have to truncate */
-                       BLI_strncpy(str, buf, maxlen);
+                       memcpy(str, buf, MIN2(maxlen, buf_len+1));
                        MEM_freeN(buf);
                }
        }

Modified: trunk/blender/source/blender/editors/interface/interface_layout.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface_layout.c   
2011-10-22 09:28:10 UTC (rev 41190)
+++ trunk/blender/source/blender/editors/interface/interface_layout.c   
2011-10-22 10:49:35 UTC (rev 41191)
@@ -1221,7 +1221,7 @@
                        iconid= ui_id_icon_get((bContext*)C, id, 1);
                }
                else {
-                       name= RNA_struct_name_get_alloc(&itemptr, NULL, 0);
+                       name= RNA_struct_name_get_alloc(&itemptr, NULL, 0, 
NULL); /* could use the string length here */
                        iconid = 0;
                }
 

Modified: trunk/blender/source/blender/editors/interface/interface_templates.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface_templates.c        
2011-10-22 09:28:10 UTC (rev 41190)
+++ trunk/blender/source/blender/editors/interface/interface_templates.c        
2011-10-22 10:49:35 UTC (rev 41191)
@@ -2085,7 +2085,7 @@
        if(icon == ICON_NONE || icon == ICON_DOT)
                icon= 0;
 
-       namebuf= RNA_struct_name_get_alloc(itemptr, NULL, 0);
+       namebuf= RNA_struct_name_get_alloc(itemptr, NULL, 0, NULL);
        name= (namebuf)? namebuf: "";
 
        /* hardcoded types */
@@ -2270,7 +2270,7 @@
 
                                if(found) {
                                        /* create button */
-                                       name= 
RNA_struct_name_get_alloc(&itemptr, NULL, 0);
+                                       name= 
RNA_struct_name_get_alloc(&itemptr, NULL, 0, NULL);
                                        icon= list_item_icon_get(C, &itemptr, 
rnaicon, 0);
                                        uiItemL(row, (name)? name: "", icon);
 

Modified: trunk/blender/source/blender/editors/space_buttons/buttons_context.c
===================================================================
--- trunk/blender/source/blender/editors/space_buttons/buttons_context.c        
2011-10-22 09:28:10 UTC (rev 41190)
+++ trunk/blender/source/blender/editors/space_buttons/buttons_context.c        
2011-10-22 10:49:35 UTC (rev 41191)
@@ -925,7 +925,7 @@
 
                if(ptr->data) {
                        icon= RNA_struct_ui_icon(ptr->type);
-                       name= RNA_struct_name_get_alloc(ptr, namebuf, 
sizeof(namebuf));
+                       name= RNA_struct_name_get_alloc(ptr, namebuf, 
sizeof(namebuf), NULL);
 
                        if(name) {
                                if(!ELEM(sbuts->mainb, BCONTEXT_RENDER, 
BCONTEXT_SCENE) && ptr->type == &RNA_Scene)

Modified: trunk/blender/source/blender/editors/space_buttons/buttons_ops.c
===================================================================
--- trunk/blender/source/blender/editors/space_buttons/buttons_ops.c    
2011-10-22 09:28:10 UTC (rev 41190)
+++ trunk/blender/source/blender/editors/space_buttons/buttons_ops.c    
2011-10-22 10:49:35 UTC (rev 41191)
@@ -169,7 +169,7 @@
        if(!prop)
                return OPERATOR_CANCELLED;
 
-       str= RNA_property_string_get_alloc(&ptr, prop, NULL, 0);
+       str= RNA_property_string_get_alloc(&ptr, prop, NULL, 0, NULL);
 
        /* useful yet irritating feature, Shift+Click to open the file
         * Alt+Click to browse a folder in the OS's browser */

Modified: trunk/blender/source/blender/editors/space_outliner/outliner_edit.c
===================================================================
--- trunk/blender/source/blender/editors/space_outliner/outliner_edit.c 
2011-10-22 09:28:10 UTC (rev 41190)
+++ trunk/blender/source/blender/editors/space_outliner/outliner_edit.c 
2011-10-22 10:49:35 UTC (rev 41191)
@@ -1021,7 +1021,7 @@
                                        /* tsenext= TREESTORE(temnext); */ /* 
UNUSED */
                                        
                                        nextptr= &temnext->rnaptr;
-                                       name= 
RNA_struct_name_get_alloc(nextptr, buf, sizeof(buf));
+                                       name= 
RNA_struct_name_get_alloc(nextptr, buf, sizeof(buf), NULL);
                                        
                                        if(name) {
                                                /* if possible, use name as a 
key in the path */

Modified: trunk/blender/source/blender/editors/space_outliner/outliner_tree.c
===================================================================
--- trunk/blender/source/blender/editors/space_outliner/outliner_tree.c 
2011-10-22 09:28:10 UTC (rev 41190)
+++ trunk/blender/source/blender/editors/space_outliner/outliner_tree.c 
2011-10-22 10:49:35 UTC (rev 41191)
@@ -972,7 +972,7 @@
                }
                else if(type == TSE_RNA_STRUCT) {
                        /* struct */
-                       te->name= RNA_struct_name_get_alloc(ptr, NULL, 0);
+                       te->name= RNA_struct_name_get_alloc(ptr, NULL, 0, NULL);
 
                        if(te->name)
                                te->flag |= TE_FREE_NAME;

Modified: trunk/blender/source/blender/makesrna/RNA_access.h
===================================================================
--- trunk/blender/source/blender/makesrna/RNA_access.h  2011-10-22 09:28:10 UTC 
(rev 41190)
+++ trunk/blender/source/blender/makesrna/RNA_access.h  2011-10-22 10:49:35 UTC 
(rev 41191)
@@ -648,7 +648,7 @@
 FunctionRNA *RNA_struct_find_function(PointerRNA *ptr, const char *identifier);
 const struct ListBase *RNA_struct_type_functions(StructRNA *srna);
 
-char *RNA_struct_name_get_alloc(PointerRNA *ptr, char *fixedbuf, int fixedlen);
+char *RNA_struct_name_get_alloc(PointerRNA *ptr, char *fixedbuf, int fixedlen, 
int *r_len);
 
 /* Properties
  *
@@ -755,7 +755,7 @@
 float RNA_property_float_get_default_index(PointerRNA *ptr, PropertyRNA *prop, 
int index);
 
 void RNA_property_string_get(PointerRNA *ptr, PropertyRNA *prop, char *value);
-char *RNA_property_string_get_alloc(PointerRNA *ptr, PropertyRNA *prop, char 
*fixedbuf, int fixedlen);
+char *RNA_property_string_get_alloc(PointerRNA *ptr, PropertyRNA *prop, char 
*fixedbuf, int fixedlen, int *r_len);
 void RNA_property_string_set(PointerRNA *ptr, PropertyRNA *prop, const char 
*value);
 int RNA_property_string_length(PointerRNA *ptr, PropertyRNA *prop);
 void RNA_property_string_get_default(PointerRNA *ptr, PropertyRNA *prop, char 
*value);

Modified: trunk/blender/source/blender/makesrna/intern/rna_access.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_access.c   2011-10-22 
09:28:10 UTC (rev 41190)
+++ trunk/blender/source/blender/makesrna/intern/rna_access.c   2011-10-22 
10:49:35 UTC (rev 41191)
@@ -748,12 +748,12 @@
        srna->blender_type= blender_type;
 }
 
-char *RNA_struct_name_get_alloc(PointerRNA *ptr, char *fixedbuf, int fixedlen)
+char *RNA_struct_name_get_alloc(PointerRNA *ptr, char *fixedbuf, int fixedlen, 
int *r_len)
 {
        PropertyRNA *nameprop;
 
        if(ptr->data && (nameprop = RNA_struct_name_property(ptr->type)))
-               return RNA_property_string_get_alloc(ptr, nameprop, fixedbuf, 
fixedlen);
+               return RNA_property_string_get_alloc(ptr, nameprop, fixedbuf, 
fixedlen, r_len);
 
        return NULL;
 }
@@ -2276,7 +2276,8 @@
                strcpy(value, sprop->defaultvalue);
 }
 
-char *RNA_property_string_get_alloc(PointerRNA *ptr, PropertyRNA *prop, char 
*fixedbuf, int fixedlen)
+char *RNA_property_string_get_alloc(PointerRNA *ptr, PropertyRNA *prop,
+                                    char *fixedbuf, int fixedlen, int *r_len)
 {
        char *buf;
        int length;
@@ -2301,6 +2302,10 @@
        BLI_assert(buf[length] == '\0');
 #endif
 
+       if (r_len) {
+               *r_len= length;
+       }
+
        return buf;
 }
 
@@ -2836,15 +2841,17 @@
                PropertyRNA *nameprop;
                char name[256], *nameptr;
                int found= 0;
+               int keylen= strlen(key);
+               int namelen;
 
                RNA_property_collection_begin(ptr, prop, &iter);
                for(; iter.valid; RNA_property_collection_next(&iter)) {
                        if(iter.ptr.data && iter.ptr.type->nameproperty) {
                                nameprop= iter.ptr.type->nameproperty;
 
-                               nameptr= 
RNA_property_string_get_alloc(&iter.ptr, nameprop, name, sizeof(name));
+                               nameptr= 
RNA_property_string_get_alloc(&iter.ptr, nameprop, name, sizeof(name), 
&namelen);
 
-                               if(strcmp(nameptr, key) == 0) {
+                               if((keylen == namelen) && (strcmp(nameptr, key) 
== 0)) {
                                        *r_ptr= iter.ptr;
                                        found= 1;
                                }
@@ -4254,7 +4261,7 @@
        PropertyRNA *prop= RNA_struct_find_property(ptr, name);
 
        if(prop) {
-               return RNA_property_string_get_alloc(ptr, prop, fixedbuf, 
fixedlen);
+               return RNA_property_string_get_alloc(ptr, prop, fixedbuf, 
fixedlen, NULL); /* TODO, pass length */
        }
        else {
                printf("%s: %s.%s not found.\n", __func__, 
ptr->type->identifier, name);
@@ -5442,7 +5449,7 @@
                }
                case PROP_STRING:
                {
-                       char *value= RNA_property_string_get_alloc(fromptr, 
prop, NULL, 0);
+                       char *value= RNA_property_string_get_alloc(fromptr, 
prop, NULL, 0, NULL);
                        RNA_property_string_set(ptr, prop, value);
                        MEM_freeN(value);
                        return 1;

Modified: trunk/blender/source/blender/python/generic/IDProp.c
===================================================================
--- trunk/blender/source/blender/python/generic/IDProp.c        2011-10-22 
09:28:10 UTC (rev 41190)
+++ trunk/blender/source/blender/python/generic/IDProp.c        2011-10-22 
10:49:35 UTC (rev 41191)

@@ Diff output truncated at 10240 characters. @@
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to