bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: getaddrinfo.c: don't require snprintf; new function: shorttostr


From: Jim Meyering
Subject: Re: getaddrinfo.c: don't require snprintf; new function: shorttostr
Date: Mon, 23 Oct 2006 08:08:00 +0200

Jim Meyering <address@hidden> wrote:
> Simon Josefsson <address@hidden> wrote:
>> On Sat, 2006-10-21 at 10:39 +0200, Jim Meyering wrote:
>>> Paul, Simon,
>>> Any objection to the changes below?
>>
>> Seems generally fine to me, thanks!
...
> If you prefer uint16_t over "unsigned short int" we can try that, but
> since that type is used solely for a temporary, with no risk of sign
> extension its width shouldn't matter, and with the latter, we don't
> have to worry about whether the type is defined.  We could even use
> "unsigned int".

I've checked it in:

2006-10-23  Jim Meyering  <address@hidden>

        * lib/getaddrinfo.c (getnameinfo): Use new lightweight uinttostr,
        in place of snprintf.

        * modules/inttostr (Files): Add lib/uinttostr.c.
        * lib/uinttostr.c (inttostr): New file/function.
        * lib/inttostr.h (uinttostr): Declare.
        * m4/inttostr.m4: Add AC_LIBOBJ([uinttostr]).
        * MODULES.html.sh (Numeric conversion functions <stdlib.h>):
        Add uinttostr.
        * modules/getaddrinfo (Depends-on): Remove snprintf.  Add inttostr.

Index: lib/getaddrinfo.c
===================================================================
RCS file: /sources/gnulib/gnulib/lib/getaddrinfo.c,v
retrieving revision 1.16
diff -u -r1.16 getaddrinfo.c
--- lib/getaddrinfo.c   18 Sep 2006 18:07:05 -0000      1.16
+++ lib/getaddrinfo.c   23 Oct 2006 06:02:55 -0000
@@ -39,7 +39,7 @@
 #define N_(String) String

 #include "inet_ntop.h"
-#include "snprintf.h"
+#include "intprops.h"
 #include "strdup.h"

 /* BeOS has AF_INET, but not PF_INET.  */
@@ -405,10 +405,15 @@
 #if HAVE_IPV6
       case AF_INET6:
 #endif
-       if (snprintf (service, servicelen, "%d",
-                     ntohs (((const struct sockaddr_in *) sa)->sin_port))
-           + 1 > servicelen)
-         return EAI_OVERFLOW;
+       {
+         unsigned short int port
+           = ntohs (((const struct sockaddr_in *) sa)->sin_port);
+         char buf[INT_BUFSIZE_BOUND (port)];
+         char const *s = uinttostr (port, buf);
+         if (strlen (s) + 1 > servicelen)
+           return EAI_OVERFLOW;
+         memcpy (service, s, strlen (s) + 1);
+       }
        break;
       }

Index: lib/uinttostr.c
===================================================================
RCS file: lib/uinttostr.c
diff -N lib/uinttostr.c
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ lib/uinttostr.c     23 Oct 2006 06:02:55 -0000
@@ -0,0 +1,3 @@
+#define inttostr uinttostr
+#define inttype unsigned int
+#include "inttostr.c"
Index: lib/inttostr.h
===================================================================
RCS file: /sources/gnulib/gnulib/lib/inttostr.h,v
retrieving revision 1.7
diff -u -r1.7 inttostr.h
--- lib/inttostr.h      21 Aug 2006 06:11:26 -0000      1.7
+++ lib/inttostr.h      23 Oct 2006 06:02:55 -0000
@@ -27,3 +27,4 @@
 char *offtostr (off_t, char *);
 char *imaxtostr (intmax_t, char *);
 char *umaxtostr (uintmax_t, char *);
+char *uinttostr (unsigned int, char *);
Index: modules/inttostr
===================================================================
RCS file: /sources/gnulib/gnulib/modules/inttostr,v
retrieving revision 1.11
diff -u -r1.11 inttostr
--- modules/inttostr    13 Oct 2006 12:40:23 -0000      1.11
+++ modules/inttostr    23 Oct 2006 06:02:55 -0000
@@ -7,6 +7,7 @@
 lib/inttostr.h
 lib/offtostr.c
 lib/umaxtostr.c
+lib/uinttostr.c
 m4/inttostr.m4

 Depends-on:
Index: modules/getaddrinfo
===================================================================
RCS file: /sources/gnulib/gnulib/modules/getaddrinfo,v
retrieving revision 1.12
diff -u -r1.12 getaddrinfo
--- modules/getaddrinfo 13 Oct 2006 12:40:23 -0000      1.12
+++ modules/getaddrinfo 23 Oct 2006 06:02:55 -0000
@@ -9,12 +9,12 @@

 Depends-on:
 gettext-h
-snprintf
+inet_ntop
+inttostr
 socklen
 stdbool
 strdup
 sys_socket
-inet_ntop

 configure.ac:
 gl_GETADDRINFO
Index: m4/inttostr.m4
===================================================================
RCS file: /sources/gnulib/gnulib/m4/inttostr.m4,v
retrieving revision 1.5
diff -u -r1.5 inttostr.m4
--- m4/inttostr.m4      21 Aug 2006 06:11:26 -0000      1.5
+++ m4/inttostr.m4      23 Oct 2006 06:02:55 -0000
@@ -1,4 +1,4 @@
-#serial 6
+#serial 7
 dnl Copyright (C) 2004, 2005, 2006 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -9,11 +9,13 @@
   AC_LIBOBJ([imaxtostr])
   AC_LIBOBJ([offtostr])
   AC_LIBOBJ([umaxtostr])
+  AC_LIBOBJ([uinttostr])

   gl_PREREQ_INTTOSTR
   gl_PREREQ_IMAXTOSTR
   gl_PREREQ_OFFTOSTR
   gl_PREREQ_UMAXTOSTR
+  gl_PREREQ_UINTTOSTR
 ])

 # Prerequisites of lib/inttostr.h.
@@ -30,3 +32,6 @@

 # Prerequisites of lib/umaxtostr.c.
 AC_DEFUN([gl_PREREQ_UMAXTOSTR], [:])
+
+# Prerequisites of lib/uinttostr.c.
+AC_DEFUN([gl_PREREQ_UINTTOSTR], [:])
Index: MODULES.html.sh
===================================================================
RCS file: /sources/gnulib/gnulib/MODULES.html.sh,v
retrieving revision 1.152
diff -u -r1.152 MODULES.html.sh
--- MODULES.html.sh     16 Oct 2006 11:55:35 -0000      1.152
+++ MODULES.html.sh     23 Oct 2006 06:02:55 -0000
@@ -1802,6 +1802,7 @@
   func_begin_table
   func_module intprops
   func_module inttostr
+  func_module uinttostr
   func_module xstrtoimax
   func_module xstrtoumax
   func_end_table




reply via email to

[Prev in Thread] Current Thread [Next in Thread]