diff options
| author | Reuben Thomas <rrt@sc3d.org> | 2008-01-29 23:53:19 +0000 | 
|---|---|---|
| committer | Reuben Thomas <rrt@sc3d.org> | 2008-01-29 23:53:19 +0000 | 
| commit | f905e7c9aa34e0364f6b8b58715495257b9600c2 (patch) | |
| tree | cacf9eb3d5f45310f273425a6bea9d6056e1fcdd | |
| parent | b5e14cfb49e37e0ffd3ec5332d4a350955acb058 (diff) | |
| download | plptools-f905e7c9aa34e0364f6b8b58715495257b9600c2.tar.gz plptools-f905e7c9aa34e0364f6b8b58715495257b9600c2.tar.bz2 plptools-f905e7c9aa34e0364f6b8b58715495257b9600c2.zip | |
Fix getxattr and setxattr
| -rw-r--r-- | plpfuse/fuse.c | 10 | 
1 files changed, 8 insertions, 2 deletions
| diff --git a/plpfuse/fuse.c b/plpfuse/fuse.c index 97e90b4..883f1d8 100644 --- a/plpfuse/fuse.c +++ b/plpfuse/fuse.c @@ -435,7 +435,7 @@ static int plp_getxattr(const char *path, const char *name, char *value, size_t          return rfsv_isalive() ? -ENOENT : -NO_PSION;        pattr2xattr(pattr, value);        debuglog("getxattr succeeded: %s", value); -      return 0; +      return strlen(value);      } else {        debuglog("only gave %d bytes, need %d", size, XATTR_MAXLEN);        return XATTR_MAXLEN; @@ -462,9 +462,15 @@ static int plp_setxattr(const char *path, const char *name, const char *value, s      nxattr[XATTR_MAXLEN] = '\0';      if (rfsv_getattr(path, &pattr, &psize, &ptime))        return rfsv_isalive() ? -ENOENT : -NO_PSION; -    plp_getxattr(path, name, oxattr, XATTR_MAXLEN); +    /* Need to undo earlier increment of path when calling plp_getxattr */ +    plp_getxattr(path - 1, name, oxattr, XATTR_MAXLEN);      psidattr = pattr;      xattr2pattr(&pattr, &psidattr, oxattr, value); +    debuglog("attrs set %x delete %x; %s, %s", pattr, psidattr, oxattr, value); +    if (rfsv_setattr(path, pattr, psidattr)) +      return rfsv_isalive() ? -EACCES : -NO_PSION; + +    debuglog("setxattr succeeded");      return 0;    } else {      if (flags & XATTR_REPLACE) | 
