[lttng-dev] [Babeltrace RFC PATCH 16/28] Add MinGW implementation of strtok_r
Ikaheimonen, JP
jp_ikaheimonen at mentor.com
Thu May 2 07:57:27 EDT 2013
---
compat/compat_strlib.c | 40 ++++++++++++++++++++++++++++++++++++++
converter/babeltrace.c | 2 +-
include/babeltrace/compat/string.h | 4 ++++
3 files changed, 45 insertions(+), 1 deletion(-)
diff --git a/compat/compat_strlib.c b/compat/compat_strlib.c
index 7413e74..3cbd455 100644
--- a/compat/compat_strlib.c
+++ b/compat/compat_strlib.c
@@ -1,6 +1,46 @@
#include <babeltrace/compat/string.h>
#ifdef __MINGW32__
+
+char* strtok_r(
+ char *str,
+ const char *delim,
+ char **nextp)
+{
+ char *ret;
+
+ /* if str is NULL, continue from nextp */
+ if (str == NULL) {
+ str = *nextp;
+ }
+ /* skip the leading delimiter characters */
+ str += strspn(str, delim);
+
+ /* return NULL if all are delimiters */
+ if (*str == '\0') {
+ return NULL;
+ }
+ /* return the pointer to the first character that is not delimiter */
+ ret = str;
+
+ /* scan to the next delimiter */
+ str += strcspn(str, delim);
+
+ /* if we found a delimiter instead of a NUL */
+ if (*str) {
+ /* replace the delimiter with the NUL */
+ *str = '\0';
+ /* next time, scan from the character after NUL */
+ *nextp = str + 1;
+ }
+ else {
+ /* end of string: next time, scan at the end (NUL) again */
+ *nextp = str;
+ }
+
+ return ret;
+}
+
int strerror_r(int errnum, char *buf, size_t buflen)
{
/* non-recursive implementation of strerror_r */
diff --git a/converter/babeltrace.c b/converter/babeltrace.c
index 7b3db49..f4a9217 100644
--- a/converter/babeltrace.c
+++ b/converter/babeltrace.c
@@ -49,7 +49,7 @@
#include <unistd.h>
#include <inttypes.h>
#include <babeltrace/compat/ftw.h>
-#include <string.h>
+#include <babeltrace/compat/string.h>
#include <babeltrace/ctf-ir/metadata.h> /* for clocks */
diff --git a/include/babeltrace/compat/string.h b/include/babeltrace/compat/string.h
index 8591b7e..501d003 100644
--- a/include/babeltrace/compat/string.h
+++ b/include/babeltrace/compat/string.h
@@ -3,6 +3,10 @@
#include <string.h>
+#ifdef __MINGW32__
+char *strtok_r(char *str, const char *delim, char **nextp);
+#endif
+
int compat_strerror_r(int errnum, char *buf, size_t buflen);
#endif
--
1.8.1.msysgit.1
More information about the lttng-dev
mailing list