From owner-freebsd-net@FreeBSD.ORG Tue Oct 23 17:37:56 2012 Return-Path: Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id DB0C6A1F for ; Tue, 23 Oct 2012 17:37:56 +0000 (UTC) (envelope-from adrian.chadd@gmail.com) Received: from mail-pa0-f54.google.com (mail-pa0-f54.google.com [209.85.220.54]) by mx1.freebsd.org (Postfix) with ESMTP id AB4578FC0A for ; Tue, 23 Oct 2012 17:37:56 +0000 (UTC) Received: by mail-pa0-f54.google.com with SMTP id bi1so3061296pad.13 for ; Tue, 23 Oct 2012 10:37:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:sender:in-reply-to:references:date :x-google-sender-auth:message-id:subject:from:to:cc:content-type; bh=6wxytLzUw8YGnOCybrc70pdpEiEr+51mLHs7jf8CUNQ=; b=M8G1efgk0zf36nELHsVG2rLWj4WqQ2vsiBw3DZKBecukvjAClg9nsI4XWVnBfhYOYb J4x3edt5AJ6QFf5t+yAu1/RxIm991tzsFMNmggUmm/9PqJ6tMpHOtBT2ijj2nEF+prqc pX2O+byPQMGpVypOBCINGgJouSHe6oNQY1ES6x2cHQ6mjizz7uyJAS7lNK8bQoMYKevA 5SPs3NSHyau4cPNdwb9RkHP6qau13tgKvCSB8s869qDxCJM2fum8IvXgP4tzoIBKcmuY jEx7NNQikxp6K1AqIrzkbEJaQMI69sPdHp1Wnu6l5ubdyUdeEFJK7IX4+H0c7RxCvxtB WiTg== MIME-Version: 1.0 Received: by 10.66.79.166 with SMTP id k6mr37148973pax.25.1351013876283; Tue, 23 Oct 2012 10:37:56 -0700 (PDT) Sender: adrian.chadd@gmail.com Received: by 10.68.146.233 with HTTP; Tue, 23 Oct 2012 10:37:56 -0700 (PDT) In-Reply-To: <201210230840.q9N8e038066538@freefall.freebsd.org> References: <201210230840.q9N8e038066538@freefall.freebsd.org> Date: Tue, 23 Oct 2012 10:37:56 -0700 X-Google-Sender-Auth: 4sU0wQOVgZtBg7J_Mgzd9EJ6k5A Message-ID: Subject: Re: kern/92880: [libc] [patch] almost rewritten inet_network(3) function From: Adrian Chadd To: Andrey Simonenko Content-Type: text/plain; charset=ISO-8859-1 Cc: freebsd-net@freebsd.org X-BeenThere: freebsd-net@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: Networking and TCP/IP with FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 23 Oct 2012 17:37:56 -0000 ... don't suppose you want to throw this into a test case somewhere in the tree? The new ATF import would be ideal for this. :) Adrian On 23 October 2012 01:40, Andrey Simonenko wrote: > The following reply was made to PR kern/92880; it has been noted by GNATS. > > From: Andrey Simonenko > To: bug-followup@FreeBSD.org > Cc: > Subject: kern/92880: [libc] [patch] almost rewritten inet_network(3) function > Date: Tue, 23 Oct 2012 11:36:04 +0300 > > I optimized inet_network() again. > > Difference between implementation of inet_network(3) from 9.1-PRERELEASE > and my implementation. > > STRING INET_NETWORK INET_NETWORK_NEW > "0x12" 0x00000012 0x00000012 > "127.1" 0x00007f01 0x00007f01 > "127.1.2.3" 0x7f010203 0x7f010203 > "0x123456" INADDR_NONE INADDR_NONE > "0x12.0x34" 0x00001234 0x00001234 > "0x12.0x345" INADDR_NONE INADDR_NONE > "1.2.3.4.5" INADDR_NONE INADDR_NONE > "1..3.4" INADDR_NONE INADDR_NONE > "." INADDR_NONE INADDR_NONE > "1." INADDR_NONE INADDR_NONE > ".1" INADDR_NONE INADDR_NONE > "0x" 0x00000000 INADDR_NONE <--- > "0" 0x00000000 0x00000000 > "01.02.07.077" 0x0102073f 0x0102073f > "0x1.23.045.0" 0x01172500 0x01172500 > "" INADDR_NONE INADDR_NONE > " " INADDR_NONE INADDR_NONE > " f" INADDR_NONE INADDR_NONE > "bar" INADDR_NONE INADDR_NONE > "1.2bar" INADDR_NONE INADDR_NONE > "1." INADDR_NONE INADDR_NONE > "=CA=C3=D5=CB=C5=CE" INADDR_NONE INADDR_NONE > "255.255.255.255" INADDR_NONE INADDR_NONE > "x" INADDR_NONE INADDR_NONE > "0X12" 0x00000012 0x00000012 > "078" INADDR_NONE INADDR_NONE > "1 bar" 0x00000001 INADDR_NONE <--- > "127.0xabcd" INADDR_NONE INADDR_NONE > "128" 0x00000080 0x00000080 > "0.1.2" 0x00000102 0x00000102 > "0xff.010.23.0xa0" 0xff0817a0 0xff0817a0 > "x10" 0x00000010 INADDR_NONE <--- > "X20" 0x00000020 INADDR_NONE <--- > "x10.x20" 0x00001020 INADDR_NONE <--- > "4294967297" 0x00000001 INADDR_NONE <--- > "0x10000000f" 0x0000000f INADDR_NONE <--- > "040000000003" 0x00000003 INADDR_NONE <--- > > #include > #include > > #include > #include > > #include > #include > #include > #include > #include > #include > > static in_addr_t > inet_network_new(const char *s) > { > u_int d, base, dots; > in_addr_t addr, byte; > u_char c; > bool flag; > > addr =3D 0; > dots =3D 0; > for (;; ++s) { > byte =3D 0; > flag =3D false; > if (*s =3D=3D '0') { > ++s; > if (*s =3D=3D 'x' || *s =3D=3D 'X') { > ++s; > base =3D 16; > } else { > base =3D 8; > flag =3D true; > } > } else > base =3D 10; > for (; (c =3D *s) !=3D '\0'; ++s) { > d =3D digittoint(c); > if (c !=3D '0' && (d =3D=3D 0 || d >=3D base)) > break; > byte =3D byte * base + d; > if (byte > UINT8_MAX) > return (INADDR_NONE); > flag =3D true; > } > if (!flag) > return (INADDR_NONE); > addr =3D (addr << 8) | byte; > if (c !=3D '.') > break; > if (++dots =3D=3D 4) > return (INADDR_NONE); > } > return (c =3D=3D '\0' ? addr : INADDR_NONE); > } > > int > main(void) > { > const char *const addr_str_tbl[] =3D { > "0x12", "127.1", "127.1.2.3", "0x123456", "0x12.0x34", > "0x12.0x345", "1.2.3.4.5", "1..3.4", ".", "1.", ".1", "0x", > "0", "01.02.07.077", "0x1.23.045.0", "", " ", " f", "bar", > "1.2bar", "1.", "=CA=C3=D5=CB=C5=CE", "255.255.255.255", "x", "0X12"= > , "078", > "1 bar", "127.0xabcd", "128", "0.1.2", "0xff.010.23.0xa0", > "x10", "X20", "x10.x20", "4294967297", "0x10000000f", > "040000000003", NULL }; > const char *const *addr_str; > size_t len; > in_addr_t addr1, addr2; > > printf("STRING\t\t\tINET_NETWORK\tINET_NETWORK_NEW\n"); > for (addr_str =3D addr_str_tbl; *addr_str !=3D NULL; ++addr_str) { > printf("\"%s\"", *addr_str); > len =3D strlen(*addr_str) + 2; > if (len < 8) > printf("\t\t\t"); > else if (len < 16) > printf("\t\t"); > else > printf("\t"); > addr1 =3D inet_network(*addr_str); > if (addr1 =3D=3D INADDR_NONE) > printf("INADDR_NONE\t"); > else > printf("0x%08x\t", addr1); > addr2 =3D inet_network_new(*addr_str); > if (addr2 =3D=3D INADDR_NONE) > printf("INADDR_NONE"); > else > printf("0x%08x", addr2); > if (addr1 !=3D addr2) > printf("\t<---"); > printf("\n"); > } > return (0); > } > _______________________________________________ > freebsd-net@freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/freebsd-net > To unsubscribe, send any mail to "freebsd-net-unsubscribe@freebsd.org"