Net-LibNFS

 view release on metacpan or  search on metacpan

LibNFS.xs  view on Meta::CPAN

    CODE:
        nlnfs_s* perl_nfs = exs_structref_ptr(self_sv);

        const char* path = exs_SvPVbyte_nolen(path_sv);
        int mode = SvIV(mode_sv);   // TODO

        const char* funcname = ix ? "lchmod" : "chmod";

        perl_cb_s* cb_sp = _create_callback_struct(aTHX_ funcname, cb, _parse_fallible_empty_return, NULL);

        int err;

        if (ix) {
            err = nfs_lchmod_async(perl_nfs->nfs, path, mode, _do_perl_callback, cb_sp);
        }
        else {
            err = nfs_chmod_async(perl_nfs->nfs, path, mode, _do_perl_callback, cb_sp);
        }

        if (err) {
            _croak_nfs_errno(aTHX_ perl_nfs->nfs, funcname, err, NULL);
        }

SV*
truncate (SV* self_sv, SV* path_sv, SV* length_sv)
    CODE:
        nlnfs_s* perl_nfs = exs_structref_ptr(self_sv);

        const char* path = exs_SvPVbyte_nolen(path_sv);
        uint64_t len = exs_SvUV(length_sv);   // TODO

        int err = nfs_truncate(perl_nfs->nfs, path, len);

        if (err) {
            _croak_nfs_errno(aTHX_ perl_nfs->nfs, "truncate", err, NULL);
        }

        RETVAL = SvREFCNT_inc(self_sv);
    OUTPUT:
        RETVAL

void
_async_truncate (SV* self_sv, SV* path_sv, SV* length_sv, SV* cb)
    CODE:
        nlnfs_s* perl_nfs = exs_structref_ptr(self_sv);

        const char* path = exs_SvPVbyte_nolen(path_sv);
        uint64_t len = exs_SvUV(length_sv);   // TODO

        const char* funcname = "truncate";

        perl_cb_s* cb_sp = _create_callback_struct(aTHX_ funcname, cb, _parse_fallible_empty_return, NULL);

        int err = nfs_truncate_async(perl_nfs->nfs, path, len, _do_perl_callback, cb_sp);

        if (err) {
            _croak_nfs_errno(aTHX_ perl_nfs->nfs, funcname, err, NULL);
        }

SV*
chown (SV* self_sv, SV* path_sv, SV* uid_sv, SV* gid_sv)
    ALIAS:
        lchown = 1
    CODE:
        nlnfs_s* perl_nfs = exs_structref_ptr(self_sv);

        const char* path = exs_SvPVbyte_nolen(path_sv);

        int uid = SvIV(uid_sv);   // TODO
        int gid = SvIV(gid_sv);   // TODO

        int err;

        if (ix) {
            err = nfs_lchown(perl_nfs->nfs, path, uid, gid);
        }
        else {
            err = nfs_chown(perl_nfs->nfs, path, uid, gid);
        }

        if (err) {
            _croak_nfs_errno(aTHX_ perl_nfs->nfs, ix ? "lchown" : "chown", err, NULL);
        }

        RETVAL = SvREFCNT_inc(self_sv);
    OUTPUT:
        RETVAL

void
_async_chown (SV* self_sv, SV* path_sv, SV* uid_sv, SV* gid_sv, SV* cb)
    ALIAS:
        _async_lchown = 1
    CODE:
        nlnfs_s* perl_nfs = exs_structref_ptr(self_sv);

        const char* path = exs_SvPVbyte_nolen(path_sv);

        int uid = SvIV(uid_sv);   // TODO
        int gid = SvIV(gid_sv);   // TODO

        const char* funcname = ix ? "lchown" : "chown";

        perl_cb_s* cb_sp = _create_callback_struct(aTHX_ funcname, cb, _parse_fallible_empty_return, NULL);

        int err;

        if (ix) {
            err = nfs_lchown_async(perl_nfs->nfs, path, uid, gid, _do_perl_callback, cb_sp);
        }
        else {
            err = nfs_chown_async(perl_nfs->nfs, path, uid, gid, _do_perl_callback, cb_sp);
        }

        if (err) {
            _croak_nfs_errno(aTHX_ perl_nfs->nfs, funcname, err, NULL);
        }

