ObjFW  Diff

Differences From Artifact [1bb1aecd92]:

To Artifact [f8a99adefe]:


466
467
468
469
470
471
472

473

474
475
476
477
478
479
480
481
482
483
484
485
486
487
	addrIn6->sin6_family = AF_INET6;
#else
	addrIn6->sin6_family = AF_UNSPEC;
#endif
	addrIn6->sin6_port = OFToBigEndian16(port);

	if ((percent = [IPv6 rangeOfString: @"%"].location) != OFNotFound) {

		OFString *interface = [IPv6 substringFromIndex: percent + 1];

		IPv6 = [IPv6 substringToIndex: percent];

#ifdef OF_WINDOWS
		if (if_nametoindexPtr != NULL)
			addrIn6->sin6_scope_id = if_nametoindexPtr([interface
			    cStringWithEncoding: [OFLocale encoding]]);
#else
		addrIn6->sin6_scope_id = if_nametoindex(
		    [interface cStringWithEncoding: [OFLocale encoding]]);
#endif
	}

	doubleColon = [IPv6 rangeOfString: @"::"].location;
	if (doubleColon != OFNotFound) {







>

>


|



|







466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
	addrIn6->sin6_family = AF_INET6;
#else
	addrIn6->sin6_family = AF_UNSPEC;
#endif
	addrIn6->sin6_port = OFToBigEndian16(port);

	if ((percent = [IPv6 rangeOfString: @"%"].location) != OFNotFound) {
#if defined(HAVE_IF_NAMETOINDEX) || defined(OF_WINDOWS)
		OFString *interface = [IPv6 substringFromIndex: percent + 1];
#endif
		IPv6 = [IPv6 substringToIndex: percent];

#if defined(OF_WINDOWS)
		if (if_nametoindexPtr != NULL)
			addrIn6->sin6_scope_id = if_nametoindexPtr([interface
			    cStringWithEncoding: [OFLocale encoding]]);
#elif defined(HAVE_IF_NAMETOINDEX)
		addrIn6->sin6_scope_id = if_nametoindex(
		    [interface cStringWithEncoding: [OFLocale encoding]]);
#endif
	}

	doubleColon = [IPv6 rangeOfString: @"::"].location;
	if (doubleColon != OFNotFound) {
902
903
904
905
906
907
908

909
910
911
912
913
914
915
916
917
918
919
920
921
922
923

924
925
926
927
928
929
930
			    (first ? @"%x" : @":%x"),
			    (addrIn6->sin6_addr.s6_addr[i] << 8) |
			    addrIn6->sin6_addr.s6_addr[i + 1]];
			first = false;
		}
	}


	if (addrIn6->sin6_scope_id != 0) {
#ifdef OF_WINDOWS
		char interface[IF_MAX_STRING_SIZE];

		if (if_indextonamePtr != NULL && if_indextonamePtr(
		    addrIn6->sin6_scope_id, interface) != NULL)
#else
		char interface[IF_NAMESIZE];

		if (if_indextoname(addrIn6->sin6_scope_id, interface) != NULL)
#endif
			[string appendFormat: @"%%%s", interface];
		else
			[string appendFormat: @"%%%u", addrIn6->sin6_scope_id];
	}


	[string makeImmutable];

	return string;
}

OFString *







>

|




|



|




>







904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
			    (first ? @"%x" : @":%x"),
			    (addrIn6->sin6_addr.s6_addr[i] << 8) |
			    addrIn6->sin6_addr.s6_addr[i + 1]];
			first = false;
		}
	}

#if defined(HAVE_IF_INDEXTONAME) || defined(OF_WINDOWS)
	if (addrIn6->sin6_scope_id != 0) {
# ifdef OF_WINDOWS
		char interface[IF_MAX_STRING_SIZE];

		if (if_indextonamePtr != NULL && if_indextonamePtr(
		    addrIn6->sin6_scope_id, interface) != NULL)
# else
		char interface[IF_NAMESIZE];

		if (if_indextoname(addrIn6->sin6_scope_id, interface) != NULL)
# endif
			[string appendFormat: @"%%%s", interface];
		else
			[string appendFormat: @"%%%u", addrIn6->sin6_scope_id];
	}
#endif

	[string makeImmutable];

	return string;
}

OFString *