Net-LibNFS
view release on metacpan or search on metacpan
libnfs/lib/nfs_v4.c view on Meta::CPAN
len -= 8;
st->nfs_ctime_nsec = ntohl(*(uint32_t *)(void *)buf);
buf += 4;
len -= 4;
/* MTime */
CHECK_GETATTR_BUF_SPACE(len, 12);
st->nfs_mtime = nfs_pntoh64((uint32_t *)(void *)buf);
buf += 8;
len -= 8;
st->nfs_mtime_nsec = ntohl(*(uint32_t *)(void *)buf);
buf += 4;
len -= 4;
st->nfs_blksize = NFS_BLKSIZE;
st->nfs_blocks = (st->nfs_used + NFS_BLKSIZE -1) / NFS_BLKSIZE;
return 0;
}
static int
nfs4_num_path_components(struct nfs_context *nfs, const char *path)
{
int i;
for (i = 0; (path = strchr(path, '/')); path++, i++)
;
return i;
}
static int
nfs4_op_create(struct nfs_context *nfs, nfs_argop4 *op, const char *name,
nfs_ftype4 type, struct nfs4_blob *attrmask,
struct nfs4_blob *attr_vals, const char *linkdata, int dev)
{
CREATE4args *cargs;
op[0].argop = OP_CREATE;
cargs = &op[0].nfs_argop4_u.opcreate;
memset(cargs, 0, sizeof(*cargs));
cargs->objtype.type = type;
cargs->objname.utf8string_len = strlen(name);
cargs->objname.utf8string_val = discard_const(name);
if (attrmask) {
cargs->createattrs.attrmask.bitmap4_len = attrmask->len;
cargs->createattrs.attrmask.bitmap4_val = attrmask->val;
}
if (attr_vals) {
cargs->createattrs.attr_vals.attrlist4_len = attr_vals->len;
cargs->createattrs.attr_vals.attrlist4_val = attr_vals->val;
}
if (linkdata) {
cargs->objtype.createtype4_u.linkdata.utf8string_len =
strlen(linkdata);
cargs->objtype.createtype4_u.linkdata.utf8string_val =
discard_const(linkdata);
}
switch (type) {
case NF4CHR:
cargs->objtype.type = NF4CHR;
cargs->objtype.createtype4_u.devdata.specdata1 = major(dev);
cargs->objtype.createtype4_u.devdata.specdata2 = minor(dev);
break;
case NF4BLK:
cargs->objtype.type = NF4BLK;
cargs->objtype.createtype4_u.devdata.specdata1 = major(dev);
cargs->objtype.createtype4_u.devdata.specdata2 = minor(dev);
break;
default:
;
}
return 1;
}
static int
nfs4_op_commit(struct nfs_context *nfs, nfs_argop4 *op)
{
COMMIT4args *coargs;
op[0].argop = OP_COMMIT;
coargs = &op[0].nfs_argop4_u.opcommit;
coargs->offset = 0;
coargs->count = 0;
return 1;
}
static int
nfs4_op_close(struct nfs_context *nfs, nfs_argop4 *op, struct nfsfh *fh)
{
CLOSE4args *clargs;
int i = 0;
if (fh->is_dirty) {
i += nfs4_op_commit(nfs, &op[i]);
}
op[i].argop = OP_CLOSE;
clargs = &op[i++].nfs_argop4_u.opclose;
clargs->seqid = fh->open_seqid;
clargs->open_stateid.seqid = fh->stateid.seqid;
memcpy(clargs->open_stateid.other, fh->stateid.other, 12);
return i;
}
static int
nfs4_op_access(struct nfs_context *nfs, nfs_argop4 *op, uint32_t access_mask)
{
ACCESS4args *aargs;
op[0].argop = OP_ACCESS;
aargs = &op[0].nfs_argop4_u.opaccess;
memset(aargs, 0, sizeof(*aargs));
aargs->access = access_mask;
return 1;
}
static int
nfs4_op_setclientid(struct nfs_context *nfs, nfs_argop4 *op, verifier4 verifier,
const char *client_name)
{
SETCLIENTID4args *scidargs;
op[0].argop = OP_SETCLIENTID;
scidargs = &op[0].nfs_argop4_u.opsetclientid;
( run in 1.005 second using v1.01-cache-2.11-cpan-39bf76dae61 )