Every time I see a code like
if (strncasecmp(argv, "remember=", 9) == 0)
options->remember = strtol(&argv[9], NULL, 10);
my eyes are bleeding.
Similar to pam_str_skip_prefix_len() and pam_str_skip_prefix(),
introduce a new helper inline function pam_str_skip_icase_prefix_len()
and a new macro pam_str_skip_icase_prefix() on top of it, to be used
in subsequent commits to cleanup the ugliness.
* libpam/include/pam_inline.h (pam_str_skip_icase_prefix_len): New
function.
(pam_str_skip_icase_prefix): New macro.
---
libpam/include/pam_inline.h | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/libpam/include/pam_inline.h b/libpam/include/pam_inline.h
index e901b332..21d078ac 100644
--- a/libpam/include/pam_inline.h
+++ b/libpam/include/pam_inline.h
@@ -42,4 +42,19 @@ pam_str_skip_prefix_len(const char *str, const char *prefix, size_t
prefix_len)
#define pam_str_skip_prefix(str_, prefix_) \
pam_str_skip_prefix_len((str_), (prefix_), sizeof(prefix_) - 1 +
PAM_MUST_BE_ARRAY(prefix_))
+/*
+ * Returns NULL if STR does not start with PREFIX
+ * (ignoring the case of the characters),
+ * or a pointer to the first char in STR after PREFIX.
+ * The length of PREFIX is specified by PREFIX_LEN.
+ */
+static inline const char *
+pam_str_skip_icase_prefix_len(const char *str, const char *prefix, size_t prefix_len)
+{
+ return strncasecmp(str, prefix, prefix_len) ? NULL : str + prefix_len;
+}
+
+#define pam_str_skip_icase_prefix(str_, prefix_) \
+ pam_str_skip_icase_prefix_len((str_), (prefix_), sizeof(prefix_) - 1 +
PAM_MUST_BE_ARRAY(prefix_))
+
#endif /* PAM_INLINE_H */
--
ldv