Back to index

glibc  2.9
Typedefs | Functions
ether_hton.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 char *, struct etherent *, char *, int, int *)

Functions

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

Typedef Documentation

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

Definition at line 28 of file ether_hton.c.


Function Documentation

int __nss_ethers_lookup ( service_user **  nip,
const char *  name,
void **  fctp 
)

Here is the caller graph for this function:

int ether_hostton ( const char *  hostname,
struct ether_addr addr 
)

Definition at line 37 of file ether_hton.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, "gethostton_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) (hostname, &etherent, buffer, sizeof buffer, &errno);

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

  if (status == NSS_STATUS_SUCCESS)
    memcpy (addr, etherent.e_addr.ether_addr_octet,
           sizeof (struct ether_addr));

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

Here is the call graph for this function:

Here is the caller graph for this function: