[NET]: Accept wildcard delimiters in in[46]_pton
Accept -1 as delimiter to abort parsing without an error at the first unknown character. This is needed by the upcoming nf_conntrack SIP helper, where addresses are delimited by either '\r' or '\n' characters. Signed-off-by: Patrick McHardy <kaber@trash.net> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
a163148c1b
commit
9a7c9337a0
2 changed files with 8 additions and 6 deletions
|
@ -46,7 +46,7 @@
|
|||
#include <linux/types.h>
|
||||
|
||||
extern __be32 in_aton(const char *str);
|
||||
extern int in4_pton(const char *src, int srclen, u8 *dst, char delim, const char **end);
|
||||
extern int in6_pton(const char *src, int srclen, u8 *dst, char delim, const char **end);
|
||||
extern int in4_pton(const char *src, int srclen, u8 *dst, int delim, const char **end);
|
||||
extern int in6_pton(const char *src, int srclen, u8 *dst, int delim, const char **end);
|
||||
#endif
|
||||
#endif /* _LINUX_INET_H */
|
||||
|
|
|
@ -88,7 +88,7 @@ EXPORT_SYMBOL(in_aton);
|
|||
#define IN6PTON_NULL 0x20000000 /* first/tail */
|
||||
#define IN6PTON_UNKNOWN 0x40000000
|
||||
|
||||
static inline int digit2bin(char c, char delim)
|
||||
static inline int digit2bin(char c, int delim)
|
||||
{
|
||||
if (c == delim || c == '\0')
|
||||
return IN6PTON_DELIM;
|
||||
|
@ -99,7 +99,7 @@ static inline int digit2bin(char c, char delim)
|
|||
return IN6PTON_UNKNOWN;
|
||||
}
|
||||
|
||||
static inline int xdigit2bin(char c, char delim)
|
||||
static inline int xdigit2bin(char c, int delim)
|
||||
{
|
||||
if (c == delim || c == '\0')
|
||||
return IN6PTON_DELIM;
|
||||
|
@ -113,12 +113,14 @@ static inline int xdigit2bin(char c, char delim)
|
|||
return (IN6PTON_XDIGIT | (c - 'a' + 10));
|
||||
if (c >= 'A' && c <= 'F')
|
||||
return (IN6PTON_XDIGIT | (c - 'A' + 10));
|
||||
if (delim == -1)
|
||||
return IN6PTON_DELIM;
|
||||
return IN6PTON_UNKNOWN;
|
||||
}
|
||||
|
||||
int in4_pton(const char *src, int srclen,
|
||||
u8 *dst,
|
||||
char delim, const char **end)
|
||||
int delim, const char **end)
|
||||
{
|
||||
const char *s;
|
||||
u8 *d;
|
||||
|
@ -173,7 +175,7 @@ EXPORT_SYMBOL(in4_pton);
|
|||
|
||||
int in6_pton(const char *src, int srclen,
|
||||
u8 *dst,
|
||||
char delim, const char **end)
|
||||
int delim, const char **end)
|
||||
{
|
||||
const char *s, *tok = NULL;
|
||||
u8 *d, *dc = NULL;
|
||||
|
|
Loading…
Reference in a new issue