summaryrefslogtreecommitdiff
path: root/libpam/include
diff options
context:
space:
mode:
authorDmitry V. Levin <ldv@altlinux.org>2020-03-17 21:29:24 +0000
committerDmitry V. Levin <ldv@altlinux.org>2020-03-19 18:40:16 +0000
commit8d5fe1790a01969545e6cc1872ac629490692ac2 (patch)
tree86447af4a5fc74eed362444dbe631bcdc9018d9d /libpam/include
parent13ec29f9c11e9ee73fc0f62dd56b3dffc7742c39 (diff)
Introduce pam_str_skip_icase_prefix_len and pam_str_skip_icase_prefix
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.
Diffstat (limited to 'libpam/include')
-rw-r--r--libpam/include/pam_inline.h15
1 files changed, 15 insertions, 0 deletions
diff --git a/libpam/include/pam_inline.h b/libpam/include/pam_inline.h
index 2e3a8d6a..ec05fe43 100644
--- a/libpam/include/pam_inline.h
+++ b/libpam/include/pam_inline.h
@@ -49,4 +49,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 */