Sun-Solaris-Project
view release on metacpan or search on metacpan
static int
pwalk_cb(const projid_t project, void *walk_data)
{
int *nitemsp;
dSP;
nitemsp = (int *) walk_data;
EXTEND(SP, 1);
PUSHs(sv_2mortal(newSViv(project)));
(*nitemsp)++;
PUTBACK;
return (0);
}
/*
* The XS code exported to perl is below here. Note that the XS preprocessor
* has its own commenting syntax, so all comments from this point on are in
* that form. Note also that the PUTBACK; lines are necessary to synchronise
* the local and global views of the perl stack before calling pushret_project,
* as the code generated by the perl XS compiler twiddles with the stack on
* entry to an XSUB.
*/
MODULE = Sun::Solaris::Project PACKAGE = Sun::Solaris::Project
PROTOTYPES: ENABLE
#
# Define any constants that need to be exported. By doing it this way we can
# avoid the overhead of using the DynaLoader package, and in addition constants
# defined using this mechanism are eligible for inlining by the perl
# interpreter at compile time.
#
BOOT:
{
HV *stash;
stash = gv_stashpv("Sun::Solaris::Project", TRUE);
newCONSTSUB(stash, "MAXPROJID", newSViv(MAXPROJID));
newCONSTSUB(stash, "PROJNAME_MAX", newSViv(PROJNAME_MAX));
newCONSTSUB(stash, "PROJF_PATH",
newSVpv(PROJF_PATH, sizeof (PROJF_PATH) - 1));
newCONSTSUB(stash, "PROJECT_BUFSZ", newSViv(PROJECT_BUFSZ));
newCONSTSUB(stash, "SETPROJ_ERR_TASK", newSViv(SETPROJ_ERR_TASK));
newCONSTSUB(stash, "SETPROJ_ERR_POOL", newSViv(SETPROJ_ERR_POOL));
}
projid_t
getprojid()
int
setproject(name, user_name, flags)
const char *name;
const char *user_name
uint_t flags
void
activeprojects()
PREINIT:
int nitems;
PPCODE:
PUTBACK;
nitems = 0;
project_walk(&pwalk_cb, (void*)&nitems);
XSRETURN(nitems);
void
getprojent()
PREINIT:
struct project proj, *projp;
char buf[PROJECT_BUFSZ];
PPCODE:
PUTBACK;
if (projp = getprojent(&proj, buf, sizeof (buf))) {
XSRETURN(pushret_project(projp));
} else {
XSRETURN_EMPTY;
}
void
setprojent()
void
endprojent()
void
getprojbyname(name)
char *name
PREINIT:
struct project proj, *projp;
char buf[PROJECT_BUFSZ];
PPCODE:
PUTBACK;
if (projp = getprojbyname(name, &proj, buf, sizeof (buf))) {
XSRETURN(pushret_project(projp));
} else {
XSRETURN_EMPTY;
}
void
getprojbyid(id)
projid_t id
PREINIT:
struct project proj, *projp;
char buf[PROJECT_BUFSZ];
PPCODE:
PUTBACK;
if (projp = getprojbyid(id, &proj, buf, sizeof (buf))) {
XSRETURN(pushret_project(projp));
} else {
XSRETURN_EMPTY;
}
void
getdefaultproj(user)
char *user
PREINIT:
struct project proj, *projp;
char buf[PROJECT_BUFSZ];
PPCODE:
PUTBACK;
if (projp = getdefaultproj(user, &proj, buf, sizeof (buf))) {
XSRETURN(pushret_project(projp));
} else {
XSRETURN_EMPTY;
}
void
fgetprojent(fh)
FILE *fh
PREINIT:
struct project proj, *projp;
char buf[PROJECT_BUFSZ];
PPCODE:
PUTBACK;
if (projp = fgetprojent(fh, &proj, buf, sizeof (buf))) {
XSRETURN(pushret_project(projp));
} else {
XSRETURN_EMPTY;
}
bool
inproj(user, proj)
char *user
char *proj
PREINIT:
char buf[PROJECT_BUFSZ];
CODE:
RETVAL = inproj(user, proj, buf, sizeof (buf));
int
getprojidbyname(proj)
char *proj
PREINIT:
int id;
PPCODE:
if ((id = getprojidbyname(proj)) == -1) {
XSRETURN_UNDEF;
} else {
XSRETURN_IV(id);
}
( run in 0.957 second using v1.01-cache-2.11-cpan-5511b514fd6 )