diff options
Diffstat (limited to 'trunk/assuan/mkerrors')
-rwxr-xr-x | trunk/assuan/mkerrors | 39 |
1 files changed, 24 insertions, 15 deletions
diff --git a/trunk/assuan/mkerrors b/trunk/assuan/mkerrors index 28451f63..79ac23b6 100755 --- a/trunk/assuan/mkerrors +++ b/trunk/assuan/mkerrors @@ -31,6 +31,7 @@ cat <<EOF #undef _ASSUAN_IN_LIBASSUAN /* undef to get all error codes. */ #include "assuan.h" +#include "assuan-defs.h" /* If true the modern gpg-error style error codes are used in the API. */ @@ -94,11 +95,8 @@ _assuan_error (int oldcode) { case 0: n = 16381; /*GPG_ERR_MISSING_ERRNO*/ break; case EAGAIN: - if (errno > 0 && errno < 4096) - { - n = (EAGAIN | (1 << 15)); - break; - } + n = (6 | (1 << 15)); + break; default: n = 270; /*GPG_ERR_ASS_READ_ERROR*/ break; } break; @@ -108,11 +106,8 @@ _assuan_error (int oldcode) { case 0: n = 16381; /*GPG_ERR_MISSING_ERRNO*/ break; case EAGAIN: - if (errno > 0 && errno < 4096) - { - n = (EAGAIN | (1 << 15)); - break; - } + n = (6 | (1 << 15)); + break; default: n = 271; /*GPG_ERR_ASS_WRITE_ERROR*/ break; } break; @@ -127,11 +122,8 @@ _assuan_error (int oldcode) n = 16381; /*GPG_ERR_MISSING_ERRNO*/ break; case ENOMEM: - if (errno > 0 && errno < 4096) - { - n = (ENOMEM | (1 << 15)); - break; - } + n = (86 | (1 << 15)); + break; default: n = 16382; /*GPG_ERR_UNKNOWN_ERRNO*/ break; @@ -150,6 +142,23 @@ _assuan_error (int oldcode) } +/* A small helper function to treat EAGAIN transparently to the + caller. */ +int +_assuan_error_is_eagain (assuan_error_t err) +{ + if ((!err_source && err == ASSUAN_Read_Error && errno == EAGAIN) + || (err_source && (err & ((1 << 24) - 1)) == (6 | (1 << 15)))) + { + /* Avoid spinning by sleeping for one tenth of a second. */ + _assuan_usleep (100000); + return 1; + } + else + return 0; +} + + /** * assuan_strerror: * @err: Error code |