This is an automated email from the ASF dual-hosted git repository.

xiaoxiang781216 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx-apps.git


The following commit(s) were added to refs/heads/master by this push:
     new 1567b11d4 nshlib/nsh_netcmds: set AI_CANONNAME and SOCK_STREAM hints 
in cmd_nslookup
1567b11d4 is described below

commit 1567b11d4daddcbf0097e64933e84ec24b701d29
Author: Swatantra Yadav <[email protected]>
AuthorDate: Sun Oct 25 17:05:35 2026 +0530

    nshlib/nsh_netcmds: set AI_CANONNAME and SOCK_STREAM hints in cmd_nslookup
    
    cmd_nslookup() previously called getaddrinfo() with hints == NULL.
    When ai_socktype is unspecified (0), getaddrinfo() performs
    multi-transport expansion and returns distinct records for all supported
    transports (both SOCK_STREAM and SOCK_DGRAM), resulting in duplicate IP
    entries being printed for each host.
    
    Additionally, IEEE Std 1003.1 (POSIX) specifies that ai_canonname is
    only guaranteed in the first returned addrinfo structure when AI_CANONNAME
    is explicitly set in hints.ai_flags.
    
    This commit:
    1. Specifies AI_CANONNAME and SOCK_STREAM in hints so cmd_nslookup()
       returns a single record per IP address.
    2. Uses the first result's ai_canonname with a fallback to argv[1]
       across all rows.
    3. Fixes pre-existing nxstyle declaration blank line warnings in
       wget_callback() and cmd_wget().
    
    Signed-off-by: Swatantra Yadav <[email protected]>
---
 nshlib/nsh_netcmds.c | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

diff --git a/nshlib/nsh_netcmds.c b/nshlib/nsh_netcmds.c
index c281650d2..f368a5de7 100644
--- a/nshlib/nsh_netcmds.c
+++ b/nshlib/nsh_netcmds.c
@@ -346,6 +346,7 @@ static int wget_callback(FAR char **buffer, int offset, int 
datend,
 {
   ssize_t written = write((int)((intptr_t)arg), &((*buffer)[offset]),
                           datend - offset);
+
   if (written == -1)
     {
       return -errno;
@@ -1177,6 +1178,7 @@ int cmd_vconfig(FAR struct nsh_vtbl_s *vtbl, int argc, 
FAR char **argv)
 #if defined(CONFIG_LIBC_NETDB) && !defined(CONFIG_NSH_DISABLE_NSLOOKUP)
 int cmd_nslookup(FAR struct nsh_vtbl_s *vtbl, int argc, FAR char **argv)
 {
+  struct addrinfo hints;
   FAR struct addrinfo *info;
   FAR struct addrinfo *next;
   char buffer[48];
@@ -1188,7 +1190,11 @@ int cmd_nslookup(FAR struct nsh_vtbl_s *vtbl, int argc, 
FAR char **argv)
 
   /* Get the matching address + canonical name */
 
-  ret = getaddrinfo(argv[1], NULL, NULL, &info);
+  memset(&hints, 0, sizeof(hints));
+  hints.ai_flags    = AI_CANONNAME;
+  hints.ai_socktype = SOCK_STREAM;
+
+  ret = getaddrinfo(argv[1], NULL, &hints, &info);
   if (ret != OK)
     {
       nsh_error(vtbl, g_fmtcmdfailed,
@@ -1212,7 +1218,9 @@ int cmd_nslookup(FAR struct nsh_vtbl_s *vtbl, int argc, 
FAR char **argv)
 
       /* Print the host name / address mapping */
 
-      nsh_output(vtbl, "Host: %s Addr: %s\n", next->ai_canonname, buffer);
+      nsh_output(vtbl, "Host: %s Addr: %s\n",
+                 info->ai_canonname != NULL ? info->ai_canonname : argv[1],
+                 buffer);
     }
 
   freeaddrinfo(info);
@@ -1509,6 +1517,7 @@ int cmd_put(FAR struct nsh_vtbl_s *vtbl, int argc, FAR 
char **argv)
 #ifndef CONFIG_NSH_DISABLE_WGET
 int cmd_wget(FAR struct nsh_vtbl_s *vtbl, int argc, FAR char **argv)
 {
+  struct webclient_context ctx;
   FAR char *localfile = NULL;
   FAR char *allocfile = NULL;
   FAR char *buffer    = NULL;
@@ -1608,7 +1617,6 @@ int cmd_wget(FAR struct nsh_vtbl_s *vtbl, int argc, FAR 
char **argv)
 
   /* And perform the wget */
 
-  struct webclient_context ctx;
   webclient_set_defaults(&ctx);
   ctx.method = "GET";
   ctx.url = url;

Reply via email to