aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorClaes Nästén <pekdon@gmail.com>2021-12-06 07:49:15 +0100
committerClaes Nästén <pekdon@gmail.com>2021-12-06 17:34:26 +0100
commit8f1fdbc54a873abc7375c785b2b6ee5440910de2 (patch)
tree3d2d70542b1b87a48d56252c25d6c0b15db83b41 /src
parent8fdf1b265d982b80bfa8e6d98374514ece20a03e (diff)
downloadrneovim-8f1fdbc54a873abc7375c785b2b6ee5440910de2.tar.gz
rneovim-8f1fdbc54a873abc7375c785b2b6ee5440910de2.tar.bz2
rneovim-8f1fdbc54a873abc7375c785b2b6ee5440910de2.zip
fix: add STRNLEN compatability macro
Older SunOS systems come without strnlen, add STRNLEN macro in line with the other str* compat macros.
Diffstat (limited to 'src')
-rw-r--r--src/nvim/api/private/helpers.c2
-rw-r--r--src/nvim/message.c2
-rw-r--r--src/nvim/strings.c12
-rw-r--r--src/nvim/vim.h5
4 files changed, 19 insertions, 2 deletions
diff --git a/src/nvim/api/private/helpers.c b/src/nvim/api/private/helpers.c
index d470def277..9b407eab8b 100644
--- a/src/nvim/api/private/helpers.c
+++ b/src/nvim/api/private/helpers.c
@@ -513,7 +513,7 @@ String cbuf_to_string(const char *buf, size_t size)
String cstrn_to_string(const char *str, size_t maxsize)
FUNC_ATTR_NONNULL_ALL
{
- return cbuf_to_string(str, strnlen(str, maxsize));
+ return cbuf_to_string(str, STRNLEN(str, maxsize));
}
/// Creates a String using the given C string. Unlike
diff --git a/src/nvim/message.c b/src/nvim/message.c
index 6fcd4cef8a..d698cfbeda 100644
--- a/src/nvim/message.c
+++ b/src/nvim/message.c
@@ -2056,7 +2056,7 @@ static void msg_puts_display(const char_u *str, int maxlen, int attr, int recurs
msg_ext_last_attr = attr;
}
// Concat pieces with the same highlight
- size_t len = strnlen((char *)str, maxlen); // -V781
+ size_t len = STRNLEN(str, maxlen); // -V781
ga_concat_len(&msg_ext_last_chunk, (char *)str, len);
msg_ext_cur_len += len;
return;
diff --git a/src/nvim/strings.c b/src/nvim/strings.c
index c58e052ae9..27f93fe4ce 100644
--- a/src/nvim/strings.c
+++ b/src/nvim/strings.c
@@ -394,6 +394,18 @@ void del_trailing_spaces(char_u *ptr)
}
}
+#if !defined(HAVE_STRNLEN)
+size_t xstrnlen(const char *s, size_t n)
+ FUNC_ATTR_NONNULL_ALL FUNC_ATTR_PURE
+{
+ const char *end = memchr(s, '\0', n);
+ if (end == NULL) {
+ return n;
+ }
+ return end - s;
+}
+#endif
+
#if (!defined(HAVE_STRCASECMP) && !defined(HAVE_STRICMP))
/*
* Compare two strings, ignoring case, using current locale.
diff --git a/src/nvim/vim.h b/src/nvim/vim.h
index e3539c1a57..2f8ddd1e88 100644
--- a/src/nvim/vim.h
+++ b/src/nvim/vim.h
@@ -215,6 +215,11 @@ enum { FOLD_TEXT_LEN = 51, }; //!< buffer size for get_foldtext()
// (vim_strchr() is now in strings.c)
#define STRLEN(s) strlen((char *)(s))
+#ifdef HAVE_STRNLEN
+# define STRNLEN(s, n) strnlen((char *)(s), (size_t)(n))
+#else
+# define STRNLEN(s, n) xstrnlen((char *)(s), (size_t)(n))
+#endif
#define STRCPY(d, s) strcpy((char *)(d), (char *)(s))
#define STRNCPY(d, s, n) strncpy((char *)(d), (char *)(s), (size_t)(n))
#define STRLCPY(d, s, n) xstrlcpy((char *)(d), (char *)(s), (size_t)(n))