Implemented getattr and source_stat.
Now filesystem implements getattr through source_stat, which is a wrapper for an fstatat with `dirfd == handle.root_path`.
This commit is contained in:
parent
e48cbc62f1
commit
8fcfebe3f9
@ -20,8 +20,36 @@ static void *icfs_init(struct fuse_conn_info *conn, struct fuse_config *cfg) {
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int icfs_getattr(const char *path, struct stat *stbuf,
|
||||||
|
struct fuse_file_info *fi) {
|
||||||
|
|
||||||
|
int statret = source_stat(path, stbuf);
|
||||||
|
|
||||||
|
//(void)fi;
|
||||||
|
|
||||||
|
/*
|
||||||
|
int res = 0;
|
||||||
|
|
||||||
|
memset(stbuf, 0, sizeof(struct stat));
|
||||||
|
if (strcmp(path, "/") == 0) {
|
||||||
|
stbuf->st_mode = S_IFDIR | 0755;
|
||||||
|
stbuf->st_nlink = 2;
|
||||||
|
} else if (strcmp(path + 1, options.filename) == 0) {
|
||||||
|
stbuf->st_mode = S_IFREG | 0444;
|
||||||
|
stbuf->st_nlink = 1;
|
||||||
|
stbuf->st_size = strlen(options.contents);
|
||||||
|
} else
|
||||||
|
res = -ENOENT;
|
||||||
|
|
||||||
|
*/
|
||||||
|
// return res;
|
||||||
|
|
||||||
|
return statret;
|
||||||
|
}
|
||||||
|
|
||||||
static const struct fuse_operations icfs_oper = {
|
static const struct fuse_operations icfs_oper = {
|
||||||
.init = icfs_init,
|
.init = icfs_init,
|
||||||
|
.getattr = icfs_getattr,
|
||||||
};
|
};
|
||||||
|
|
||||||
int main(int argc, char *argv[]) {
|
int main(int argc, char *argv[]) {
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
#define _GNU_SOURCE
|
#define _GNU_SOURCE
|
||||||
|
|
||||||
#include "sourcefs.h"
|
#include "sourcefs.h"
|
||||||
|
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
|
||||||
static struct source_files_handle {
|
static struct source_files_handle {
|
||||||
int root_fd;
|
int root_fd;
|
||||||
@ -19,3 +20,9 @@ int source_init(const char *root_path) {
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Currently this literally is a fstatat wrapper.
|
||||||
|
int source_stat(const char *restrict pathname, struct stat *restrict statbuf) {
|
||||||
|
int statret = fstatat(handle.root_fd, pathname, statbuf, 0);
|
||||||
|
return statret;
|
||||||
|
}
|
||||||
|
@ -3,6 +3,8 @@
|
|||||||
#ifndef SOURCEFS_H
|
#ifndef SOURCEFS_H
|
||||||
#define SOURCEFS_H
|
#define SOURCEFS_H
|
||||||
|
|
||||||
|
#include <sys/stat.h>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initializes the source file handling.
|
* Initializes the source file handling.
|
||||||
*
|
*
|
||||||
@ -11,4 +13,11 @@
|
|||||||
*/
|
*/
|
||||||
int source_init(const char *root_path);
|
int source_init(const char *root_path);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* `stat()`, but for source files.
|
||||||
|
*
|
||||||
|
* @see `stat()`
|
||||||
|
*/
|
||||||
|
int source_stat(const char *restrict pathname, struct stat *restrict statbuf);
|
||||||
|
|
||||||
#endif // !SOURCEFS_H
|
#endif // !SOURCEFS_H
|
||||||
|
Loading…
Reference in New Issue
Block a user