This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] getaddrinfo: remove redundant GAIH_OKIFUNSPEC


On Mon, Dec 02, 2013 at 06:15:08AM -0500, Pavel Simerda wrote:
> Remove redundant GAIH_OKIFUNSPEC and GAIH_EAI.
> 
> Only gaih_inet() and gaih_inet_serv() use a special bit flag denoted
> by the GAIH_OKIFUNSPEC macro. Only the return value of
> gaih_inet_serv() is actively checked for the bit flag which is
> redundant because it just copies the nonzero property of the value
> otherwise returned. The return value of gaih_inet() is only checked
> for being zero and then the bit flag is filtered out. As the bit
> flag is set only for otherwise nonzero return values, it doesn't
> affect the zero comparison. GAIH_EAI just an alias to
> ~GAIH_OKIFUNSPEC.
>
> 	* sysdeps/posix/getaddrinfo.c (extern int __idna_to_unicode_lzlz): Remove the macros.
> 	(gaih_inet_serv): Likewise.
> 	(gaih_inet): Likewise.
> 	(getaddrinfo): Likewise.

That is still not right.  This is what I have committed:

	* sysdeps/posix/getaddrinfo.c (GAIH_OKIFUNSPEC): Remove macro.
	(GAIH_EAI): Likewise.
	(gaih_inet_serv): Don't use GAIH_OKIFUNSPEC.
	(gaih_inet): Likewise.
	(getaddrinfo): Don't use GAIH_EAI.


Siddhesh

> 
> diff --git a/sysdeps/posix/getaddrinfo.c b/sysdeps/posix/getaddrinfo.c
> index 387c22f..8218237 100644
> --- a/sysdeps/posix/getaddrinfo.c
> +++ b/sysdeps/posix/getaddrinfo.c
> @@ -71,9 +71,6 @@ extern int __idna_to_unicode_lzlz (const char *input, char **output,
>  # include <libidn/idna.h>
>  #endif
>  
> -#define GAIH_OKIFUNSPEC 0x0100
> -#define GAIH_EAI        ~(GAIH_OKIFUNSPEC)
> -
>  struct gaih_service
>    {
>      const char *name;
> @@ -157,7 +154,7 @@ gaih_inet_serv (const char *servicename, const struct gaih_typeproto *tp,
>  	  if (r == ERANGE)
>  	    tmpbuflen *= 2;
>  	  else
> -	    return GAIH_OKIFUNSPEC | -EAI_SERVICE;
> +	    return -EAI_SERVICE;
>  	}
>      }
>    while (r);
> @@ -299,9 +296,9 @@ gaih_inet (const char *name, const struct gaih_service *service,
>        if (! tp->name[0])
>  	{
>  	  if (req->ai_socktype)
> -	    return GAIH_OKIFUNSPEC | -EAI_SOCKTYPE;
> +	    return -EAI_SOCKTYPE;
>  	  else
> -	    return GAIH_OKIFUNSPEC | -EAI_SERVICE;
> +	    return -EAI_SERVICE;
>  	}
>      }
>  
> @@ -309,7 +306,7 @@ gaih_inet (const char *name, const struct gaih_service *service,
>    if (service != NULL)
>      {
>        if ((tp->protoflag & GAI_PROTO_NOSERVICE) != 0)
> -	return GAIH_OKIFUNSPEC | -EAI_SERVICE;
> +	return -EAI_SERVICE;
>  
>        if (service->num < 0)
>  	{
> @@ -345,7 +342,7 @@ gaih_inet (const char *name, const struct gaih_service *service,
>  
>  		  if ((rc = gaih_inet_serv (service->name, tp, req, newp)))
>  		    {
> -		      if (rc & GAIH_OKIFUNSPEC)
> +		      if (rc)
>  			continue;
>  		      return rc;
>  		    }
> @@ -354,7 +351,7 @@ gaih_inet (const char *name, const struct gaih_service *service,
>  		  pst = &(newp->next);
>  		}
>  	      if (st == (struct gaih_servtuple *) &nullserv)
> -		return GAIH_OKIFUNSPEC | -EAI_SERVICE;
> +		return -EAI_SERVICE;
>  	    }
>  	}
>        else
> @@ -546,7 +543,7 @@ gaih_inet (const char *name, const struct gaih_service *service,
>  							10);
>  		      if (*end != '\0')
>  			{
> -			  result = GAIH_OKIFUNSPEC | -EAI_NONAME;
> +			  result = -EAI_NONAME;
>  			  goto free_and_return;
>  			}
>  		    }
> @@ -667,7 +664,7 @@ gaih_inet (const char *name, const struct gaih_service *service,
>  		  else
>  		    /* We made requests but they turned out no data.
>  		       The name is known, though.  */
> -		    result = GAIH_OKIFUNSPEC | -EAI_NODATA;
> +		    result = -EAI_NODATA;
>  
>  		  goto free_and_return;
>  		}
> @@ -773,7 +770,7 @@ gaih_inet (const char *name, const struct gaih_service *service,
>  
>  		  if (at->family == AF_UNSPEC)
>  		    {
> -		      result = GAIH_OKIFUNSPEC | -EAI_NONAME;
> +		      result = -EAI_NONAME;
>  		      goto free_and_return;
>  		    }
>  
> @@ -1064,7 +1061,7 @@ gaih_inet (const char *name, const struct gaih_service *service,
>  
>  	  if (h_errno == NETDB_INTERNAL)
>  	    {
> -	      result = GAIH_OKIFUNSPEC | -EAI_SYSTEM;
> +	      result = -EAI_SYSTEM;
>  	      goto free_and_return;
>  	    }
>  
> @@ -1076,7 +1073,7 @@ gaih_inet (const char *name, const struct gaih_service *service,
>  	      else
>  		/* We made requests but they turned out no data.  The name
>  		   is known, though.  */
> -		result = GAIH_OKIFUNSPEC | -EAI_NODATA;
> +		result = -EAI_NODATA;
>  
>  	      goto free_and_return;
>  	    }
> @@ -1085,7 +1082,7 @@ gaih_inet (const char *name, const struct gaih_service *service,
>      process_list:
>        if (at->family == AF_UNSPEC)
>  	{
> -	  result = GAIH_OKIFUNSPEC | -EAI_NONAME;
> +	  result = -EAI_NONAME;
>  	  goto free_and_return;
>  	}
>      }
> @@ -2412,7 +2409,7 @@ getaddrinfo (const char *name, const char *service,
>  	  freeaddrinfo (p);
>  	  __free_in6ai (in6ai);
>  
> -	  return -(last_i & GAIH_EAI);
> +	  return -last_i;
>  	}
>        while (*end)
>  	{
> @@ -2645,7 +2642,7 @@ getaddrinfo (const char *name, const char *service,
>        return 0;
>      }
>  
> -  return last_i ? -(last_i & GAIH_EAI) : EAI_NONAME;
> +  return last_i ? -last_i : EAI_NONAME;
>  }
>  libc_hidden_def (getaddrinfo)
>  


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]