%{ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include %} function nfsderror:string(err:long) %{ static struct { int nfserr; int syserr; char *string; } nfs_errtbl[] = { { nfs_ok, 0, "nfserr_ok(ESUCCESS)" }, { nfserr_perm, EPERM, "nfserr_perm(EPERM)" }, { nfserr_noent, ENOENT , "nfserr_noent(ENOENT)"}, { nfserr_io, EIO , "nfserr_io(EIO)"}, { nfserr_nxio, ENXIO , "nfserr_nxio(ENXIO)"}, { nfserr_acces, EACCES , "nfserr_acces(EACCES)"}, { nfserr_exist, EEXIST , "nfserr_exist(EEXIST)"}, { nfserr_xdev, EXDEV , "nfserr_xdev(EXDEV)"}, { nfserr_mlink, EMLINK , "nfserr_mlink(EMLINK)"}, { nfserr_nodev, ENODEV , "nfserr_nodev(ENODEV)"}, { nfserr_notdir, ENOTDIR , "nfserr_notdir(ENOTDIR)"}, { nfserr_isdir, EISDIR , "nfserr_isdir(EISDIR)"}, { nfserr_inval, EINVAL , "nfserr_inval(EINVAL)"}, { nfserr_fbig, EFBIG , "nfserr_fbig(EFBIG)"}, { nfserr_nospc, ENOSPC , "nfserr_nospc(ENOSPC)"}, { nfserr_rofs, EROFS , "nfserr_rofs(EROFS)"}, { nfserr_mlink, EMLINK , "nfserr_mlink(EMLINK)"}, { nfserr_nametoolong, ENAMETOOLONG , "nfserr_nametoolong(ENAMETOOLONG)"}, { nfserr_notempty, ENOTEMPTY , "nfserr_notempty(ENOTEMPTY)"}, { nfserr_dquot, EDQUOT , "nfserr_dquot(EDQUOT)"}, { nfserr_stale, ESTALE , "nfserr_stale(ESTALE)"}, { nfserr_jukebox, ETIMEDOUT , "nfserr_jukebox(ETIMEDOUT)"}, { nfserr_dropit, EAGAIN , "nfserr_dropit(EAGAIN)"}, { nfserr_dropit, ENOMEM , "nfserr_dropit(ENOMEM)"}, { nfserr_badname, ESRCH , "nfserr_badname(ESRCH)"}, { nfserr_io, ETXTBSY , "nfserr_io(ETXTBSY)"}, { nfserr_notsupp, EOPNOTSUPP , "nfserr_notsupp(EOPNOTSUPP)"}, }; int i; int tabsz = (sizeof(nfs_errtbl)/sizeof(nfs_errtbl[0])); for (i = 0; i < tabsz; i++) { if (nfs_errtbl[i].nfserr == THIS->err) { break; } } if (i == tabsz) snprintf(THIS->__retvalue, MAXSTRINGLEN, "nfsderr %d", ntohl(THIS->err)); else snprintf(THIS->__retvalue, MAXSTRINGLEN, "nfsderr %d(%s)", ntohl(nfs_errtbl[i].nfserr), nfs_errtbl[i].string); %}