[Bf-blender-cvs] [ecb6a6d] master: OpenEXR cleanup: get rid of public `IMB_exr_split_token`, use BLI str helpers instead of own cooking.

Bastien Montagne noreply at git.blender.org
Sat Jun 27 10:26:23 CEST 2015


Commit: ecb6a6df52a9f3852c9bec12e63b4ab8b06fe5f4
Author: Bastien Montagne
Date:   Sat Jun 27 10:24:00 2015 +0200
Branches: master
https://developer.blender.org/rBecb6a6df52a9f3852c9bec12e63b4ab8b06fe5f4

OpenEXR cleanup: get rid of public `IMB_exr_split_token`, use BLI str helpers instead of own cooking.

===================================================================

M	source/blender/imbuf/intern/openexr/openexr_api.cpp
M	source/blender/imbuf/intern/openexr/openexr_multi.h
M	source/blender/imbuf/intern/openexr/openexr_stub.cpp

===================================================================

diff --git a/source/blender/imbuf/intern/openexr/openexr_api.cpp b/source/blender/imbuf/intern/openexr/openexr_api.cpp
index ba19794..eb25ca8 100644
--- a/source/blender/imbuf/intern/openexr/openexr_api.cpp
+++ b/source/blender/imbuf/intern/openexr/openexr_api.cpp
@@ -769,16 +769,19 @@ static const char *imb_exr_insert_view_name(const char *passname, const char *vi
 		return passname;
 
 	static char retstr[EXR_PASS_MAXNAME];
-	const char *end = passname + strlen(passname);
-	const char *token;
+	const char delims[] = {'.', '\0'};
+	char *sep;
+	char *token;
+	size_t len;
 
-	int len = IMB_exr_split_token(passname, end, &token);
+	len = BLI_str_rpartition(passname, delims, &sep, &token);
 
-	if (len == 0)
+	if (sep) {
+		BLI_snprintf(retstr, sizeof(retstr), "%.*s.%s.%s", (int)len, passname, viewname, token);
+	}
+	else {
 		BLI_snprintf(retstr, sizeof(retstr), "%s.%s", passname, viewname);
-	else
-		BLI_snprintf(retstr, sizeof(retstr),  "%.*s%s.%s",
-		             (int)(end - passname) - len, passname, viewname, token);
+	}
 
 	return retstr;
 }
@@ -1413,16 +1416,18 @@ void IMB_exr_close(void *handle)
 /* ********* */
 
 /* get a substring from the end of the name, separated by '.' */
-int IMB_exr_split_token(const char *str, const char *end, const char **token)
+static int imb_exr_split_token(const char *str, const char *end, const char **token)
 {
-	ptrdiff_t maxlen = end - str;
-	int len = 0;
-	while (len < maxlen && *(end - len - 1) != '.') {
-		len++;
+	const char delims[] = {'.', '\0'};
+	char *sep;
+
+	BLI_str_partition_ex(str, end, delims, &sep, (char **)token, true);
+
+	if (!sep) {
+		*token = str;
 	}
 
-	*token = end - len;
-	return len;
+	return (int)(end - *token);
 }
 
 static int imb_exr_split_channel_name(ExrChannel *echan, char *layname, char *passname)
@@ -1449,7 +1454,7 @@ static int imb_exr_split_channel_name(ExrChannel *echan, char *layname, char *pa
 	}
 
 	/* last token is single character channel identifier */
-	len = IMB_exr_split_token(name, end, &token);
+	len = imb_exr_split_token(name, end, &token);
 	if (len == 0) {
 		printf("multilayer read: bad channel name: %s\n", name);
 		return 0;
@@ -1487,7 +1492,7 @@ static int imb_exr_split_channel_name(ExrChannel *echan, char *layname, char *pa
 	end -= len + 1; /* +1 to skip '.' separator */
 
 	/* second token is pass name */
-	len = IMB_exr_split_token(name, end, &token);
+	len = imb_exr_split_token(name, end, &token);
 	if (len == 0) {
 		printf("multilayer read: bad channel name: %s\n", name);
 		return 0;
diff --git a/source/blender/imbuf/intern/openexr/openexr_multi.h b/source/blender/imbuf/intern/openexr/openexr_multi.h
index 97e8042..70ba497 100644
--- a/source/blender/imbuf/intern/openexr/openexr_multi.h
+++ b/source/blender/imbuf/intern/openexr/openexr_multi.h
@@ -93,8 +93,6 @@ void    IMB_exr_close(void *handle);
 
 void    IMB_exr_add_view(void *handle, const char *name);
 
-int IMB_exr_split_token(const char *str, const char *end, const char **token);
-
 bool IMB_exr_has_multilayer(void *handle);
 bool IMB_exr_has_singlelayer_multiview(void *handle);
 
diff --git a/source/blender/imbuf/intern/openexr/openexr_stub.cpp b/source/blender/imbuf/intern/openexr/openexr_stub.cpp
index 3ad2345..c198cac 100644
--- a/source/blender/imbuf/intern/openexr/openexr_stub.cpp
+++ b/source/blender/imbuf/intern/openexr/openexr_stub.cpp
@@ -79,6 +79,5 @@ bool    IMB_exr_multiview_save(
 void    IMB_exr_close               (void * /*handle*/) { }
 
 void    IMB_exr_add_view(void * /*handle*/, const char * /*name*/) { }
-int     IMB_exr_split_token(const char * /*str*/, const char * /*end*/, const char ** /*token*/) { return 1; }
 bool    IMB_exr_has_multilayer(void * /*handle*/) { return false; }
 bool    IMB_exr_has_singlelayer_multiview(void * /*handle*/) { return false; }




More information about the Bf-blender-cvs mailing list