diff options
Diffstat (limited to 'plpnfsd')
-rw-r--r-- | plpnfsd/main.cc | 18 | ||||
-rw-r--r-- | plpnfsd/mp_mount.c | 3 | ||||
-rw-r--r-- | plpnfsd/mp_pfs_ops.c | 48 | ||||
-rw-r--r-- | plpnfsd/rfsv_api.h | 15 |
4 files changed, 54 insertions, 30 deletions
diff --git a/plpnfsd/main.cc b/plpnfsd/main.cc index e322685..6bf0f01 100644 --- a/plpnfsd/main.cc +++ b/plpnfsd/main.cc @@ -46,14 +46,14 @@ long rfsv_dir(const char *file, dentry **e) { ret = a->dir(&(*file), &entries); while (!entries.empty()) { bufferStore s; - s = entries.popBuffer(); + s = entries.pop(); tmp = *e; *e = (dentry *)malloc(sizeof(dentry)); if (!*e) return -1; (*e)->time = s.getDWord(0); (*e)->size = s.getDWord(4); - (*e)->attr = s.getDWord(8); + (*e)->attr = a->attr2std(s.getDWord(8)); (*e)->name = strdup(s.getString(12)); (*e)->next = tmp; } @@ -138,7 +138,6 @@ static long rfsv_opencached(const char *name, long mode) { } long rfsv_read(char *buf, long offset, long len, char *name) { - // FIXME: this might break on RFSV16? long ret = 0; if (!a) @@ -161,7 +160,6 @@ long rfsv_read(char *buf, long offset, long len, char *name) { } long rfsv_write(char *buf, long offset, long len, char *name) { - // FIXME: this might break on RFSV16? long ret = 0; if (!a) @@ -196,7 +194,6 @@ long rfsv_setmtime(const char *name, long time) { long rfsv_setsize(const char *name, long size) { long ph; long ret; - // FIXME: this might break on RFSV16? if (!a) return -1; @@ -215,14 +212,19 @@ long rfsv_setattr(const char *name, long sattr, long dattr) { return -1; if (a_filename && !strcmp(name, a_filename)) rfsv_closecached(); - long ret = a->fsetattr(name, dattr, sattr); - return ret; + dattr = a->std2attr(dattr); + sattr = a->std2attr(sattr); + return a->fsetattr(name, dattr, sattr); } long rfsv_getattr(const char *name, long *attr, long *size, long *time) { + long res, psiattr; + if (!a) return -1; - return a->fgeteattr(&(*name), &(*attr), &(*size), &(*time)); + res = a->fgeteattr(&(*name), &psiattr, &(*size), &(*time)); + *attr = a->attr2std(psiattr); + return res; } long rfsv_statdev(char letter) { diff --git a/plpnfsd/mp_mount.c b/plpnfsd/mp_mount.c index f0a82d4..0f9e1e9 100644 --- a/plpnfsd/mp_mount.c +++ b/plpnfsd/mp_mount.c @@ -66,7 +66,7 @@ static char nfshost[128]; #ifndef __GLIBC__ #include <linux/fs.h> /* struct nfs_mount_data */ #endif -#include <linux/nfs_mount.h> /* struct nfs_mount_data */ +#include "linux-misc.h" /* struct nfs_mount_data */ #include <arpa/inet.h> /* inet_addr() */ #endif #ifdef _IBMR2 @@ -75,7 +75,6 @@ static char nfshost[128]; #include <sys/vmount.h> #endif - #ifndef DONT_UPDATE_MTAB #if defined(sun) && defined(__SVR4) #include <sys/mnttab.h> diff --git a/plpnfsd/mp_pfs_ops.c b/plpnfsd/mp_pfs_ops.c index 669d435..71ed2e9 100644 --- a/plpnfsd/mp_pfs_ops.c +++ b/plpnfsd/mp_pfs_ops.c @@ -106,29 +106,35 @@ attr2pattr(long oattr, long nattr, long *psisattr, long *psidattr) * work properly */ *psisattr = *psidattr = 0; + if ((oattr & 0400) != (nattr & 0400)) { + if (nattr & 0400) /* readable */ + *psidattr |= PSI_A_READ; + else + *psisattr |= PSI_A_READ; + } if ((oattr & 0200) != (nattr & 0200)) { if (nattr & 0200) /* readonly */ - *psidattr |= 0x01; + *psidattr |= PSI_A_RDONLY; else - *psisattr |= 0x01; + *psisattr |= PSI_A_RDONLY; } if ((oattr & 0020) != (nattr & 0020)) { if (nattr & 0020) /* group-write -> archive */ - *psisattr |= 0x20; + *psisattr |= PSI_A_ARCHIVE; else - *psidattr |= 0x20; + *psidattr |= PSI_A_ARCHIVE; } if ((oattr & 0004) != (nattr & 0004)) { if (nattr & 0004) /* Not world-read -> hidden */ - *psidattr |= 0x02; + *psidattr |= PSI_A_HIDDEN; else - *psisattr |= 0x02; + *psisattr |= PSI_A_HIDDEN; } if ((oattr & 0002) != (nattr & 0002)) { if (nattr & 0002) /* world-write -> system */ - *psisattr |= 0x04; + *psisattr |= PSI_A_SYSTEM; else - *psidattr |= 0x04; + *psidattr |= PSI_A_SYSTEM; } } @@ -137,7 +143,7 @@ dpattr2attr(long psiattr, long size, long ftime, fattr *fp, int inode) { bzero((char *) fp, sizeof(*fp)); - if (psiattr & 0x10) { + if (psiattr & PSI_A_DIR) { fp->type = NFDIR; fp->mode = NFSMODE_DIR | 0700; /* @@ -159,17 +165,18 @@ dpattr2attr(long psiattr, long size, long ftime, fattr *fp, int inode) * Following flags have to be set in order to let backups * work properly */ + if (psiattr & PSI_A_READ) fp->mode |= 0400; /* File readable (?) */ - if (!(psiattr & 0x01)) + if (!(psiattr & PSI_A_RDONLY)) fp->mode |= 0200; /* File writeable */ /* fp->mode |= 0100; File executable */ - if (!(psiattr & 0x02)) + if (!(psiattr & PSI_A_HIDDEN)) fp->mode |= 0004; /* Not Hidden <-> world read */ - if (psiattr & 0x04) + if (psiattr & PSI_A_SYSTEM) fp->mode |= 0002; /* System <-> world write */ - if (psiattr & 0x40) + if (psiattr & PSI_A_VOLUME) fp->mode |= 0001; /* Volume <-> world exec */ - if (psiattr & 0x20) + if (psiattr & PSI_A_ARCHIVE) fp->mode |= 0020; /* Modified <-> group write */ /* fp->mode |= 0040; Byte <-> group read */ /* fp->mode |= 0010; Text <-> group exec */ @@ -189,7 +196,7 @@ pattr2attr(long psiattr, long size, long ftime, fattr *fp, unsigned char *fh) { bzero((char *) fp, sizeof(*fp)); - if (psiattr & 0x10) { + if (psiattr & PSI_A_DIR) { fp->type = NFDIR; fp->mode = NFSMODE_DIR | 0700; /* @@ -211,17 +218,18 @@ pattr2attr(long psiattr, long size, long ftime, fattr *fp, unsigned char *fh) * Following flags have to be set in order to let backups * work properly */ + if (psiattr & PSI_A_READ) fp->mode |= 0400; /* File readable (?) */ - if (!(psiattr & 0x01)) + if (!(psiattr & PSI_A_RDONLY)) fp->mode |= 0200; /* File writeable */ /* fp->mode |= 0100; File executable */ - if (!(psiattr & 0x02)) + if (!(psiattr & PSI_A_HIDDEN)) fp->mode |= 0004; /* Not Hidden <-> world read */ - if (psiattr & 0x04) + if (psiattr & PSI_A_SYSTEM) fp->mode |= 0002; /* System <-> world write */ - if (psiattr & 0x40) + if (psiattr & PSI_A_VOLUME) fp->mode |= 0001; /* Volume <-> world exec */ - if (psiattr & 0x20) + if (psiattr & PSI_A_ARCHIVE) fp->mode |= 0020; /* Modified <-> group write */ /* fp->mode |= 0040; Byte <-> group read */ /* fp->mode |= 0010; Text <-> group exec */ diff --git a/plpnfsd/rfsv_api.h b/plpnfsd/rfsv_api.h index d4a996b..14c26d5 100644 --- a/plpnfsd/rfsv_api.h +++ b/plpnfsd/rfsv_api.h @@ -29,4 +29,19 @@ extern long rfsv_statdev(char letter); extern long rfsv_isalive(); extern long rfsv_closecached(void); +/* File attributes, C-style */ +#define PSI_A_RDONLY 0x0001 +#define PSI_A_HIDDEN 0x0002 +#define PSI_A_SYSTEM 0x0004 +#define PSI_A_DIR 0x0008 +#define PSI_A_ARCHIVE 0x0010 +#define PSI_A_VOLUME 0x0020 +#define PSI_A_NORMAL 0x0040 +#define PSI_A_TEMP 0x0080 +#define PSI_A_COMPRESSED 0x0100 +#define PSI_A_READ 0x0200 +#define PSI_A_EXEC 0x0400 +#define PSI_A_STREAM 0x0800 +#define PSI_A_TEXT 0x1000 + #endif |