mirror of https://gerrit.osmocom.org/libosmocore
Introduce osmo_identifier_valid() function to check validity of identifier
We define the notion of an 'osmocom identifier' which is basically a 7-bit US-ASCII without any special characters beyond "-_:@". We introduce a function to verify if an identifier consists only of the permitted characters. Change-Id: I96a8d345c5a69238a12d040f39b70c485a5c421c
This commit is contained in:
parent
c8ef736370
commit
febe83c424
|
@ -22,6 +22,7 @@
|
|||
/*! Number of bytes necessary to store given BITS */
|
||||
#define OSMO_BYTES_FOR_BITS(BITS) ((BITS + 8 - 1) / 8)
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
|
||||
|
@ -112,4 +113,6 @@ size_t osmo_strlcpy(char *dst, const char *src, size_t siz);
|
|||
bool osmo_is_hexstr(const char *str, int min_digits, int max_digits,
|
||||
bool require_even);
|
||||
|
||||
bool osmo_identifier_valid(const char *str);
|
||||
|
||||
/*! @} */
|
||||
|
|
28
src/utils.c
28
src/utils.c
|
@ -22,6 +22,7 @@
|
|||
*/
|
||||
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <string.h>
|
||||
#include <stdint.h>
|
||||
#include <errno.h>
|
||||
|
@ -411,6 +412,33 @@ bool osmo_is_hexstr(const char *str, int min_digits, int max_digits,
|
|||
return false;
|
||||
if (require_even && (len & 1))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/*! Determine if a given identifier is valid, i.e. doesn't contain illegal chars
|
||||
* \param[in] str String to validate
|
||||
* \returns true in case string contains valid identifier, false otherwise
|
||||
*/
|
||||
bool osmo_identifier_valid(const char *str)
|
||||
{
|
||||
/* characters that are illegal in names */
|
||||
static const char illegal_chars[] = "., {}[]()<>|~\\^`'\"?=;/+*&%$#!";
|
||||
unsigned int i;
|
||||
|
||||
/* an empty string is not a valid identifier */
|
||||
if (!str || strlen(str) == 0)
|
||||
return false;
|
||||
|
||||
for (i = 0; i < strlen(str); i++) {
|
||||
/* check for 7-bit ASCII */
|
||||
if (str[i] & 0x80)
|
||||
return false;
|
||||
/* check for some explicit reserved control characters */
|
||||
if (strchr(illegal_chars, str[i]))
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue