aboutsummaryrefslogtreecommitdiff
path: root/resolv/ns_name.c
diff options
context:
space:
mode:
authorFlorian Weimer <fweimer@redhat.com>2021-07-19 07:55:27 +0200
committerFlorian Weimer <fweimer@redhat.com>2021-07-19 07:56:21 +0200
commit276e9822b3402d49a3c9bea713f89dc855812152 (patch)
tree1599a1be8b294d39144157e6ac701b19095b8f03 /resolv/ns_name.c
parent4e1d3db1e86804283cd21f3186e06d397284ac70 (diff)
downloadglibc-276e9822b3402d49a3c9bea713f89dc855812152.zip
glibc-276e9822b3402d49a3c9bea713f89dc855812152.tar.gz
glibc-276e9822b3402d49a3c9bea713f89dc855812152.tar.bz2
resolv: Move ns_name_pton into its own file and into libc
And reformat to GNU style, and eliminate the digits variable. The symbol was moved using scripts/move-symbol-to-libc.py. Reviewed-by: Carlos O'Donell <carlos@redhat.com> Tested-by: Carlos O'Donell <carlos@redhat.com>
Diffstat (limited to 'resolv/ns_name.c')
-rw-r--r--resolv/ns_name.c125
1 files changed, 0 insertions, 125 deletions
diff --git a/resolv/ns_name.c b/resolv/ns_name.c
index 35e25cb..9f7ca4a 100644
--- a/resolv/ns_name.c
+++ b/resolv/ns_name.c
@@ -29,10 +29,6 @@
# define SPRINTF(x) ((size_t)sprintf x)
-/* Data. */
-
-static const char digits[] = "0123456789";
-
/* Forward. */
static int dn_find(const u_char *, const u_char *,
@@ -42,127 +38,6 @@ static int labellen(const u_char *);
/* Public. */
-
-/*%
- * Convert an ascii string into an encoded domain name as per RFC1035.
- *
- * return:
- *
- *\li -1 if it fails
- *\li 1 if string was fully qualified
- *\li 0 is string was not fully qualified
- *
- * notes:
- *\li Enforces label and domain length limits.
- */
-
-int
-ns_name_pton(const char *src, u_char *dst, size_t dstsiz)
-{
- u_char *label, *bp, *eom;
- int c, n, escaped;
- char *cp;
-
- escaped = 0;
- bp = dst;
- eom = dst + dstsiz;
- label = bp++;
-
- while ((c = *src++) != 0) {
- if (escaped) {
- if ((cp = strchr(digits, c)) != NULL) {
- n = (cp - digits) * 100;
- if ((c = *src++) == 0 ||
- (cp = strchr(digits, c)) == NULL) {
- __set_errno (EMSGSIZE);
- return (-1);
- }
- n += (cp - digits) * 10;
- if ((c = *src++) == 0 ||
- (cp = strchr(digits, c)) == NULL) {
- __set_errno (EMSGSIZE);
- return (-1);
- }
- n += (cp - digits);
- if (n > 255) {
- __set_errno (EMSGSIZE);
- return (-1);
- }
- c = n;
- }
- escaped = 0;
- } else if (c == '\\') {
- escaped = 1;
- continue;
- } else if (c == '.') {
- c = (bp - label - 1);
- if ((c & NS_CMPRSFLGS) != 0) { /*%< Label too big. */
- __set_errno (EMSGSIZE);
- return (-1);
- }
- if (label >= eom) {
- __set_errno (EMSGSIZE);
- return (-1);
- }
- *label = c;
- /* Fully qualified ? */
- if (*src == '\0') {
- if (c != 0) {
- if (bp >= eom) {
- __set_errno (EMSGSIZE);
- return (-1);
- }
- *bp++ = '\0';
- }
- if ((bp - dst) > MAXCDNAME) {
- __set_errno (EMSGSIZE);
- return (-1);
- }
- return (1);
- }
- if (c == 0 || *src == '.') {
- __set_errno (EMSGSIZE);
- return (-1);
- }
- label = bp++;
- continue;
- }
- if (bp >= eom) {
- __set_errno (EMSGSIZE);
- return (-1);
- }
- *bp++ = (u_char)c;
- }
- if (escaped) {
- /* Trailing backslash. */
- __set_errno (EMSGSIZE);
- return -1;
- }
- c = (bp - label - 1);
- if ((c & NS_CMPRSFLGS) != 0) { /*%< Label too big. */
- __set_errno (EMSGSIZE);
- return (-1);
- }
- if (label >= eom) {
- __set_errno (EMSGSIZE);
- return (-1);
- }
- *label = c;
- if (c != 0) {
- if (bp >= eom) {
- __set_errno (EMSGSIZE);
- return (-1);
- }
- *bp++ = 0;
- }
- if ((bp - dst) > MAXCDNAME) { /*%< src too big */
- __set_errno (EMSGSIZE);
- return (-1);
- }
- return (0);
-}
-libresolv_hidden_def (ns_name_pton)
-
/*%
* Convert a network strings labels into all lowercase.
*