Re: [Qemu-devel] [PATCH 1/2] qemu-socket: allow hostnames starting with a digit
Il 03/06/2013 17:54, Ján Tomko ha scritto: According to RFC 1123 [1], hostnames can start with a digit too. [1] http://tools.ietf.org/html/rfc1123#page-13 Signed-off-by: Ján Tomko jto...@redhat.com --- util/qemu-sockets.c | 13 - 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/util/qemu-sockets.c b/util/qemu-sockets.c index fdd8dc4..727dafa 100644 --- a/util/qemu-sockets.c +++ b/util/qemu-sockets.c @@ -24,7 +24,6 @@ #include monitor/monitor.h #include qemu/sockets.h -#include qemu-common.h /* for qemu_isdigit */ #include qemu/main-loop.h #ifndef AI_ADDRCONFIG @@ -511,19 +510,15 @@ InetSocketAddress *inet_parse(const char *str, Error **errp) goto fail; } addr-ipv6 = addr-has_ipv6 = true; -} else if (qemu_isdigit(str[0])) { -/* IPv4 addr */ -if (2 != sscanf(str, %64[0-9.]:%32[^,]%n, host, port, pos)) { -error_setg(errp, error parsing IPv4 address '%s', str); -goto fail; -} -addr-ipv4 = addr-has_ipv4 = true; } else { -/* hostname */ +/* hostname or IPv4 addr */ if (2 != sscanf(str, %64[^:]:%32[^,]%n, host, port, pos)) { error_setg(errp, error parsing address '%s', str); goto fail; } +if (strcspn(host, 0123456789.) == 0) { I think what you want here is: if (host[strspn(host, 0123456789.)] == '\0') { Otherwise, you're still basically testing qemu_isdigit(str[0]) || str[0] == '.' Paolo +addr-ipv4 = addr-has_ipv4 = true; +} } addr-host = g_strdup(host);
[Qemu-devel] [PATCH 1/2] qemu-socket: allow hostnames starting with a digit
From: Ján Tomko jto...@redhat.com According to RFC 1123 [1], hostnames can start with a digit too. [1] http://tools.ietf.org/html/rfc1123#page-13 Signed-off-by: Ján Tomko jto...@redhat.com Cc: qemu-sta...@nongnu.org [Use strspn, not strcspn. - Paolo] Signed-off-by: Paolo Bonzini pbonz...@redhat.com --- util/qemu-sockets.c | 13 - 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/util/qemu-sockets.c b/util/qemu-sockets.c index fdd8dc4..96eca2a 100644 --- a/util/qemu-sockets.c +++ b/util/qemu-sockets.c @@ -24,7 +24,6 @@ #include monitor/monitor.h #include qemu/sockets.h -#include qemu-common.h /* for qemu_isdigit */ #include qemu/main-loop.h #ifndef AI_ADDRCONFIG @@ -511,19 +510,15 @@ InetSocketAddress *inet_parse(const char *str, Error **errp) goto fail; } addr-ipv6 = addr-has_ipv6 = true; -} else if (qemu_isdigit(str[0])) { -/* IPv4 addr */ -if (2 != sscanf(str, %64[0-9.]:%32[^,]%n, host, port, pos)) { -error_setg(errp, error parsing IPv4 address '%s', str); -goto fail; -} -addr-ipv4 = addr-has_ipv4 = true; } else { -/* hostname */ +/* hostname or IPv4 addr */ if (2 != sscanf(str, %64[^:]:%32[^,]%n, host, port, pos)) { error_setg(errp, error parsing address '%s', str); goto fail; } +if (host[strspn(host, 0123456789.)] == '\0') { +addr-ipv4 = addr-has_ipv4 = true; +} } addr-host = g_strdup(host); -- 1.8.1.4
Re: [Qemu-devel] [PATCH 1/2] qemu-socket: allow hostnames starting with a digit
On 06/18/2013 11:42 AM, Paolo Bonzini wrote: Il 03/06/2013 17:54, Ján Tomko ha scritto: According to RFC 1123 [1], hostnames can start with a digit too. [1] http://tools.ietf.org/html/rfc1123#page-13 Signed-off-by: Ján Tomko jto...@redhat.com --- } else { -/* hostname */ +/* hostname or IPv4 addr */ if (2 != sscanf(str, %64[^:]:%32[^,]%n, host, port, pos)) { error_setg(errp, error parsing address '%s', str); goto fail; } +if (strcspn(host, 0123456789.) == 0) { I think what you want here is: if (host[strspn(host, 0123456789.)] == '\0') { Yes, thank you for catching that. Jan Otherwise, you're still basically testing qemu_isdigit(str[0]) || str[0] == '.' Paolo +addr-ipv4 = addr-has_ipv4 = true; +} } addr-host = g_strdup(host);
[Qemu-devel] [PATCH 1/2] qemu-socket: allow hostnames starting with a digit
From: Ján Tomko jto...@redhat.com According to RFC 1123 [1], hostnames can start with a digit too. [1] http://tools.ietf.org/html/rfc1123#page-13 Signed-off-by: Ján Tomko jto...@redhat.com Cc: qemu-sta...@nongnu.org [Use strspn, not strcspn. - Paolo] Signed-off-by: Paolo Bonzini pbonz...@redhat.com --- util/qemu-sockets.c | 13 - 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/util/qemu-sockets.c b/util/qemu-sockets.c index fdd8dc4..96eca2a 100644 --- a/util/qemu-sockets.c +++ b/util/qemu-sockets.c @@ -24,7 +24,6 @@ #include monitor/monitor.h #include qemu/sockets.h -#include qemu-common.h /* for qemu_isdigit */ #include qemu/main-loop.h #ifndef AI_ADDRCONFIG @@ -511,19 +510,15 @@ InetSocketAddress *inet_parse(const char *str, Error **errp) goto fail; } addr-ipv6 = addr-has_ipv6 = true; -} else if (qemu_isdigit(str[0])) { -/* IPv4 addr */ -if (2 != sscanf(str, %64[0-9.]:%32[^,]%n, host, port, pos)) { -error_setg(errp, error parsing IPv4 address '%s', str); -goto fail; -} -addr-ipv4 = addr-has_ipv4 = true; } else { -/* hostname */ +/* hostname or IPv4 addr */ if (2 != sscanf(str, %64[^:]:%32[^,]%n, host, port, pos)) { error_setg(errp, error parsing address '%s', str); goto fail; } +if (host[strspn(host, 0123456789.)] == '\0') { +addr-ipv4 = addr-has_ipv4 = true; +} } addr-host = g_strdup(host); -- 1.8.1.4
[Qemu-devel] [PATCH 1/2] qemu-socket: allow hostnames starting with a digit
According to RFC 1123 [1], hostnames can start with a digit too. [1] http://tools.ietf.org/html/rfc1123#page-13 Signed-off-by: Ján Tomko jto...@redhat.com --- util/qemu-sockets.c | 13 - 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/util/qemu-sockets.c b/util/qemu-sockets.c index fdd8dc4..727dafa 100644 --- a/util/qemu-sockets.c +++ b/util/qemu-sockets.c @@ -24,7 +24,6 @@ #include monitor/monitor.h #include qemu/sockets.h -#include qemu-common.h /* for qemu_isdigit */ #include qemu/main-loop.h #ifndef AI_ADDRCONFIG @@ -511,19 +510,15 @@ InetSocketAddress *inet_parse(const char *str, Error **errp) goto fail; } addr-ipv6 = addr-has_ipv6 = true; -} else if (qemu_isdigit(str[0])) { -/* IPv4 addr */ -if (2 != sscanf(str, %64[0-9.]:%32[^,]%n, host, port, pos)) { -error_setg(errp, error parsing IPv4 address '%s', str); -goto fail; -} -addr-ipv4 = addr-has_ipv4 = true; } else { -/* hostname */ +/* hostname or IPv4 addr */ if (2 != sscanf(str, %64[^:]:%32[^,]%n, host, port, pos)) { error_setg(errp, error parsing address '%s', str); goto fail; } +if (strcspn(host, 0123456789.) == 0) { +addr-ipv4 = addr-has_ipv4 = true; +} } addr-host = g_strdup(host); -- 1.8.1.5