Solaris-NDDI

 view release on metacpan or  search on metacpan

NDDI.xs  view on Meta::CPAN

   STRLEN      klen;
   STRLEN      vlen;
   MAGIC      *mg;
   ndd_dev_t  *np;
   var_t       var;
CODE:
   hash = (HV*)SvRV(self);
   k    = SvPV(key, klen);

   mg = mg_find(SvRV(self),'~');
   if(!mg) { croak("lost ~ magic"); }
   np = (ndd_dev_t*)SvIVX(mg->mg_obj);
   v = SvPV(value, vlen);

   var.var_name          = k;
   var.var_type          = VAR_STRING_T;
   var.var_un.var_string = v;
   if (ndd_name_io(np, ND_SET, &var) < 0) 
      fatal("ND_SET failed");

   SvREFCNT_inc(value);
   RETVAL = *(hv_store(hash, k, klen, value, 0));
   SvREFCNT_inc(RETVAL);
OUTPUT:
   RETVAL

void
DESTROY(self)
   SV        *self;
PREINIT:
   MAGIC     *mg;
   ndd_dev_t *np;
CODE:
   mg = mg_find(SvRV(self),'~');
   if(!mg) { croak("lost ~ magic"); }
   np = (ndd_dev_t*)SvIVX(mg->mg_obj);
   close(np->ndd_sd);
   free(np->ndd_dev_name);
   Safefree(np);

bool
EXISTS(self, key)
   SV   *self;
   SV   *key;
PREINIT:
   HV   *hash;
   char *k;
CODE:
   hash = (HV*)SvRV(self);
   k    = SvPV(key, PL_na);
   RETVAL = hv_exists_ent(hash, key, 0);
OUTPUT:
   RETVAL

SV*
FIRSTKEY(self)
   SV *self;
PREINIT:
   HV *hash;
   HE *he;
PPCODE:
   hash = (HV*)SvRV(self);
   hv_iterinit(hash);
   if (he = hv_iternext(hash)) {
      EXTEND(sp, 1);
      PUSHs(hv_iterkeysv(he));
   }

SV*
NEXTKEY(self, lastkey)
   SV *self;
   SV *lastkey;
PREINIT:
   HV *hash;
   HE *he;
PPCODE:
   hash = (HV*)SvRV(self);
   if (he = hv_iternext(hash)) {
      EXTEND(sp, 1);
      PUSHs(hv_iterkeysv(he));
   }

SV*
DELETE(self, key)
   SV *self;
   SV *key;
PREINIT:
   HV *hash;
   HE *he;
CODE:
   hash = (HV*)SvRV(self);
   RETVAL = hv_delete_ent(hash, key, 0, 0);
   if (RETVAL) { 
      SvREFCNT_inc(RETVAL); 
   }
   else { 
      RETVAL = &PL_sv_undef; 
   }
OUTPUT:
   RETVAL

void
CLEAR(self)
   SV *self;
PREINIT:
   HV *hash;
CODE:
   hash = (HV*)SvRV(self);
   hv_clear(hash);



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