aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libsimple/str.h60
-rw-r--r--libsimple/strn.h8
-rw-r--r--man/libsimple_strcasecmpnul.384
-rw-r--r--man/libsimple_strcaseends.34
-rw-r--r--man/libsimple_strcaseeq.372
-rw-r--r--man/libsimple_strcaseeqnul.373
-rw-r--r--man/libsimple_strcasestarts.34
-rw-r--r--man/libsimple_strcasestr.34
-rw-r--r--man/libsimple_strcmpnul.384
-rw-r--r--man/libsimple_strends.34
-rw-r--r--man/libsimple_streq.371
-rw-r--r--man/libsimple_streqnul.372
-rw-r--r--man/libsimple_strrcasestr.34
-rw-r--r--man/libsimple_strrstr.34
-rw-r--r--man/libsimple_strstarts.34
15 files changed, 530 insertions, 22 deletions
diff --git a/libsimple/str.h b/libsimple/str.h
index 5eaee4e..8fdaf19 100644
--- a/libsimple/str.h
+++ b/libsimple/str.h
@@ -4,10 +4,10 @@
/* TODO strcasechr */
/* TODO strcasechrnul */
/* TODO strrcasechr */
-/* TODO stpcmp */
-/* TODO stpcmpnul */
-/* TODO stpcasecmp */
-/* TODO stpcasecmpnul */
+/* TODO streqlen */
+/* TODO strcaseeqlen */
+/* TODO strreqlen */
+/* TODO strrcaseeqlen */
/**
@@ -144,6 +144,16 @@ char *libsimple_strrcasestr(const char *, const char *);
#endif
+/**
+ * Compare two strings, and support `NULL` as less than
+ * the empty string, the comparison is case-sensitive
+ *
+ * @param a One of the strings, may be `NULL`
+ * @param b The other string, may be `NULL`
+ * @return A negative value if `a` is less than `b`,
+ * a positive value if `a` is greater than `b`,
+ * 0 otherwise
+ */
_LIBSIMPLE_GCC_ONLY(__attribute__((__pure__, __warn_unused_result__)))
static inline int libsimple_strcmpnul(const char *__a, const char *__b)
{ return (!__a || !__b) ? !__b - !__a : strcmp(__a, __b); }
@@ -152,6 +162,16 @@ static inline int libsimple_strcmpnul(const char *__a, const char *__b)
#endif
+/**
+ * Compare two strings, and support `NULL` as less than
+ * the empty string, the comparison is case-insensitive
+ *
+ * @param a One of the strings, may be `NULL`
+ * @param b The other string, may be `NULL`
+ * @return A negative value if `a` is less than `b`,
+ * a positive value if `a` is greater than `b`,
+ * 0 otherwise
+ */
_LIBSIMPLE_GCC_ONLY(__attribute__((__pure__, __warn_unused_result__)))
static inline int libsimple_strcasecmpnul(const char *__a, const char *__b)
{ return (!__a || !__b) ? !__b - !__a : strcasecmp(__a, __b); }
@@ -160,6 +180,14 @@ static inline int libsimple_strcasecmpnul(const char *__a, const char *__b)
#endif
+/**
+ * Compare two strings, without support for `NULL`,
+ * the comparison is case-sensitive
+ *
+ * @param a One of the strings, may not be `NULL`
+ * @param b The other string, may not be `NULL`
+ * @return 1 if the strings are equal, 0 otherwise
+ */
_LIBSIMPLE_GCC_ONLY(__attribute__((__pure__, __nonnull__, __warn_unused_result__)))
static inline int libsimple_streq(const char *__a, const char *__b)
{ return !strcmp(__a, __b); }
@@ -168,6 +196,14 @@ static inline int libsimple_streq(const char *__a, const char *__b)
#endif
+/**
+ * Compare two strings, with support for `NULL`,
+ * the comparison is case-sensitive
+ *
+ * @param a One of the strings, may be `NULL`
+ * @param b The other string, may be `NULL`
+ * @return 1 if the strings are equal, 0 otherwise
+ */
_LIBSIMPLE_GCC_ONLY(__attribute__((__pure__, __warn_unused_result__)))
static inline int libsimple_streqnul(const char *__a, const char *__b)
{ return !strcmpnul(__a, __b); }
@@ -176,6 +212,14 @@ static inline int libsimple_streqnul(const char *__a, const char *__b)
#endif
+/**
+ * Compare two strings, without support for `NULL`,
+ * the comparison is case-insensitive
+ *
+ * @param a One of the strings, may not be `NULL`
+ * @param b The other string, may not be `NULL`
+ * @return 1 if the strings are equal, 0 otherwise
+ */
_LIBSIMPLE_GCC_ONLY(__attribute__((__pure__, __nonnull__, __warn_unused_result__)))
static inline int libsimple_strcaseeq(const char *__a, const char *__b)
{ return !strcasecmp(__a, __b); }
@@ -184,6 +228,14 @@ static inline int libsimple_strcaseeq(const char *__a, const char *__b)
#endif
+/**
+ * Compare two strings, with support for `NULL`,
+ * the comparison is case-insensitive
+ *
+ * @param a One of the strings, may be `NULL`
+ * @param b The other string, may be `NULL`
+ * @return 1 if the strings are equal, 0 otherwise
+ */
_LIBSIMPLE_GCC_ONLY(__attribute__((__pure__, __warn_unused_result__)))
static inline int libsimple_strcaseeqnul(const char *__a, const char *__b)
{ return !strcasecmpnul(__a, __b); }
diff --git a/libsimple/strn.h b/libsimple/strn.h
index 81d3797..90b2118 100644
--- a/libsimple/strn.h
+++ b/libsimple/strn.h
@@ -9,10 +9,10 @@
/* TODO strncasestarts */
/* TODO strnends */
/* TODO strncaseends */
-/* TODO stpncmp */
-/* TODO stpncmpnul */
-/* TODO stpncasecmp */
-/* TODO stpncasecmpnul */
+/* TODO strneqlen */
+/* TODO strncaseeqlen */
+/* TODO strrneqlen */
+/* TODO strrncaseeqlen */
_LIBSIMPLE_GCC_ONLY(__attribute__((__pure__, __nonnull__, __warn_unused_result__)))
char *libsimple_strnstr(const char *, const char *, size_t);
diff --git a/man/libsimple_strcasecmpnul.3 b/man/libsimple_strcasecmpnul.3
new file mode 100644
index 0000000..ffd0f8d
--- /dev/null
+++ b/man/libsimple_strcasecmpnul.3
@@ -0,0 +1,84 @@
+.TH LIBSIMPLE_STRCASECMPNUL 3 2018-10-21 libsimple
+.SH NAME
+libsimple_strcasecmpnul \- compare two strings
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+static inline int libsimple_strcasecmpnul(const char *\fIa\fP, const char *\fIb\fP);
+
+#ifndef strcasecmpnul
+# define strcasecmpnul libsimple_strcasecmpnul
+#endif
+.fi
+
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_strcasecmpnul ()
+function compares the strings
+.I a
+and
+.IR b ,
+both of which may be
+.BR NULL ,
+which is treated as less than the empty string.
+.PP
+If one of the strings begins with the other string
+but is longer, the longer string is treated as
+greater than the shorter string.
+.PP
+The comparison is case-insensitive and made as if the
+strings were converted to lowercase and as
+.IR "unsigned char *" s.
+.SH RETURN VALUE
+The
+.BR libsimple_strcasecmpnul ()
+function returns a negative value if
+.I a
+is less than
+.IR b ,
+a positive value if
+.I a
+is greater than
+.IR b ,
+and 0 otherwise.
+.SH ERRORS
+The
+.BR libsimple_strcasecmpnul ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_strcasecmpnul ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_strcasecmpnul ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_strcasecmpnul ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_strcmpnul (3),
+.BR libsimple_strcaseeqnul (3),
+.BR strcasecmp (3)
diff --git a/man/libsimple_strcaseends.3 b/man/libsimple_strcaseends.3
index 2d26307..4a792a3 100644
--- a/man/libsimple_strcaseends.3
+++ b/man/libsimple_strcaseends.3
@@ -21,6 +21,8 @@ function checks whether the string
.I s
ends with the string
.IR t .
+.PP
+The comparison is case-insensitive.
.SH RETURN VALUE
The
.BR libsimple_strcaseends ()
@@ -29,8 +31,6 @@ function returns 1 if the string
ends with the string
.IR t ,
otherwise it returns 0.
-.PP
-The comparison is case-insensitive.
.SH ERRORS
The
.BR libsimple_strcaseends ()
diff --git a/man/libsimple_strcaseeq.3 b/man/libsimple_strcaseeq.3
new file mode 100644
index 0000000..41fb3c1
--- /dev/null
+++ b/man/libsimple_strcaseeq.3
@@ -0,0 +1,72 @@
+.TH LIBSIMPLE_STRCASEEQ 3 2018-10-21 libsimple
+.SH NAME
+libsimple_strcaseeq \- compare two strings
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+static inline int libsimple_strcaseeq(const char *\fIa\fP, const char *\fIb\fP);
+
+#ifndef strcaseeq
+# define strcaseeq libsimple_strcaseeq
+#endif
+.fi
+
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_strcaseeq ()
+function compares the strings
+.I a
+and
+.IR b ,
+neither of which may be
+.BR NULL .
+.PP
+The comparison is case-insensitive.
+.IR "unsigned char *" s.
+.SH RETURN VALUE
+The
+.BR libsimple_strcaseeq ()
+function returns 1 if the strings are equals,
+with the possible exception of the case,
+otherwise it returns 0.
+.SH ERRORS
+The
+.BR libsimple_strcaseeq ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_strcaseeq ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_strcaseeq ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_strcaseeq ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_strcaseeqnul (3),
+.BR libsimple_streq (3),
+.BR strcasecmp (3)
diff --git a/man/libsimple_strcaseeqnul.3 b/man/libsimple_strcaseeqnul.3
new file mode 100644
index 0000000..ab06c67
--- /dev/null
+++ b/man/libsimple_strcaseeqnul.3
@@ -0,0 +1,73 @@
+.TH LIBSIMPLE_STRCASEEQNUL 3 2018-10-21 libsimple
+.SH NAME
+libsimple_strcaseeqnul \- compare two strings
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+static inline int libsimple_strcaseeqnul(const char *\fIa\fP, const char *\fIb\fP);
+
+#ifndef strcaseeqnul
+# define strcaseeqnul libsimple_strcaseeqnul
+#endif
+.fi
+
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_strcaseeqnul ()
+function compares the strings
+.I a
+and
+.IR b ,
+both of which may be
+.BR NULL .
+.PP
+The comparison is case-insensitive.
+.IR "unsigned char *" s.
+.SH RETURN VALUE
+The
+.BR libsimple_strcaseeqnul ()
+function returns 1 if the strings are equals,
+with the possible exception of the case,
+otherwise it returns 0.
+.SH ERRORS
+The
+.BR libsimple_strcaseeqnul ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_strcaseeqnul ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_strcaseeqnul ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_strcaseeqnul ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_strcaseeq (3),
+.BR libsimple_streqnul (3),
+.BR libsimple_strcasecmpnul (3),
+.BR strcasecmp (3)
diff --git a/man/libsimple_strcasestarts.3 b/man/libsimple_strcasestarts.3
index 625edcb..9b7081f 100644
--- a/man/libsimple_strcasestarts.3
+++ b/man/libsimple_strcasestarts.3
@@ -21,6 +21,8 @@ function checks whether the string
.I s
starts with the string
.IR t .
+.PP
+The comparison is case-insensitive.
.SH RETURN VALUE
The
.BR libsimple_strcasestarts ()
@@ -29,8 +31,6 @@ function returns 1 if the string
begins with the string
.IR t ,
otherwise it returns 0.
-.PP
-The comparison is case-insensitive.
.SH ERRORS
The
.BR libsimple_strcasestarts ()
diff --git a/man/libsimple_strcasestr.3 b/man/libsimple_strcasestr.3
index c4d7aab..346a17b 100644
--- a/man/libsimple_strcasestr.3
+++ b/man/libsimple_strcasestr.3
@@ -21,6 +21,8 @@ function scans the string
.I haystack
the first occurrence of the substring
.IR needle .
+.PP
+The comparison is case-insensitive.
.SH RETURN VALUE
The
.BR libsimple_strcasestr ()
@@ -33,8 +35,6 @@ begins with
where
.I r
is the returned pointer.
-.PP
-The comparison is case-insensitive.
.SH ERRORS
The
.BR libsimple_strcasestr ()
diff --git a/man/libsimple_strcmpnul.3 b/man/libsimple_strcmpnul.3
new file mode 100644
index 0000000..79c53bf
--- /dev/null
+++ b/man/libsimple_strcmpnul.3
@@ -0,0 +1,84 @@
+.TH LIBSIMPLE_STRCMPNUL 3 2018-10-21 libsimple
+.SH NAME
+libsimple_strcmpnul \- compare two strings
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+static inline int libsimple_strcmpnul(const char *\fIa\fP, const char *\fIb\fP);
+
+#ifndef strcmpnul
+# define strcmpnul libsimple_strcmpnul
+#endif
+.fi
+
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_strcmpnul ()
+function compares the strings
+.I a
+and
+.IR b ,
+both of which may be
+.BR NULL ,
+which is treated as less than the empty string.
+.PP
+If one of the strings begins with the other string
+but is longer, the longer string is treated as
+greater than the shorter string.
+.PP
+The comparison is case-sensitive and made as if
+the strings were
+.IR "unsigned char *" s.
+.SH RETURN VALUE
+The
+.BR libsimple_strcmpnul ()
+function returns a negative value if
+.I a
+is less than
+.IR b ,
+a positive value if
+.I a
+is greater than
+.IR b ,
+and 0 otherwise.
+.SH ERRORS
+The
+.BR libsimple_strcmpnul ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_strcmpnul ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_strcmpnul ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_strcmpnul ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_strcasecmpnul (3),
+.BR libsimple_streqnul (3),
+.BR strcmp (3)
diff --git a/man/libsimple_strends.3 b/man/libsimple_strends.3
index 63085ec..abc7e5a 100644
--- a/man/libsimple_strends.3
+++ b/man/libsimple_strends.3
@@ -21,6 +21,8 @@ function checks whether the string
.I s
ends with the string
.IR t .
+.PP
+The comparison is case-sensitive.
.SH RETURN VALUE
The
.BR libsimple_strends ()
@@ -29,8 +31,6 @@ function returns 1 if the string
ends with the string
.IR t ,
otherwise it returns 0.
-.PP
-The comparison is case-sensitive.
.SH ERRORS
The
.BR libsimple_strends ()
diff --git a/man/libsimple_streq.3 b/man/libsimple_streq.3
new file mode 100644
index 0000000..f8d28fb
--- /dev/null
+++ b/man/libsimple_streq.3
@@ -0,0 +1,71 @@
+.TH LIBSIMPLE_STREQ 3 2018-10-21 libsimple
+.SH NAME
+libsimple_streq \- compare two strings
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+static inline int libsimple_streq(const char *\fIa\fP, const char *\fIb\fP);
+
+#ifndef streq
+# define streq libsimple_streq
+#endif
+.fi
+
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_streq ()
+function compares the strings
+.I a
+and
+.IR b ,
+neither of which may be
+.BR NULL .
+.PP
+The comparison is case-sensitive.
+.IR "unsigned char *" s.
+.SH RETURN VALUE
+The
+.BR libsimple_streq ()
+function returns 1 if the strings are equals,
+otherwise it returns 0.
+.SH ERRORS
+The
+.BR libsimple_streq ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_streq ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_streq ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_streq ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_streqnul (3),
+.BR libsimple_strcaseeq (3),
+.BR strcmp (3)
diff --git a/man/libsimple_streqnul.3 b/man/libsimple_streqnul.3
new file mode 100644
index 0000000..fa0a35e
--- /dev/null
+++ b/man/libsimple_streqnul.3
@@ -0,0 +1,72 @@
+.TH LIBSIMPLE_STREQNUL 3 2018-10-21 libsimple
+.SH NAME
+libsimple_streqnul \- compare two strings
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+static inline int libsimple_streqnul(const char *\fIa\fP, const char *\fIb\fP);
+
+#ifndef streqnul
+# define streqnul libsimple_streqnul
+#endif
+.fi
+
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_streqnul ()
+function compares the strings
+.I a
+and
+.IR b ,
+both of which may be
+.BR NULL .
+.PP
+The comparison is case-sensitive.
+.IR "unsigned char *" s.
+.SH RETURN VALUE
+The
+.BR libsimple_streqnul ()
+function returns 1 if the strings are equals,
+otherwise it returns 0.
+.SH ERRORS
+The
+.BR libsimple_streqnul ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_streqnul ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_streqnul ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_streqnul ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_streq (3),
+.BR libsimple_strcaseeqnul (3),
+.BR libsimple_strcmpnul (3),
+.BR strcmp (3)
diff --git a/man/libsimple_strrcasestr.3 b/man/libsimple_strrcasestr.3
index 187a784..3b277ae 100644
--- a/man/libsimple_strrcasestr.3
+++ b/man/libsimple_strrcasestr.3
@@ -21,6 +21,8 @@ function scans the string
.I haystack
the last occurrence of the substring
.IR needle .
+.PP
+The comparison is case-insensitive.
.SH RETURN VALUE
The
.BR libsimple_strrcasestr ()
@@ -33,8 +35,6 @@ begins with
where
.I r
is the returned pointer.
-.PP
-The comparison is case-insensitive.
.SH ERRORS
The
.BR libsimple_strrcasestr ()
diff --git a/man/libsimple_strrstr.3 b/man/libsimple_strrstr.3
index 9806a2c..ad85a54 100644
--- a/man/libsimple_strrstr.3
+++ b/man/libsimple_strrstr.3
@@ -21,6 +21,8 @@ function scans the string
.I haystack
the last occurrence of the substring
.IR needle .
+.PP
+The comparison is case-sensitive.
.SH RETURN VALUE
The
.BR libsimple_strrstr ()
@@ -33,8 +35,6 @@ begins with
where
.I r
is the returned pointer.
-.PP
-The comparison is case-sensitive.
.SH ERRORS
The
.BR libsimple_strrstr ()
diff --git a/man/libsimple_strstarts.3 b/man/libsimple_strstarts.3
index 128c4af..cf08967 100644
--- a/man/libsimple_strstarts.3
+++ b/man/libsimple_strstarts.3
@@ -21,6 +21,8 @@ function checks whether the string
.I s
starts with the string
.IR t .
+.PP
+The comparison is case-sensitive.
.SH RETURN VALUE
The
.BR libsimple_strstarts ()
@@ -29,8 +31,6 @@ function returns 1 if the string
begins with the string
.IR t ,
otherwise it returns 0.
-.PP
-The comparison is case-sensitive.
.SH ERRORS
The
.BR libsimple_strstarts ()