NIS

 view release on metacpan or  search on metacpan

NIS.xs  view on Meta::CPAN

static int
not_here(s)
char *s;
{
    croak("%s not implemented on this architecture", s);
    return -1;
}

int
ypallcallback(instatus, inkey, inkeylen, inval, invallen, indata)
int     instatus;
char    *inkey;
int     inkeylen;
char    *inval;
int     invallen;
char    *indata;
{
  if (instatus == YP_TRUE)
  {
    hv_store((HV*)SvRV(((struct callbackdata *)indata)->results), inkey,
      inkeylen, newSVpv(inval, invallen), (U32)0);
  }
  
  ((struct callbackdata *)indata)->status = ypprot_err(instatus);

  if (instatus < 0) return instatus;
  return 0;
}

/*
  $Net::NIS::ERR_ACCESS
  $Net::NIS::ERR_BADARGS
  $Net::NIS::ERR_BADDB
  $Net::NIS::ERR_BUSY
  $Net::NIS::ERR_DOMAIN
  $Net::NIS::ERR_KEY
  $Net::NIS::ERR_MAP
  $Net::NIS::ERR_NODOM
  $Net::NIS::ERR_PMAP
  $Net::NIS::ERR_NOMORE
  $Net::NIS::ERR_RESRC
  $Net::NIS::ERR_RPC
  $Net::NIS::ERR_YPBIND
  $Net::NIS::ERR_YPERR
  $Net::NIS::ERR_YPSERV
  $Net::NIS::ERR_VERS
*/

MODULE = Net::NIS	PACKAGE = Net::NIS

int
yp_bind(domain)
  char *	domain

void
yp_unbind(domain)
  char *	domain

void
yp_get_default_domain()
  PPCODE:
  {
    char	*domain;
    int		status;

    status = yp_get_default_domain(&domain);
    XPUSHs(sv_2mortal(newSViv(status)));
    if (status == 0) XPUSHs(sv_2mortal(newSVpv(domain, strlen(domain))));
  }

void
yp_match(domain, map, key)
  char *	domain
  char *	map
  SV *		key
  PPCODE:
  {
    char	*inkey;
    STRLEN	inkeylen;
    char	*outval;
    int		outvallen;
    int		status;
    
    if (SvPOK(key))
    {
      inkey = SvPV(key, inkeylen);

      status = yp_match(domain, map, inkey, (int)inkeylen, &outval, &outvallen);
      XPUSHs(sv_2mortal(newSViv(status)));
      if (status == 0) XPUSHs(sv_2mortal(newSVpv(outval, outvallen)));
    }
    else
    {
      XPUSHs(sv_2mortal(newSViv(YPERR_BADARGS)));
    }
  }

void
yp_first(domain, map)
  char *	domain
  char *	map
  PPCODE:
  {
    char	*outkey;
    int		outkeylen;
    char	*outval;
    int		outvallen;
    int		status;
    
    status = yp_first(domain, map, &outkey, &outkeylen, &outval, &outvallen);
    XPUSHs(sv_2mortal(newSViv(status)));
    if (status == 0)
    {
      XPUSHs(sv_2mortal(newSVpv(outkey, outkeylen)));
      XPUSHs(sv_2mortal(newSVpv(outval, outvallen)));
    }
  }

void
yp_next(domain, map, key)
  char *	domain
  char *	map
  SV *		key
  PPCODE:
  {
    char	*inkey;
    STRLEN	inkeylen;
    char	*outkey;
    int 	outkeylen;
    char	*outval;
    int		outvallen;
    int		status;
    
    if (SvPOK(key))
    {
      inkey = SvPV(key, inkeylen);

      status = yp_next(domain, map, inkey, (int)inkeylen, &outkey, &outkeylen,
        &outval, &outvallen);
      XPUSHs(sv_2mortal(newSViv(status)));
      if (status == 0)
      {
        XPUSHs(sv_2mortal(newSVpv(outkey, outkeylen)));
        XPUSHs(sv_2mortal(newSVpv(outval, outvallen)));
      }
    }
    else
    {
      XPUSHs(sv_2mortal(newSViv(YPERR_BADARGS)));
    }
  }

void
yp_all(domain, map)
  char *	domain
  char *	map
  PPCODE:
  {
    struct ypall_callback	callback;
    struct callbackdata		data;
    int				status;

    data.results = sv_2mortal(newRV((SV *) newHV()));
    data.status = 0;
    callback.foreach = ypallcallback;
    callback.data = (char *)&data;
    XPUSHs(sv_newmortal());
    XPUSHs(sv_newmortal());
    status = yp_all(domain, map, &callback);
    sv_setnv(ST(0), data.status);
    if (status == 0 && data.status == YPERR_NOMORE)
      sv_setsv(ST(1), (SV *)data.results);
  }

void
yp_order(domain, map)
  char *	domain
  char *	map
  PPCODE:
  {
    unsigned long	order;
    int			status;

    status = yp_order(domain, map, &order);
    XPUSHs(sv_2mortal(newSViv(status)));
    if (status == 0) XPUSHs(sv_2mortal(newSViv(order)));
  }

void
yp_master(domain, map)
  char *	domain
  char *	map
  PPCODE:
  {
    char	*name;
    int		status;

    status = yp_master(domain, map, &name);
    XPUSHs(sv_2mortal(newSViv(status)));
    if (status == 0) XPUSHs(sv_2mortal(newSVpv(name, strlen(name))));
  }

char *
yperr_string(code)
  int		code

int
ypprot_err(code)
  int		code



( run in 0.613 second using v1.01-cache-2.11-cpan-5511b514fd6 )