[ovs-dev] [patch_v10 1/7] string: Implement strcasestr for Windows.

Darrell Ball dlu998 at gmail.com
Sat Aug 5 22:58:29 UTC 2017


strcasestr is not defined for Windows, so implement a version
that could be used on Windows. This is needed for an upcoming
patch.

Signed-off-by: Darrell Ball <dlu998 at gmail.com>
Co-authored-by: Ben Pfaff <blp at ovn.org>
Signed-off-by: Ben Pfaff <blp at ovn.org>
---
 lib/string.c    | 22 ++++++++++++++++++++--
 lib/string.h.in |  3 ++-
 2 files changed, 22 insertions(+), 3 deletions(-)

diff --git a/lib/string.c b/lib/string.c
index 082359d..bd8bb86 100644
--- a/lib/string.c
+++ b/lib/string.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2009, 2011 Nicira, Inc.
+ * Copyright (c) 2009-2017 Nicira, Inc.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -15,9 +15,11 @@
  */
 
 #include <config.h>
-
+#include <ctype.h>
 #include <string.h>
 
+#include "util.h"
+
 #ifndef HAVE_STRNLEN
 size_t
 strnlen(const char *s, size_t maxlen)
@@ -26,3 +28,19 @@ strnlen(const char *s, size_t maxlen)
     return end ? end - s : maxlen;
 }
 #endif
+
+#ifdef _WIN32
+char *strcasestr(const char *str, const char *substr)
+{
+    do {
+        for (size_t i = 0; ; i++) {
+            if (!substr[i]) {
+                return CONST_CAST(char *, str);
+            } else if (tolower(substr[i]) != tolower(str[i])) {
+                break;
+            }
+        }
+    } while (*str++);
+    return NULL;
+}
+#endif
diff --git a/lib/string.h.in b/lib/string.h.in
index bbdaeb4..7a8e18f 100644
--- a/lib/string.h.in
+++ b/lib/string.h.in
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2009, 2011, 2013 Nicira, Inc.
+ * Copyright (c) 2009, 2011, 2013, 2017 Nicira, Inc.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -36,6 +36,7 @@
 #define strcasecmp _stricmp
 #define strncasecmp _strnicmp
 #define strerror_r(errnum, buf, buflen) strerror_s(buf, buflen, errnum)
+char *strcasestr(const char *, const char *);
 #endif
 
 #ifndef HAVE_STRNLEN
-- 
1.9.1



More information about the dev mailing list