SV*
symlink (SV* self_sv, SV* old_sv, SV* new_sv)
    ALIAS:
        rename = 1
        link = 2
    CODE:
        nlnfs_s* perl_nfs = exs_structref_ptr(self_sv);

        const char* oldname = exs_SvPVbyte_nolen(old_sv);
        const char* newname = exs_SvPVbyte_nolen(new_sv);

        int err;

        _nfs_void_2pathfunc func = VOID_2PATHFUNC_BY_IX[ix];

        err = func(perl_nfs->nfs, oldname, newname);

        if (err) {
            const char *funcname = VOID_2PATHFUNC_NAME_BY_IX[ix];

            _croak_nfs_errno(aTHX_ perl_nfs->nfs, funcname, err, NULL);
        }

        RETVAL = SvREFCNT_inc(self_sv);
    OUTPUT:
        RETVAL

void
_async_symlink (SV* self_sv, SV* old_sv, SV* new_sv, SV* cb)
    ALIAS:
        _async_rename = 1
        _async_link = 2
    CODE:
        nlnfs_s* perl_nfs = exs_structref_ptr(self_sv);

        const char* oldname = exs_SvPVbyte_nolen(old_sv);
        const char* newname = exs_SvPVbyte_nolen(new_sv);

        _nfs_async_void_2pathfunc func = ASYNC_VOID_2PATHFUNC_BY_IX[ix];

        const char *funcname = VOID_2PATHFUNC_NAME_BY_IX[ix];

        perl_cb_s* cb_sp = _create_callback_struct(aTHX_ funcname, cb, _parse_fallible_empty_return, NULL);

        int err = func(perl_nfs->nfs, oldname, newname, _do_perl_callback, cb_sp);

        if (err) {
            _croak_nfs_errno(aTHX_ perl_nfs->nfs, funcname, err, NULL);
        }

# ----------------------------------------------------------------------
# Async-oriented stuff

int

LibNFS.xs  view on Meta::CPAN

void
_async_truncate (SV* self_sv, SV* length_sv, SV* cb)
    CODE:
        uint64_t len = exs_SvUV(length_sv);

        nlnfs_fh_s* nfs_fh = exs_structref_ptr(self_sv);

        SV* nfs_sv = nfs_fh->perl_nfs;

        nlnfs_s* perl_nfs = exs_structref_ptr(nfs_sv);

        perl_cb_s* cb_sp = _create_callback_struct(aTHX_ "truncate", cb, _parse_fallible_empty_return, NULL);

        int err = nfs_ftruncate_async(perl_nfs->nfs, nfs_fh->nfsfh, len, _do_perl_callback, cb_sp);

        if (err) {
            _croak_nfs_errno(aTHX_ perl_nfs->nfs, "truncate", err, NULL);
        }

SV*
chmod (SV* self_sv, SV* mode_sv)
    CODE:
        int mode = SvIV(mode_sv);   // TODO

        nlnfs_fh_s* nfs_fh = exs_structref_ptr(self_sv);

        SV* nfs_sv = nfs_fh->perl_nfs;

        nlnfs_s* perl_nfs = exs_structref_ptr(nfs_sv);

        int err = nfs_fchmod(perl_nfs->nfs, nfs_fh->nfsfh, mode);

        if (err) {
            _croak_nfs_errno(aTHX_ perl_nfs->nfs, "fchmod", err, NULL);
        }

        RETVAL = SvREFCNT_inc(self_sv);
    OUTPUT:
        RETVAL

