diff options
| author | 2008-08-12 20:42:26 +0200 | |
|---|---|---|
| committer | 2008-08-21 18:47:04 +0200 | |
| commit | e5e5f21cae73230eaaa70273bd4400ff6b86641a (patch) | |
| tree | 729fe309175f6952c134e35b80e9ed79b646c135 | |
| parent | 94eca7874e2c60cad84b344feaaa66418b1b47ef (diff) | |
| download | libimobiledevice-e5e5f21cae73230eaaa70273bd4400ff6b86641a.tar.gz libimobiledevice-e5e5f21cae73230eaaa70273bd4400ff6b86641a.tar.bz2 | |
fix some memory leaks
| -rw-r--r-- | src/ifuse.c | 22 | ||||
| -rw-r--r-- | src/lockdown.c | 3 | ||||
| -rw-r--r-- | src/main.c | 3 |
3 files changed, 15 insertions, 13 deletions
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 @@ | |||
| 42 | GHashTable *file_handles; | 42 | GHashTable *file_handles; |
| 43 | int fh_index = 0; | 43 | int fh_index = 0; |
| 44 | 44 | ||
| 45 | iPhone *phone = NULL; | ||
| 46 | lockdownd_client *control = NULL; | ||
| 47 | |||
| 45 | int debug = 0; | 48 | int debug = 0; |
| 46 | 49 | ||
| 47 | static int ifuse_getattr(const char *path, struct stat *stbuf) { | 50 | 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){ | |||
| 175 | 178 | ||
| 176 | void *ifuse_init(struct fuse_conn_info *conn) { | 179 | void *ifuse_init(struct fuse_conn_info *conn) { |
| 177 | int port = 0; | 180 | int port = 0; |
| 178 | char* host_id = NULL; | ||
| 179 | AFClient *afc = NULL; | 181 | AFClient *afc = NULL; |
| 180 | 182 | ||
| 181 | conn->async_read = 0; | 183 | conn->async_read = 0; |
| 182 | 184 | ||
| 183 | file_handles = g_hash_table_new(g_int_hash, g_int_equal); | 185 | file_handles = g_hash_table_new(g_int_hash, g_int_equal); |
| 184 | 186 | ||
| 185 | iPhone *phone = get_iPhone(); | 187 | phone = get_iPhone(); |
| 186 | if (!phone){ | 188 | if (!phone){ |
| 187 | fprintf(stderr, "No iPhone found, is it connected?\n"); | 189 | fprintf(stderr, "No iPhone found, is it connected?\n"); |
| 188 | return NULL; | 190 | return NULL; |
| @@ -194,13 +196,10 @@ void *ifuse_init(struct fuse_conn_info *conn) { | |||
| 194 | return NULL; | 196 | return NULL; |
| 195 | } | 197 | } |
| 196 | 198 | ||
| 197 | host_id = get_host_id(); | 199 | if (!lockdownd_init(phone, &control)) { |
| 198 | if ((host_id && !lockdownd_start_SSL_session(control, host_id)) || !host_id) { | 200 | fprintf(stderr, "Something went wrong in the lockdownd client.\n"); |
| 199 | fprintf(stderr, "Something went wrong in GnuTLS. Is your HostID configured in .config/libiphone/libiphonerc?\n"); | ||
| 200 | return NULL; | 201 | return NULL; |
| 201 | } | 202 | } |
| 202 | free(host_id); | ||
| 203 | host_id = NULL; | ||
| 204 | 203 | ||
| 205 | port = lockdownd_start_service(control, "com.apple.afc"); | 204 | port = lockdownd_start_service(control, "com.apple.afc"); |
| 206 | if (!port) { | 205 | if (!port) { |
| @@ -215,11 +214,10 @@ void *ifuse_init(struct fuse_conn_info *conn) { | |||
| 215 | 214 | ||
| 216 | void ifuse_cleanup(void *data) { | 215 | void ifuse_cleanup(void *data) { |
| 217 | AFClient *afc = (AFClient *)data; | 216 | AFClient *afc = (AFClient *)data; |
| 218 | if (afc) { | 217 | |
| 219 | iPhone *phone = afc->connection->phone; | 218 | afc_disconnect(afc); |
| 220 | afc_disconnect(afc); | 219 | lockdownd_close(control); |
| 221 | free_iPhone(phone); | 220 | free_iPhone(phone); |
| 222 | } | ||
| 223 | } | 221 | } |
| 224 | 222 | ||
| 225 | int ifuse_flush(const char *path, struct fuse_file_info *fi) { | 223 | 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) { | |||
| 89 | return control; | 89 | return control; |
| 90 | } | 90 | } |
| 91 | 91 | ||
| 92 | |||
| 92 | /** Closes the lockdownd client and does the necessary housekeeping. | 93 | /** Closes the lockdownd client and does the necessary housekeeping. |
| 93 | * | 94 | * |
| 94 | * @param control The lockdown client | 95 | * @param control The lockdown client |
| 95 | */ | 96 | */ |
| 96 | void lockdown_close(lockdownd_client *control) { | 97 | void lockdownd_close(lockdownd_client *control) { |
| 97 | if (!control) return; | 98 | if (!control) return; |
| 98 | if (control->connection) { | 99 | if (control->connection) { |
| 99 | mux_close_connection(control->connection); | 100 | mux_close_connection(control->connection); |
| @@ -131,6 +131,9 @@ int main(int argc, char *argv[]) { | |||
| 131 | printf("Start service failure.\n"); | 131 | printf("Start service failure.\n"); |
| 132 | } | 132 | } |
| 133 | 133 | ||
| 134 | printf("All done.\n"); | ||
| 135 | |||
| 136 | lockdownd_close(control); | ||
| 134 | free_iPhone(phone); | 137 | free_iPhone(phone); |
| 135 | 138 | ||
| 136 | return 0; | 139 | return 0; |
