Signed-off-by: Alejandro Colomar <alx@kernel.org>
string/sprintf/stpeprintf.h \
string/sprintf/xasprintf.c \
string/sprintf/xasprintf.h \
+ string/strchr/strchrcnt.c \
+ string/strchr/strchrcnt.h \
string/strchr/stpspn.c \
string/strchr/stpspn.h \
string/strchr/strnul.c \
--- /dev/null
+// SPDX-FileCopyrightText: 2024, Alejandro Colomar <alx@kernel.org>
+// SPDX-License-Identifier: BSD-3-Clause
+
+
+#include <config.h>
+
+#include "string/strchr/strchrcnt.h"
+
+#include <stddef.h>
+
+
+extern inline size_t strchrcnt(const char *s, char c);
--- /dev/null
+// SPDX-FileCopyrightText: 2024, Alejandro Colomar <alx@kernel.org>
+// SPDX-License-Identifier: BSD-3-Clause
+
+
+#ifndef SHADOW_INCLUDE_LIB_STRING_STRCHR_STRCHRCNT_H_
+#define SHADOW_INCLUDE_LIB_STRING_STRCHR_STRCHRCNT_H_
+
+
+#include <config.h>
+
+#include <stddef.h>
+
+#include "attr.h"
+#include "string/strcmp/streq.h"
+
+
+ATTR_STRING(1)
+inline size_t strchrcnt(const char *s, char c);
+
+
+inline size_t
+strchrcnt(const char *s, char c)
+{
+ size_t n = 0;
+
+ for (; !streq(s, ""); s++) {
+ if (*s == c)
+ n++;
+ }
+
+ return n;
+}
+
+
+#endif // include guard