This is the mail archive of the cygwin mailing list for the Cygwin project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[1.7] cygwin inet_ntop prints IPv6 addresses in upper-case.

This is fairly superficial, but I noticed that cygwin 1.7's inet_ntop
function prints hex bytes in IPv6 addresses in upper-case.

This is inconsistent with what inet_ntop does on every other platform I've
tested, and a recent Internet-Draft
also recommends printing IPv6 addresses in lower-case, among other reasons
because upper-case "D" is harder to distinguish visually from "0".

It looks like _small_sprintf in winsup/cygwin/smallprint.c doesn't have any
code to print lower-case hex, though.


$ ~/inet-ntop-test.exe 2002:8281:52fc:5:34cb:4e60:950b:82b5
2002:8281:52fc:5:34cb:4e60:950b:82b5 -> 2002:8281:52FC:5:34CB:4E60:950B:82B5


$ ./inet-ntop-test 2002:8281:52fc:5:34cb:4e60:950b:82b5
2002:8281:52fc:5:34cb:4e60:950b:82b5 -> 2002:8281:52fc:5:34cb:4e60:950b:82b5

Jonathan Lennox
lennox at cs dot columbia dot edu

#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>

#include <string.h>
#include <stdlib.h>
#include <stdio.h>

int main(int argc, char *argv[])
	int i;

	for (i = 1; i < argc; i++) {
		struct sockaddr_in6 sin6;
		char pres_buf[INET6_ADDRSTRLEN];

		memset(&sin6, 0, sizeof(sin6));
		sin6.sin6_family = AF_INET6;

		if (inet_pton(AF_INET6, argv[i], &sin6.sin6_addr) != 1) {
			fprintf(stderr, "%s: did not parse as AF_INET6\n", argv[i]);

		if (inet_ntop(AF_INET6, &sin6.sin6_addr, pres_buf, sizeof(pres_buf)) == NULL) {
			fprintf(stderr, "%s: could not encode as AF_INET6\n", argv[i]);

		printf("%s -> %s\n", argv[i], pres_buf);


Unsubscribe info:
Problem reports:

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]