Be-Attribute

 view release on metacpan or  search on metacpan

Attribute.xs  view on Meta::CPAN

PROTOTYPES: ENABLE

SV *
GetBNode(filename)
        char * filename;
ALIAS:
	Be::Attribute::GetBNode = 0
	Be::Attribute::GetNode = 1
PREINIT:
        BNode *node = NULL;
CODE:

	/* stuff BNode object ptr in IV */

        node = new BNode((const char *) filename);
        if (node && node->InitCheck() == B_OK) {
          node->SetTo((const char *) filename);
          RETVAL = newSViv((IV) node);
        } else {
	  XSRETURN_UNDEF;
	}
OUTPUT:
        RETVAL


SV *
CloseNode(node)
        long node;
CODE:
	/* destroy BNode object */

        ((BNode *) node)->~BNode();
        RETVAL = newSViv(1);
OUTPUT:
        RETVAL



SV *
SetBNode(node, filename)
	long node;
	char *filename;
PREINIT:
	status_t err;
CODE:
	/* reset BNode filename */

	err = ((BNode *) node)->SetTo((const char *) filename);
	RETVAL = newSViv(err == B_OK);
OUTPUT:
	RETVAL



void
ListAttrs(node)
        long node;
PREINIT:
        char buf[B_ATTR_NAME_LENGTH];
        status_t err;
PPCODE:
	/* list what attrs BNode finds */

        while ((err = ((BNode *) node)->GetNextAttrName(buf)) == B_OK) {
                XPUSHs(sv_2mortal(newSVpv(buf, strlen(buf))));
        }



SV *
ReadAttr(node, attr)
        long node;
        char *attr;
PREINIT:
        char buf[B_ATTR_NAME_LENGTH];
        char *name;
        STRLEN len;
        ssize_t err;
CODE:
	/* get attr value */

        err = ((BNode *) node)->ReadAttr((const char *) attr, (type_code) 0,
          (off_t) 0, (void *) buf, B_ATTR_NAME_LENGTH);
        if (err != 0) {
          RETVAL = newSVpv(buf, strlen(buf));
        } else {
          XSRETURN_UNDEF;
        }
OUTPUT:
        RETVAL

	   

SV *
WriteAttr(node, attr, what, type, howbig)
        long node;
        char *attr;
        char *what;
        int type;
        int howbig;
PREINIT:
        char buf[B_ATTR_NAME_LENGTH];
        char *name, *whatstr;
        ssize_t err;
        size_t buflen;
CODE:

	/* I haven't tested this at all. That's why I'm not documenting
	   it. :) */

        err = ((BNode *)node)->WriteAttr((const char *) attr,
               (type_code) type, (off_t) 0, (void *) what, howbig);
        if (err != 0) {
          RETVAL = newSViv(1);
        } else {
/*        whatstr = strerror(errno); */
          RETVAL = newSVpv(whatstr, strlen(whatstr));
	}
OUTPUT:
	RETVAL



( run in 1.762 second using v1.01-cache-2.11-cpan-71847e10f99 )