|
@@ -34,6 +34,7 @@ static int rgpgfs_mkdirs(char *path) {
|
|
|
}
|
|
|
|
|
|
static int rgpgfs_encrypt(const char *source_path, char *cache_path) {
|
|
|
+ // fprintf(stderr, "rgpgfs_encrypt('%s', %p)\n", source_path, cache_path);
|
|
|
size_t source_path_len = strnlen(source_path, FUSE_PATH_BUF_LEN);
|
|
|
if (source_path_len >= FUSE_PATH_BUF_LEN) {
|
|
|
errno = ENAMETOOLONG;
|
|
@@ -72,12 +73,17 @@ static int rgpgfs_encrypt(const char *source_path, char *cache_path) {
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static int rgpgfs_getattr(const char *path, struct stat *statbuf,
|
|
|
+static int rgpgfs_getattr(const char *source_path, struct stat *statbuf,
|
|
|
struct fuse_file_info *fi) {
|
|
|
- int res = lstat(path, statbuf);
|
|
|
- // printf("rgpgfs_getattr(%s, ...) = %d\n", path, res);
|
|
|
- if (res == -1)
|
|
|
+ if (lstat(source_path, statbuf))
|
|
|
return -errno;
|
|
|
+ if (!S_ISDIR(statbuf->st_mode)) {
|
|
|
+ char cache_path[CACHE_PATH_BUF_LEN];
|
|
|
+ if (rgpgfs_encrypt(source_path, cache_path))
|
|
|
+ return -errno;
|
|
|
+ if (lstat(cache_path, statbuf))
|
|
|
+ return -errno;
|
|
|
+ }
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
@@ -111,6 +117,7 @@ static int rgpgfs_readdir(const char *path, void *buf, fuse_fill_dir_t filler,
|
|
|
}
|
|
|
|
|
|
static int rgpgfs_open(const char *source_path, struct fuse_file_info *fi) {
|
|
|
+ // fprintf(stderr, "rgpgfs_open('%s', %p)", source_path, fi);
|
|
|
char cache_path[CACHE_PATH_BUF_LEN];
|
|
|
if (rgpgfs_encrypt(source_path, cache_path))
|
|
|
return -errno;
|