aboutsummaryrefslogtreecommitdiffstats
path: root/trunk/assuan/mkerrors
diff options
context:
space:
mode:
Diffstat (limited to 'trunk/assuan/mkerrors')
-rwxr-xr-xtrunk/assuan/mkerrors39
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