*** empty log message ***
This commit is contained in:
parent
88ab18b8f8
commit
733b3b1f4a
45
sshfs.c
45
sshfs.c
|
|
@ -110,11 +110,15 @@ struct openfile {
|
|||
struct buffer write_handle;
|
||||
};
|
||||
|
||||
struct node {
|
||||
struct node_attr {
|
||||
struct stat stat;
|
||||
time_t updated;
|
||||
};
|
||||
|
||||
struct sshfs_file {
|
||||
struct buffer handle;
|
||||
};
|
||||
|
||||
static GHashTable *reqtab;
|
||||
static GHashTable *cache;
|
||||
static time_t last_cleaned;
|
||||
|
|
@ -375,7 +379,7 @@ static int buf_get_attrs(struct buffer *buf, struct stat *stbuf)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int cache_clean_entry(void *_key, struct node *node, time_t *now)
|
||||
static int cache_clean_entry(void *_key, struct node_attr *node, time_t *now)
|
||||
{
|
||||
(void) _key;
|
||||
if (*now > node->updated + CACHE_TIMEOUT)
|
||||
|
|
@ -394,9 +398,9 @@ static void cache_clean(void)
|
|||
}
|
||||
}
|
||||
|
||||
static struct node *cache_lookup(const char *path)
|
||||
static struct node_attr *cache_lookup(const char *path)
|
||||
{
|
||||
return (struct node *) g_hash_table_lookup(cache, path);
|
||||
return (struct node_attr *) g_hash_table_lookup(cache, path);
|
||||
}
|
||||
|
||||
static void cache_remove(const char *path)
|
||||
|
|
@ -417,12 +421,12 @@ static void cache_rename(const char *from, const char *to)
|
|||
cache_remove(to);
|
||||
}
|
||||
|
||||
static struct node *cache_get(const char *path)
|
||||
static struct node_attr *cache_get(const char *path)
|
||||
{
|
||||
struct node *node = cache_lookup(path);
|
||||
struct node_attr *node = cache_lookup(path);
|
||||
if (node == NULL) {
|
||||
char *pathcopy = g_strdup(path);
|
||||
node = g_new0(struct node, 1);
|
||||
node = g_new0(struct node_attr, 1);
|
||||
g_hash_table_insert(cache, pathcopy, node);
|
||||
}
|
||||
return node;
|
||||
|
|
@ -430,7 +434,7 @@ static struct node *cache_get(const char *path)
|
|||
|
||||
static void cache_add_attr(const char *path, const struct stat *stbuf)
|
||||
{
|
||||
struct node *node;
|
||||
struct node_attr *node;
|
||||
time_t now;
|
||||
|
||||
pthread_mutex_lock(&lock);
|
||||
|
|
@ -797,7 +801,7 @@ static int sshfs_send_getattr(const char *path, struct stat *stbuf)
|
|||
|
||||
static int sshfs_getattr(const char *path, struct stat *stbuf)
|
||||
{
|
||||
struct node *node;
|
||||
struct node_attr *node;
|
||||
|
||||
pthread_mutex_lock(&lock);
|
||||
node = cache_lookup(path);
|
||||
|
|
@ -1029,7 +1033,7 @@ static int sshfs_open(const char *path, struct fuse_file_info *fi)
|
|||
{
|
||||
int err;
|
||||
struct buffer buf;
|
||||
struct buffer *handle;
|
||||
struct sshfs_file *sf;
|
||||
uint32_t pflags = 0;
|
||||
if ((fi->flags & O_ACCMODE) == O_RDONLY)
|
||||
pflags = SSH_FXF_READ;
|
||||
|
|
@ -1040,28 +1044,29 @@ static int sshfs_open(const char *path, struct fuse_file_info *fi)
|
|||
else
|
||||
return -EINVAL;
|
||||
|
||||
handle = g_new0(struct buffer, 1);
|
||||
sf = g_new0(struct sshfs_file, 1);
|
||||
buf_init(&buf, 0);
|
||||
buf_add_path(&buf, path);
|
||||
buf_add_uint32(&buf, pflags);
|
||||
buf_add_uint32(&buf, 0);
|
||||
err = sftp_request(SSH_FXP_OPEN, &buf, SSH_FXP_HANDLE, handle);
|
||||
err = sftp_request(SSH_FXP_OPEN, &buf, SSH_FXP_HANDLE, &sf->handle);
|
||||
if (!err) {
|
||||
buf_finish(handle);
|
||||
fi->fh = (unsigned long) handle;
|
||||
buf_finish(&sf->handle);
|
||||
fi->fh = (unsigned long) sf;
|
||||
} else
|
||||
g_free(handle);
|
||||
g_free(sf);
|
||||
buf_free(&buf);
|
||||
return err;
|
||||
}
|
||||
|
||||
static int sshfs_release(const char *path, struct fuse_file_info *fi)
|
||||
{
|
||||
struct buffer *handle = (struct buffer *) fi->fh;
|
||||
struct sshfs_file *sf = (struct sshfs_file *) fi->fh;
|
||||
struct buffer *handle = &sf->handle;
|
||||
(void) path;
|
||||
sftp_request(SSH_FXP_CLOSE, handle, 0, NULL);
|
||||
buf_free(handle);
|
||||
g_free(handle);
|
||||
g_free(sf);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -1071,7 +1076,8 @@ static int sshfs_read(const char *path, char *rbuf, size_t size, off_t offset,
|
|||
int err;
|
||||
struct buffer buf;
|
||||
struct buffer data;
|
||||
struct buffer *handle = (struct buffer *) fi->fh;
|
||||
struct sshfs_file *sf = (struct sshfs_file *) fi->fh;
|
||||
struct buffer *handle = &sf->handle;
|
||||
(void) path;
|
||||
buf_init(&buf, 0);
|
||||
buf_add_buf(&buf, handle);
|
||||
|
|
@ -1102,7 +1108,8 @@ static int sshfs_write(const char *path, const char *wbuf, size_t size,
|
|||
int err;
|
||||
struct buffer buf;
|
||||
struct buffer data;
|
||||
struct buffer *handle = (struct buffer *) fi->fh;
|
||||
struct sshfs_file *sf = (struct sshfs_file *) fi->fh;
|
||||
struct buffer *handle = &sf->handle;
|
||||
data.p = (uint8_t *) wbuf;
|
||||
data.len = size;
|
||||
buf_init(&buf, 0);
|
||||
|
|
|
|||
Loading…
Reference in New Issue