diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/misc.c | 38 | ||||
| -rw-r--r-- | lib/misc.h | 3 | 
2 files changed, 41 insertions, 0 deletions
| @@ -321,6 +321,44 @@ char *strip_newlines( char *source )  	return source;  } +/* Wrap an IPv4 address into IPv6 space. Not thread-safe... */ +char *ipv6_wrap( char *src ) +{ +	static char dst[64]; +	int i; +	 +	for( i = 0; src[i]; i ++ ) +		if( ( src[i] < '0' || src[i] > '9' ) && src[i] != '.' ) +			break; +	 +	/* Hmm, it's not even an IP... */ +	if( src[i] ) +		return src; +	 +	g_snprintf( dst, sizeof( dst ), "::ffff:%s", src ); +	 +	return dst; +} + +/* Unwrap an IPv4 address into IPv6 space. Thread-safe, because it's very simple. :-) */ +char *ipv6_unwrap( char *src ) +{ +	int i; +	 +	if( g_strncasecmp( src, "::ffff:", 7 ) != 0 ) +		return src; +	 +	for( i = 7; src[i]; i ++ ) +		if( ( src[i] < '0' || src[i] > '9' ) && src[i] != '.' ) +			break; +	 +	/* Hmm, it's not even an IP... */ +	if( src[i] ) +		return src; +	 +	return ( src + 7 ); +} +  /* Convert from one charset to another.     from_cs, to_cs: Source and destination charsets @@ -51,6 +51,9 @@ G_MODULE_EXPORT char *escape_html( const char *html );  G_MODULE_EXPORT void http_decode( char *s );  G_MODULE_EXPORT void http_encode( char *s ); +G_MODULE_EXPORT char *ipv6_wrap( char *src ); +G_MODULE_EXPORT char *ipv6_unwrap( char *src ); +  G_MODULE_EXPORT signed int do_iconv( char *from_cs, char *to_cs, char *src, char *dst, size_t size, size_t maxbuf );  G_MODULE_EXPORT void random_bytes( unsigned char *buf, int count ); | 
