diff -Naurp libraw1394-2.0.0/src/arm.c libraw1394-2.0.0.fix/src/arm.c --- libraw1394-2.0.0/src/arm.c 2008-07-05 16:08:26.000000000 -0400 +++ libraw1394-2.0.0.fix/src/arm.c 2008-11-20 12:37:05.136821199 -0500 @@ -109,7 +109,6 @@ int ieee1394_arm_set_buf (struct ieee139 size_t length, void *buf) { struct raw1394_request req; - int status; CLEAR_REQ(&req); @@ -139,7 +138,6 @@ int ieee1394_arm_get_buf (struct ieee139 size_t length, void *buf) { struct raw1394_request req; - int status; CLEAR_REQ(&req); diff -Naurp libraw1394-2.0.0/src/dispatch.c libraw1394-2.0.0.fix/src/dispatch.c --- libraw1394-2.0.0/src/dispatch.c 2008-11-20 12:36:00.918753368 -0500 +++ libraw1394-2.0.0.fix/src/dispatch.c 2008-11-20 12:42:03.387817813 -0500 @@ -24,36 +24,35 @@ int raw1394_errcode_to_errno(raw1394_err raw1394handle_t raw1394_new_handle(void) { - ieee1394handle_t ieee1394_handle = ieee1394_new_handle(); - fw_handle_t fw_handle = NULL; - raw1394handle_t handle = NULL; - - if (ieee1394_handle) { - struct raw1394_portinfo port; - if (ieee1394_get_port_info(ieee1394_handle, &port, 1) < 1) { - ieee1394_destroy_handle(ieee1394_handle); - ieee1394_handle = NULL; - fw_handle = fw_new_handle(); - } - } - else { - fw_handle = fw_new_handle(); - } - if (ieee1394_handle || fw_handle) { - handle = (raw1394handle_t) malloc(sizeof(struct raw1394_handle)); - if (ieee1394_handle && handle) { - handle->is_fw = 0; - handle->mode.ieee1394 = ieee1394_handle; - } - 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); + ieee1394handle_t ieee1394_handle; + fw_handle_t fw_handle; + raw1394handle_t handle; + struct raw1394_portinfo port; + + handle = (raw1394handle_t) malloc(sizeof(struct raw1394_handle)); + if (!handle) + return NULL; + + ieee1394_handle = ieee1394_new_handle(); + if (!ieee1394_handle) + goto try_fw; + + if (ieee1394_get_port_info(ieee1394_handle, &port, 1) >= 1) { + handle->is_fw = 0; + handle->mode.ieee1394 = ieee1394_handle; + return handle; + } + ieee1394_destroy_handle(ieee1394_handle); +try_fw: + fw_handle = fw_new_handle(); + if (fw_handle) { + handle->is_fw = 1; + handle->mode.fw = fw_handle; + return handle; } - return handle; + + free(handle); + return NULL; } void raw1394_destroy_handle(raw1394handle_t handle) @@ -69,27 +68,30 @@ void raw1394_destroy_handle(raw1394handl raw1394handle_t raw1394_new_handle_on_port(int port) { - ieee1394handle_t ieee1394_handle = ieee1394_new_handle_on_port(port); - fw_handle_t fw_handle = NULL; - raw1394handle_t handle = NULL; + ieee1394handle_t ieee1394_handle; + fw_handle_t fw_handle; + raw1394handle_t handle; + + handle = (raw1394handle_t) malloc(sizeof(struct raw1394_handle)); + if (!handle) + return NULL; + ieee1394_handle = ieee1394_new_handle_on_port(port); if (ieee1394_handle) { - handle = (raw1394handle_t) malloc(sizeof(struct raw1394_handle)); - 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); + handle->is_fw = 0; + handle->mode.ieee1394 = ieee1394_handle; + return handle; } - return handle; + + fw_handle = fw_new_handle_on_port(port); + if (fw_handle) { + handle->is_fw = 1; + handle->mode.fw = fw_handle; + return handle; + } + + free(handle); + return NULL; } int raw1394_busreset_notify (raw1394handle_t handle, int off_on_switch) diff -Naurp libraw1394-2.0.0/src/eventloop.c libraw1394-2.0.0.fix/src/eventloop.c --- libraw1394-2.0.0/src/eventloop.c 2008-07-06 14:41:48.000000000 -0400 +++ libraw1394-2.0.0.fix/src/eventloop.c 2008-11-20 12:38:22.289816445 -0500 @@ -32,7 +32,7 @@ int ieee1394_loop_iterate(struct raw1394 { struct raw1394_request req; ieee1394handle_t ihandle = handle->mode.ieee1394; - int retval = 0, channel; + int retval = 0; while (read(ihandle->fd, &req, sizeof(req)) < 0) { if (errno != EINTR) return -1; diff -Naurp libraw1394-2.0.0/src/fw.c libraw1394-2.0.0.fix/src/fw.c --- libraw1394-2.0.0/src/fw.c 2008-11-20 12:36:00.920753360 -0500 +++ libraw1394-2.0.0.fix/src/fw.c 2008-11-20 12:43:13.017816248 -0500 @@ -773,10 +773,12 @@ handle_arm_request(raw1394handle_t handl } rrb->request.generation = fwhandle->reset.generation; rrb->request.buffer_length = in_length; + rrb->request.buffer = rrb->data; memcpy(rrb->request.buffer, request->data, in_length); rrb->response.response_code = response.rcode; rrb->response.buffer_length = response.length; + rrb->request.buffer = rrb->data + in_length; memcpy(rrb->response.buffer, allocation->data + offset, response.length); diff -Naurp libraw1394-2.0.0/src/fw-iso.c libraw1394-2.0.0.fix/src/fw-iso.c --- libraw1394-2.0.0/src/fw-iso.c 2008-11-20 12:36:00.921763895 -0500 +++ libraw1394-2.0.0.fix/src/fw-iso.c 2008-11-20 12:39:35.003793770 -0500 @@ -85,7 +85,8 @@ queue_xmit_packets(raw1394handle_t handl fw_handle_t fwhandle = handle->mode.fw; enum raw1394_iso_disposition d; unsigned char tag, sy; - int len, cycle = -1; + unsigned int len; + int cycle = -1; unsigned int dropped = 0; if (fwhandle->iso.xmit_handler == NULL) @@ -258,9 +259,7 @@ int fw_iso_xmit_write(raw1394handle_t ha unsigned char sy) { fw_handle_t fwhandle = handle->mode.fw; - struct fw_cdev_queue_iso queue_iso; struct fw_cdev_start_iso start_iso; - struct fw_cdev_iso_packet *p; int retval; if (len > fwhandle->iso.max_packet_size) { diff -Naurp libraw1394-2.0.0/src/main.c libraw1394-2.0.0.fix/src/main.c --- libraw1394-2.0.0/src/main.c 2008-07-06 14:50:34.000000000 -0400 +++ libraw1394-2.0.0.fix/src/main.c 2008-11-20 12:40:02.828816470 -0500 @@ -253,9 +253,7 @@ void *raw1394_get_userdata(struct raw139 int ieee1394_get_port_info(struct ieee1394_handle *handle, struct raw1394_portinfo *pinf, int maxports) { - int num; struct raw1394_request req; - struct raw1394_khost_list *khl; CLEAR_REQ(&req); req.type = RAW1394_REQ_LIST_CARDS;