Quota
view release on metacpan or search on metacpan
contrib/aix_jfs2_class/jfs2class.xs view on Meta::CPAN
/*
* Perl interface to quota classes on JFS2 (AIX 5.3)
*
* This code is untested by me and reportedly not functional yet.
* It's just provided as possible basis for further development.
*
* Copyright (C) 2007 Tom Zoerner.
*
* This program is free software: you can redistribute it and/or modify
* it either under the terms of the Perl Artistic License or the GNU
* General Public License as published by the Free Software Foundation.
* (Either version 2 of the GPL, or any later version.)
* For a copy of these licenses see <http://www.opensource.org/licenses/>.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* Perl Artistic License or GNU General Public License for more details.
*/
MODULE = Quota PACKAGE = Quota::JFS2CLASS
void
jfs2_getlimit(dev,class)
char * dev
int class
PPCODE:
#if defined(HAVE_JFS2)
if (strncmp(dev, "(JFS2)", 6) == 0) {
j2qlimit_t j2q;
int retval;
memset(&j2q, 0, sizeof(j2q));
retval = quotactl (dev + 6, Q_J2GETLIMIT, class, (caddr_t)&j2q);
if (retval == 0) {
EXTEND(sp, 8);
PUSHs(sv_2mortal(newSViv(j2q.ql_bsoft)));
PUSHs(sv_2mortal(newSViv(j2q.ql_bhard)));
PUSHs(sv_2mortal(newSViv(j2q.ql_btime)));
PUSHs(sv_2mortal(newSViv(j2q.ql_isoft)));
PUSHs(sv_2mortal(newSViv(j2q.ql_ihard)));
PUSHs(sv_2mortal(newSViv(j2q.ql_itime)));
}
} else
#endif /* HAVE_JFS2 */
{
errno = ENOENT;
}
int
jfs2_putlimit(dev,class,bs,bh,bt,fs,fh,ft)
char * dev
int class
int bs
int bh
int bt
int fs
int fh
int ft
CODE:
#if defined(HAVE_JFS2)
if (strncmp(dev, "(JFS2)", 6) == 0) {
j2qlimit_t j2q;
memset(&j2q, 0, sizeof(j2q));
j2q.ql_bsoft = bs;
j2q.ql_bhard = bh;
j2q.ql_btime = bt;
j2q.ql_isoft = fs;
j2q.ql_ihard = fh;
j2q.ql_itime = ft;
RETVAL = quotactl (dev + 6, Q_J2PUTLIMIT, class, (caddr_t)&j2q);
} else
#endif /* HAVE_JFS2 */
{
RETVAL = -1;
errno = ENOENT;
}
OUTPUT:
RETVAL
void
jfs2_newlimit(dev,bs,bh,bt,fs,fh,ft)
char * dev
int bs
int bh
int bt
int fs
int fh
int ft
PPCODE:
#if defined(HAVE_JFS2)
if (strncmp(dev, "(JFS2)", 6) == 0) {
j2qlimit_t j2q;
uid_t class;
int retval;
memset(&j2q, 0, sizeof(j2q));
j2q.ql_bsoft = bs;
j2q.ql_bhard = bh;
j2q.ql_btime = bt;
j2q.ql_isoft = fs;
j2q.ql_ihard = fh;
j2q.ql_itime = ft;
retval = quotactl (dev + 6, Q_J2NEWLIMIT, 0, (caddr_t)&j2q);
if (retval == 0) {
EXTEND(sp, 1);
class = *( (uid_t*) &j2q );
PUSHs(sv_2mortal(newSViv(class)));
}
} else
#endif /* HAVE_JFS2 */
{
errno = ENOENT;
}
int
jfs2_rmvlimit(dev,class)
char * dev
int class
CODE:
#if defined(HAVE_JFS2)
if (strncmp(dev, "(JFS2)", 6) == 0) {
RETVAL = quotactl (dev + 6, Q_J2RMVLIMIT, class, NULL);
} else
#endif /* HAVE_JFS2 */
{
RETVAL = -1;
errno = ENOENT;
}
OUTPUT:
RETVAL
int
jfs2_deflimit(dev,class)
char * dev
int class
CODE:
#if defined(HAVE_JFS2)
if (strncmp(dev, "(JFS2)", 6) == 0) {
RETVAL = quotactl (dev + 6, Q_J2DEFLIMIT, class, NULL);
} else
#endif /* HAVE_JFS2 */
{
RETVAL = -1;
errno = ENOENT;
}
OUTPUT:
RETVAL
int
jfs2_uselimit(dev,class,uid=getuid(),kind=0)
char * dev
int class
int uid
int kind
CODE:
#if defined(HAVE_JFS2)
if (strncmp(dev, "(JFS2)", 6) == 0) {
uid_t id_buf = uid;
RETVAL = quotactl (dev + 6, QCMD(Q_J2USELIMIT, ((kind != 0) ? GRPQUOTA : USRQUOTA)), class, (caddr_t)&id_buf);
} else
#endif /* HAVE_JFS2 */
{
RETVAL = -1;
errno = ENOENT;
}
OUTPUT:
RETVAL
void
jfs2_getnextq(dev,class)
char * dev
int class
PPCODE:
#if defined(HAVE_JFS2)
if (strncmp(dev, "(JFS2)", 6) == 0) {
uid_t id_buf = 0;
int retval;
//retval = quotactl (dev + 6, QCMD(Q_J2GETNEXTQ,USRQUOTA), class, (caddr_t) &id_buf);
retval = quotactl (dev + 6, Q_J2GETNEXTQ, class, (caddr_t) &id_buf);
printf("Q_J2GETNEXTQ(%s,%d)=%d ID=%d\n",dev+6,class,retval,id_buf);
if (retval == 0) {
EXTEND(sp, 1);
PUSHs(sv_2mortal(newSViv(id_buf)));
}
} else
#endif /* HAVE_JFS2 */
{
errno = ENOENT;
}
( run in 0.474 second using v1.01-cache-2.11-cpan-5511b514fd6 )