void
_async_chmod (SV* self_sv, SV* mode_sv, SV* cb)
    CODE:
        int mode = SvIV(mode_sv);   // TODO

        nlnfs_fh_s* nfs_fh = exs_structref_ptr(self_sv);

        SV* nfs_sv = nfs_fh->perl_nfs;

        nlnfs_s* perl_nfs = exs_structref_ptr(nfs_sv);

        perl_cb_s* cb_sp = _create_callback_struct(aTHX_ "chmod", cb, _parse_fallible_empty_return, NULL);

        int err = nfs_fchmod_async(perl_nfs->nfs, nfs_fh->nfsfh, mode, _do_perl_callback, cb_sp);

        if (err) {
            _croak_nfs_errno(aTHX_ perl_nfs->nfs, "chmod", err, NULL);
        }

SV*
chown (SV* self_sv, SV* uid_sv, SV* gid_sv)
    CODE:
        int uid = SvIV(uid_sv);   // TODO
        int gid = SvIV(gid_sv);   // TODO

        nlnfs_fh_s* nfs_fh = exs_structref_ptr(self_sv);

        SV* nfs_sv = nfs_fh->perl_nfs;

        nlnfs_s* perl_nfs = exs_structref_ptr(nfs_sv);

        int err = nfs_fchown(perl_nfs->nfs, nfs_fh->nfsfh, uid, gid);

        if (err) {
            _croak_nfs_errno(aTHX_ perl_nfs->nfs, "fchown", err, NULL);
        }

        RETVAL = SvREFCNT_inc(self_sv);
    OUTPUT:
        RETVAL

void
_async_chown (SV* self_sv, SV* uid_sv, SV* gid_sv, SV* cb)
    CODE:
        int uid = SvIV(uid_sv);   // TODO
        int gid = SvIV(gid_sv);   // TODO

        nlnfs_fh_s* nfs_fh = exs_structref_ptr(self_sv);

        SV* nfs_sv = nfs_fh->perl_nfs;

        nlnfs_s* perl_nfs = exs_structref_ptr(nfs_sv);

        perl_cb_s* cb_sp = _create_callback_struct(aTHX_ "chown", cb, _parse_fallible_empty_return, NULL);

        int err = nfs_fchown_async(perl_nfs->nfs, nfs_fh->nfsfh, uid, gid, _do_perl_callback, cb_sp);

        if (err) {
            _croak_nfs_errno(aTHX_ perl_nfs->nfs, "chown", err, NULL);
        }

# ----------------------------------------------------------------------

MODULE = Net::LibNFS        PACKAGE = Net::LibNFS::Stat

PROTOTYPES: DISABLE

UV
dev (SV* self_sv)
    ALIAS:
        ino = 1
        mode = 2
        nlink = 3
        uid = 4
        gid = 5
        rdev = 6
        size = 7
        blksize = 8
        blocks = 9
        atime = 10
        mtime = 11
        ctime = 12
        atime_nsec = 13
        mtime_nsec = 14
        ctime_nsec = 15
        nfs_used = 16
    CODE:
        struct nfs_stat_64* stat_p = exs_structref_ptr(self_sv);
        RETVAL = *( (uint64_t*) ((void*)(stat_p) + STAT64_OFFSET[ix]) );
    OUTPUT:
        RETVAL

# ----------------------------------------------------------------------

MODULE = Net::LibNFS        PACKAGE = Net::LibNFS::StatVFS

PROTOTYPES: DISABLESTATVFS64_OFFSET

UV
bsize (SV* self_sv)
    ALIAS:
        frsize = 1
        blocks = 2
        bfree = 3
        bavail = 4
        files = 5
        ffree = 6
        favail = 7
        fsid = 8
        flag = 9
        namemax = 10
    CODE:
        struct nfs_statvfs_64* p = exs_structref_ptr(self_sv);
        RETVAL = *( (uint64_t*) ((void*)(p) + STATVFS64_OFFSET[ix]) );
    OUTPUT:
        RETVAL

# ----------------------------------------------------------------------



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