int getpathattr(struct puffs_usermount *pu, const char *path, struct vattr *vap) { PSSHFSAUTOVAR(pu); psbuf_req_str(pb, SSH_FXP_LSTAT, reqid, path); GETRESPONSE(pb, pctx->sshfd); rv = psbuf_expect_attrs(pb, vap); out: PSSHFSRETURN(rv); }
int psshfs_fs_statvfs(struct puffs_usermount *pu, struct statvfs *sbp) { PSSHFSAUTOVAR(pu); uint64_t tmpval; uint8_t type; memset(sbp, 0, sizeof(*sbp)); sbp->f_bsize = sbp->f_frsize = sbp->f_iosize = 512; if ((pctx->extensions & SFTP_EXT_STATVFS) == 0) goto out; psbuf_req_str(pb, SSH_FXP_EXTENDED, reqid, "*****@*****.**"); psbuf_put_str(pb, pctx->mountpath); GETRESPONSE(pb, pctx->sshfd); type = psbuf_get_type(pb); if (type != SSH_FXP_EXTENDED_REPLY) { /* use the default */ goto out; } psbuf_get_8(pb, &tmpval); sbp->f_bsize = tmpval; psbuf_get_8(pb, &tmpval); sbp->f_frsize = tmpval; psbuf_get_8(pb, &sbp->f_blocks); psbuf_get_8(pb, &sbp->f_bfree); psbuf_get_8(pb, &sbp->f_bavail); psbuf_get_8(pb, &sbp->f_files); psbuf_get_8(pb, &sbp->f_ffree); psbuf_get_8(pb, &sbp->f_favail); psbuf_get_8(pb, &tmpval); /* fsid */ psbuf_get_8(pb, &tmpval); /* flag */ psbuf_get_8(pb, &tmpval); sbp->f_namemax = tmpval; sbp->f_bresvd = sbp->f_bfree - sbp->f_bavail; sbp->f_fresvd = sbp->f_ffree - sbp->f_favail; out: PSSHFSRETURN(rv); }