Back to index

glibc  2.9
Typedefs | Functions
ether_ntoh.c File Reference
#include <errno.h>
#include <netinet/ether.h>
#include <netinet/if_ether.h>
#include <string.h>
#include <nss/nsswitch.h>

Go to the source code of this file.

Typedefs

typedef int(* lookup_function )(const struct ether_addr *, struct etherent *, char *, size_t, int *)

Functions

int __nss_ethers_lookup (service_user **nip, const char *name, void **fctp) internal_function
int ether_ntohost (char *hostname, const struct ether_addr *addr)

Typedef Documentation

typedef int(* lookup_function)(const struct ether_addr *, struct etherent *, char *, size_t, int *)

Definition at line 29 of file ether_ntoh.c.


Function Documentation

int __nss_ethers_lookup ( service_user **  nip,
const char *  name,
void **  fctp 
)
int ether_ntohost ( char *  hostname,
const struct ether_addr addr 
)

Definition at line 38 of file ether_ntoh.c.

{
  static service_user *startp;
  static lookup_function start_fct;
  service_user *nip;
  union
  {
    lookup_function f;
    void *ptr;
  } fct;
  int no_more;
  enum nss_status status = NSS_STATUS_UNAVAIL;
  struct etherent etherent;

  if (startp == NULL)
    {
      no_more = __nss_ethers_lookup (&nip, "getntohost_r", &fct.ptr);
      if (no_more)
       startp = (service_user *) -1;
      else
       {
         startp = nip;
         start_fct = fct.f;
       }
    }
  else
    {
      fct.f = start_fct;
      no_more = (nip = startp) == (service_user *) -1;
    }

  while (no_more == 0)
    {
      char buffer[1024];

      status = (*fct.f) (addr, &etherent, buffer, sizeof buffer, &errno);

      no_more = __nss_next2 (&nip, "getntohost_r", NULL, &fct.ptr, status, 0);
    }

  if (status == NSS_STATUS_SUCCESS)
    /* XXX This is a potential cause of trouble because the size of
       the HOSTNAME buffer is not known but the interface does not
       provide this information.  */
    strcpy (hostname, etherent.e_name);

  return status == NSS_STATUS_SUCCESS ? 0 : -1;
}

Here is the call graph for this function:

Here is the caller graph for this function: