From e5e5f21cae73230eaaa70273bd4400ff6b86641a Mon Sep 17 00:00:00 2001 From: Jonathan Beck Date: Tue, 12 Aug 2008 20:42:26 +0200 Subject: fix some memory leaks --- src/ifuse.c | 22 ++++++++++------------ src/lockdown.c | 3 ++- src/main.c | 3 +++ 3 files changed, 15 insertions(+), 13 deletions(-) (limited to 'src') diff --git a/src/ifuse.c b/src/ifuse.c index d35564e..7ae4827 100644 --- a/src/ifuse.c +++ b/src/ifuse.c @@ -42,6 +42,9 @@ GHashTable *file_handles; int fh_index = 0; +iPhone *phone = NULL; +lockdownd_client *control = NULL; + int debug = 0; static int ifuse_getattr(const char *path, struct stat *stbuf) { @@ -175,14 +178,13 @@ static int ifuse_release(const char *path, struct fuse_file_info *fi){ void *ifuse_init(struct fuse_conn_info *conn) { int port = 0; - char* host_id = NULL; AFClient *afc = NULL; conn->async_read = 0; file_handles = g_hash_table_new(g_int_hash, g_int_equal); - iPhone *phone = get_iPhone(); + phone = get_iPhone(); if (!phone){ fprintf(stderr, "No iPhone found, is it connected?\n"); return NULL; @@ -194,13 +196,10 @@ void *ifuse_init(struct fuse_conn_info *conn) { return NULL; } - host_id = get_host_id(); - if ((host_id && !lockdownd_start_SSL_session(control, host_id)) || !host_id) { - fprintf(stderr, "Something went wrong in GnuTLS. Is your HostID configured in .config/libiphone/libiphonerc?\n"); + if (!lockdownd_init(phone, &control)) { + fprintf(stderr, "Something went wrong in the lockdownd client.\n"); return NULL; } - free(host_id); - host_id = NULL; port = lockdownd_start_service(control, "com.apple.afc"); if (!port) { @@ -215,11 +214,10 @@ void *ifuse_init(struct fuse_conn_info *conn) { void ifuse_cleanup(void *data) { AFClient *afc = (AFClient *)data; - if (afc) { - iPhone *phone = afc->connection->phone; - afc_disconnect(afc); - free_iPhone(phone); - } + + afc_disconnect(afc); + lockdownd_close(control); + free_iPhone(phone); } int ifuse_flush(const char *path, struct fuse_file_info *fi) { diff --git a/src/lockdown.c b/src/lockdown.c index 3969868..f02e783 100644 --- a/src/lockdown.c +++ b/src/lockdown.c @@ -89,11 +89,12 @@ lockdownd_client *new_lockdownd_client(iPhone *phone) { return control; } + /** Closes the lockdownd client and does the necessary housekeeping. * * @param control The lockdown client */ -void lockdown_close(lockdownd_client *control) { +void lockdownd_close(lockdownd_client *control) { if (!control) return; if (control->connection) { mux_close_connection(control->connection); diff --git a/src/main.c b/src/main.c index 0267dee..f7f8a2c 100644 --- a/src/main.c +++ b/src/main.c @@ -131,6 +131,9 @@ int main(int argc, char *argv[]) { printf("Start service failure.\n"); } + printf("All done.\n"); + + lockdownd_close(control); free_iPhone(phone); return 0; -- cgit v1.1-32-gdbae