diff --git a/NEWS b/NEWS index aeeb4a5..030a9ca 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,10 @@ +New in TBD: + +API Changes: + + * Types + - New NFC_ESOFT error to handle software errors (allocations, pie creation, etc.) + New in 1.6.0-rc1: API Changes: diff --git a/include/nfc/nfc.h b/include/nfc/nfc.h index 97457ef..d00bf95 100644 --- a/include/nfc/nfc.h +++ b/include/nfc/nfc.h @@ -124,7 +124,7 @@ extern "C" { #define NFC_SUCCESS 0 /** @ingroup error * @hideinitializer - * Input / output error, device will not be usable anymore + * Input / output error, device may not be usable anymore without re-open it */ #define NFC_EIO -1 /** @ingroup error @@ -172,6 +172,11 @@ extern "C" { * Error while RF transmission */ #define NFC_ERFTRANS -20 +/** @ingroup error + * @hideinitializer + * Software error (allocation, file/pipe creation, etc.) + */ +#define NFC_ESOFT -80 /** @ingroup error * @hideinitializer * Device's internal chip error diff --git a/libnfc/drivers/acr122s.c b/libnfc/drivers/acr122s.c index 2718963..43bf797 100644 --- a/libnfc/drivers/acr122s.c +++ b/libnfc/drivers/acr122s.c @@ -586,7 +586,9 @@ acr122s_open(const nfc_connstring connstring) DRIVER_DATA(pnd)->seq = 0; #ifndef WIN32 - pipe(DRIVER_DATA(pnd)->abort_fds); + if (pipe(DRIVER_DATA(pnd)->abort_fds) < 0) { + return NULL; + } #else DRIVER_DATA(pnd)->abort_flag = false; #endif @@ -704,7 +706,9 @@ acr122s_abort_command(nfc_device *pnd) #ifndef WIN32 close(DRIVER_DATA(pnd)->abort_fds[0]); close(DRIVER_DATA(pnd)->abort_fds[1]); - pipe(DRIVER_DATA(pnd)->abort_fds); + if (pipe(DRIVER_DATA(pnd)->abort_fds) < 0 ) { + return NFC_ESOFT; + } #else DRIVER_DATA(pnd)->abort_flag = true; #endif diff --git a/libnfc/drivers/arygon.c b/libnfc/drivers/arygon.c index a7e4c81..1936bbb 100644 --- a/libnfc/drivers/arygon.c +++ b/libnfc/drivers/arygon.c @@ -265,7 +265,9 @@ arygon_open (const nfc_connstring connstring) #ifndef WIN32 // pipe-based abort mecanism - pipe (DRIVER_DATA (pnd)->iAbortFds); + if (pipe (DRIVER_DATA (pnd)->iAbortFds) < 0) { + return NULL; + } #else DRIVER_DATA (pnd)->abort_flag = false; #endif @@ -545,7 +547,9 @@ arygon_abort_command (nfc_device *pnd) if (pnd) { #ifndef WIN32 close (DRIVER_DATA (pnd)->iAbortFds[0]); - pipe (DRIVER_DATA (pnd)->iAbortFds); + if (pipe (DRIVER_DATA (pnd)->iAbortFds) < 0) { + return NFC_ESOFT; + } #else DRIVER_DATA (pnd)->abort_flag = true; #endif