#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 */
 
 #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;
        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;
                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;
 
 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;