diff --git a/src/dispatch.c b/src/dispatch.c index 10d1939..0edfd6d 100644 --- a/src/dispatch.c +++ b/src/dispatch.c @@ -28,11 +28,14 @@ raw1394handle_t raw1394_new_handle(void) fw_handle_t fw_handle; raw1394handle_t handle; struct raw1394_portinfo port; + int errno_bak; handle = (raw1394handle_t) malloc(sizeof(struct raw1394_handle)); if (!handle) return NULL; + errno_bak = errno; /* workaround for faulty legacy applications */ + ieee1394_handle = ieee1394_new_handle(); if (!ieee1394_handle) goto try_fw; @@ -44,6 +47,8 @@ raw1394handle_t raw1394_new_handle(void) } ieee1394_destroy_handle(ieee1394_handle); try_fw: + errno = errno_bak; + fw_handle = fw_new_handle(); if (fw_handle) { handle->is_fw = 1; @@ -72,11 +77,14 @@ raw1394handle_t raw1394_new_handle_on_port(int port) ieee1394handle_t ieee1394_handle; fw_handle_t fw_handle; raw1394handle_t handle; + int errno_bak; handle = (raw1394handle_t) malloc(sizeof(struct raw1394_handle)); if (!handle) return NULL; + errno_bak = errno; /* workaround for faulty legacy applications */ + ieee1394_handle = ieee1394_new_handle_on_port(port); if (ieee1394_handle) { handle->is_fw = 0; @@ -84,6 +92,8 @@ raw1394handle_t raw1394_new_handle_on_port(int port) return handle; } + errno = errno_bak; + fw_handle = fw_new_handle_on_port(port); if (fw_handle) { handle->is_fw = 1;