Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2011-10-29 12:18:42 +0400
committerCampbell Barton <ideasman42@gmail.com>2011-10-29 12:18:42 +0400
commit1e4be0a4bf9b16aa74ced29fcac8aef56195bbe8 (patch)
treee40f9909ce8893f7b94b006f1e7199615f2048a4
parented77c356fc1c323cef306fef2e7af03fd67a6871 (diff)
replace BLI_strtok_r from r41337 with lighter method that doesnt alloc for template_list
-rw-r--r--source/blender/blenlib/BLI_string.h23
-rw-r--r--source/blender/blenlib/intern/bpath.c3
-rw-r--r--source/blender/blenlib/intern/string.c29
-rw-r--r--source/blender/editors/interface/interface_templates.c30
4 files changed, 17 insertions, 68 deletions
diff --git a/source/blender/blenlib/BLI_string.h b/source/blender/blenlib/BLI_string.h
index 9a7fa521af1..46389a9259e 100644
--- a/source/blender/blenlib/BLI_string.h
+++ b/source/blender/blenlib/BLI_string.h
@@ -132,29 +132,6 @@ int BLI_strcasecmp(const char *s1, const char *s2);
int BLI_strncasecmp(const char *s1, const char *s2, size_t len);
int BLI_natstrcmp(const char *s1, const char *s2);
size_t BLI_strnlen(const char *str, size_t maxlen);
-
- /**
- * Split str on the first occurence of delimiter, returns the first
- * part as a mallocN'd string, and stores the second part into
- * ctx (also mallocN'd).
- * If str is NULL, split on ctx instead.
- * This allows to iterate over this "generator" function:
- *
- * char *ctx = NULL;
- * char *res = NULL;
- * for(res = BLI_strtok_r("a;dummy;csv;line", ";", &ctx); res; res = BLI_strtok_r(NULL, ";", &ctx)) {
- * printf(res);
- * MEM_freeN(res);
- * }
- *
- * @param str The string to be split.
- * @param delimiter The char used to split str apart.
- * @param ctx The "context" string. It’s a pointer inside the org passed @str,
- * so it has no specific mem management.
- * @retval Returns the mallocN'd first element from split str (or ctx).
- */
-char *BLI_strtok_r(char *str, const char *delimiter, char **ctx);
-
void BLI_timestr(double _time, char *str); /* time var is global */
void BLI_ascii_strtolower(char *str, int len);
diff --git a/source/blender/blenlib/intern/bpath.c b/source/blender/blenlib/intern/bpath.c
index e42e02fb24f..b7fe7ef5efd 100644
--- a/source/blender/blenlib/intern/bpath.c
+++ b/source/blender/blenlib/intern/bpath.c
@@ -325,8 +325,7 @@ static int rewrite_path_fixed_dirfile(char path_dir[FILE_MAXDIR], char path_file
}
if (visit_cb(userdata, path_dst, (const char *)path_src)) {
- BLI_split_dirfile(path_dst, path_dir, path_file,
- sizeof(path_dir), sizeof(path_file));
+ BLI_split_dirfile(path_dst, path_dir, path_file, FILE_MAXDIR, FILE_MAXFILE);
return TRUE;
}
else {
diff --git a/source/blender/blenlib/intern/string.c b/source/blender/blenlib/intern/string.c
index 3ec84e0b593..3a66425a5de 100644
--- a/source/blender/blenlib/intern/string.c
+++ b/source/blender/blenlib/intern/string.c
@@ -375,35 +375,6 @@ int BLI_natstrcmp(const char *s1, const char *s2)
return 0;
}
-/* As unfortunately strtok_r is not available everywhere... */
-char *BLI_strtok_r(char *str, const char *delimiter, char **ctx)
-{
- char *cut = NULL, *ret = NULL;
- char *split = str ? str : *ctx;
-
- if(!split) {
- return ret;
- }
-
- cut = strchr(split, *delimiter);
- if(cut) {
- size_t len_ret = cut - split;
- size_t len_ctx = strlen(split) - len_ret - 1;
- ret = BLI_strdupn(split, len_ret);
- if(len_ctx > 0) {
- *ctx = split+len_ret+1;
- }
- else {
- *ctx = NULL;
- }
- }
- else {
- ret = BLI_strdup(split);
- *ctx = NULL;
- }
- return ret;
-}
-
void BLI_timestr(double _time, char *str)
{
/* format 00:00:00.00 (hr:min:sec) string has to be 12 long */
diff --git a/source/blender/editors/interface/interface_templates.c b/source/blender/editors/interface/interface_templates.c
index e714d0bbc17..19d22a432dc 100644
--- a/source/blender/editors/interface/interface_templates.c
+++ b/source/blender/editors/interface/interface_templates.c
@@ -2059,7 +2059,7 @@ static int list_item_icon_get(bContext *C, PointerRNA *itemptr, int rnaicon, int
return rnaicon;
}
-static void list_item_row(bContext *C, uiLayout *layout, PointerRNA *ptr, PointerRNA *itemptr, int i, int rnaicon, PointerRNA *activeptr, PropertyRNA *activeprop, const char *prop_list)
+static void list_item_row(bContext *C, uiLayout *layout, PointerRNA *ptr, PointerRNA *itemptr, int i, int rnaicon, PointerRNA *activeptr, PropertyRNA *activeprop, const char *prop_list_id)
{
uiBlock *block= uiLayoutGetBlock(layout);
uiBut *but;
@@ -2184,8 +2184,7 @@ static void list_item_row(bContext *C, uiLayout *layout, PointerRNA *ptr, Pointe
* … you’ll get a numfield for the integer prop, a check box for the bool prop, and a textfield
* for the string prop, after the name of each item of the collection.
*/
- else if (prop_list) {
- PropertyRNA *prop_ctrls;
+ else if (prop_list_id) {
row = uiLayoutRow(sub, 1);
uiItemL(row, name, icon);
@@ -2194,18 +2193,21 @@ static void list_item_row(bContext *C, uiLayout *layout, PointerRNA *ptr, Pointe
* which would obviously produce a sigsev… */
if (itemptr->type) {
/* If the special property is set for the item, and it is a collection… */
- prop_ctrls = RNA_struct_find_property(itemptr, prop_list);
- if(prop_ctrls) {
- if(RNA_property_type(prop_ctrls) == PROP_STRING) {
- char *prop_names = RNA_property_string_get_alloc(itemptr, prop_ctrls, NULL, 0, NULL);
- char *id = NULL;
- char *ctx = NULL;
- for(id = BLI_strtok_r(prop_names, ":", &ctx); id; id = BLI_strtok_r(NULL, ":", &ctx)) {
- uiItemR(row, itemptr, id, 0, NULL, 0);
- MEM_freeN(id);
- }
- MEM_freeN(prop_names);
+ PropertyRNA *prop_list= RNA_struct_find_property(itemptr, prop_list_id);
+
+ if(prop_list && RNA_property_type(prop_list) == PROP_STRING) {
+ int prop_names_len;
+ char *prop_names = RNA_property_string_get_alloc(itemptr, prop_list, NULL, 0, &prop_names_len);
+ char *prop_names_end= prop_names + prop_names_len;
+ char *id= prop_names;
+ char *id_next;
+ while (id < prop_names_end) {
+ if ((id_next= strchr(id, ':'))) *id_next++= '\0';
+ else id_next= prop_names_end;
+ uiItemR(row, itemptr, id, 0, NULL, 0);
+ id= id_next;
}
+ MEM_freeN(prop_names);
}
}
}