diff options
author | Erik Hovland <erik@hovland.org> | 2008-09-30 14:05:32 -0700 |
---|---|---|
committer | Dan Dennedy <dan@dennedy.org> | 2008-10-28 22:52:06 -0700 |
commit | 709d8791ceadae2c2a0cd3ef9ebdf56e4d7dd27e (patch) | |
tree | 4abb2023378f4761df8b482e66c570b4e3915c6f | |
parent | 378b935fa35d9b00a36c20f8d27b489c99e1e2ef (diff) | |
download | libraw1394-709d8791ceadae2c2a0cd3ef9ebdf56e4d7dd27e.tar.gz |
Protect against resource leaks.
Signed-off-by: Erik Hovland <erik@hovland.org>
Signed-off-by: Dan Dennedy <dan@dennedy.org>
-rw-r--r-- | src/dispatch.c | 11 | ||||
-rw-r--r-- | src/fw.c | 4 |
2 files changed, 11 insertions, 4 deletions
diff --git a/src/dispatch.c b/src/dispatch.c index 6786a52..567fbbc 100644 --- a/src/dispatch.c +++ b/src/dispatch.c @@ -48,7 +48,10 @@ raw1394handle_t raw1394_new_handle(void) else if (handle) { handle->is_fw = 1; handle->mode.fw = fw_handle; - } + } else if (fw_handle) + fw_destroy_handle(fw_handle); + else if (ieee1394_handle) + ieee1394_destroy_handle(ieee1394_handle); } return handle; } @@ -76,14 +79,16 @@ raw1394handle_t raw1394_new_handle_on_port(int port) if (handle) { handle->is_fw = 0; handle->mode.ieee1394 = ieee1394_handle; - } + } else + ieee1394_destroy_handle(ieee1394_handle); } else if (fw_handle = fw_new_handle_on_port(port)) { handle = (raw1394handle_t) malloc(sizeof(struct raw1394_handle)); if (handle) { handle->is_fw = 1; handle->mode.fw = fw_handle; - } + } else + fw_destroy_handle(fw_handle); } return handle; } @@ -501,8 +501,10 @@ fw_handle_t fw_new_handle_on_port(int port) if (handle == NULL) return NULL; - if (fw_set_port(handle, port) < 0) + if (fw_set_port(handle, port) < 0) { + fw_destroy_handle(handle); return NULL; + } return handle; } |