From 342bdaf4a26e249b60cb74dee74ed5b93a965296 Mon Sep 17 00:00:00 2001 From: Martin Stein Date: Thu, 17 May 2018 16:55:48 +0200 Subject: [PATCH] net: generic ascii_to for Netaddress template Issue #2837 --- repos/os/include/net/netaddress.h | 44 +++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/repos/os/include/net/netaddress.h b/repos/os/include/net/netaddress.h index 1208dfc62..d96860104 100644 --- a/repos/os/include/net/netaddress.h +++ b/repos/os/include/net/netaddress.h @@ -83,4 +83,48 @@ struct Net::Network_address } __attribute__((packed)); + +namespace Genode { + + template + inline size_t ascii_to(char const *str, + Net::Network_address &result) + { + Net::Network_address result_buf; + size_t number_id = 0; + size_t read_len = 0; + while (1) { + + /* read the current number */ + size_t number_len = + ascii_to_unsigned(str, result_buf.addr[number_id], + HEX ? 16 : 10); + + /* fail if there's no number */ + if (!number_len) { + return 0; } + + /* update read length and number index */ + read_len += number_len; + number_id++; + + /* if we have all numbers, fill result and return read length */ + if (number_id == LEN) { + result = result_buf; + return read_len; + } + /* there are numbers left, check for the delimiter */ + str += number_len; + if (*str != DELIM) { + return 0; } + + /* seek to next number */ + read_len++; + str++; + } + } +} + + + #endif /* _NET__NETADDRESS_H_ */