Commit 4c3f8649 authored by Matt Colyer's avatar Matt Colyer

Added cleanup when closing a file, probably needs a bit more throughness

but its a start.

Added a missing unlock call so you can read a file more than once.
parent 1c6aa3dd
...@@ -423,9 +423,11 @@ int afc_read_file(AFClient *client, AFCFile *file, char *data, int length) { ...@@ -423,9 +423,11 @@ int afc_read_file(AFClient *client, AFCFile *file, char *data, int length) {
bytes = receive_AFC_data(client, &input); bytes = receive_AFC_data(client, &input);
if (bytes < 0) { if (bytes < 0) {
if (input) free(input); if (input) free(input);
afc_unlock(client);
return -1; return -1;
} else if (bytes == 0) { } else if (bytes == 0) {
if (input) free(input); if (input) free(input);
afc_unlock(client);
return current_count; return current_count;
} else { } else {
if (input) { if (input) {
...@@ -493,6 +495,4 @@ void afc_close_file(AFClient *client, AFCFile *file) { ...@@ -493,6 +495,4 @@ void afc_close_file(AFClient *client, AFCFile *file) {
bytes = receive_AFC_data(client, &buffer); bytes = receive_AFC_data(client, &buffer);
afc_unlock(client); afc_unlock(client);
return; return;
if (buffer) free(buffer); // we're *SUPPOSED* to get an "error" here.
} }
...@@ -112,10 +112,25 @@ static int ifuse_read(const char *path, char *buf, size_t size, off_t offset, ...@@ -112,10 +112,25 @@ static int ifuse_read(const char *path, char *buf, size_t size, off_t offset,
} }
bytes = afc_read_file(afc, file, buf, size); bytes = afc_read_file(afc, file, buf, size);
return bytes; return bytes;
} }
static int ifuse_release(const char *path, struct fuse_file_info *fi){
AFCFile *file;
AFClient *afc = fuse_get_context()->private_data;
file = g_hash_table_lookup(file_handles, &(fi->fh));
if (!file){
return -ENOENT;
}
afc_close_file(afc, file);
free(file);
g_hash_table_remove(file_handles, &(fi->fh));
return 0;
}
void *ifuse_init(struct fuse_conn_info *conn) { void *ifuse_init(struct fuse_conn_info *conn) {
char *response = (char*)malloc(sizeof(char) * 2048); char *response = (char*)malloc(sizeof(char) * 2048);
int bytes = 0, port = 0, i = 0; int bytes = 0, port = 0, i = 0;
...@@ -171,6 +186,7 @@ static struct fuse_operations ifuse_oper = { ...@@ -171,6 +186,7 @@ static struct fuse_operations ifuse_oper = {
.readdir = ifuse_readdir, .readdir = ifuse_readdir,
.open = ifuse_open, .open = ifuse_open,
.read = ifuse_read, .read = ifuse_read,
.release = ifuse_release,
.init = ifuse_init, .init = ifuse_init,
.destroy = ifuse_cleanup .destroy = ifuse_cleanup
}; };
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment