diff options
author | Dmitry V. Levin <ldv@altlinux.org> | 2020-03-17 21:29:24 +0000 |
---|---|---|
committer | Dmitry V. Levin <ldv@altlinux.org> | 2020-03-19 18:40:16 +0000 |
commit | 8d5fe1790a01969545e6cc1872ac629490692ac2 (patch) | |
tree | 86447af4a5fc74eed362444dbe631bcdc9018d9d | |
parent | 13ec29f9c11e9ee73fc0f62dd56b3dffc7742c39 (diff) | |
download | pam-8d5fe1790a01969545e6cc1872ac629490692ac2.tar.gz pam-8d5fe1790a01969545e6cc1872ac629490692ac2.tar.bz2 pam-8d5fe1790a01969545e6cc1872ac629490692ac2.zip |
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.
-rw-r--r-- | libpam/include/pam_inline.h | 15 |
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 */ |