diff --git a/NEWS b/NEWS index fd1fefb0..958053a1 100644 --- a/NEWS +++ b/NEWS @@ -7,7 +7,11 @@ Noteworthy changes in version 1.3.1 (unreleased) * Interface changes relative to the 1.3.0 release: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - GPGME_EXPORT_MODE_MINIMAL NEW. + GPGME_EXPORT_MODE_MINIMAL NEW + gpgme_err_code_from_syserror NEW + gpgme_err_set_errno NEW + gpgme_error_from_errno CHANGED: Return gpgme_error_t (compatible type). + gpgme_error_from_syserror NEW ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/src/ChangeLog b/src/ChangeLog index 73588ab0..612a9640 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,16 @@ +2010-08-18 Marcus Brinkmann + + * gpgme.def: Add gpgme_err_code_from_syserror and gpgme_err_set_errno. + * libgpgme.vers: Likewise. + * gpgme.h.in (gpgme_error_from_errno): Fix return type to + gpgme_error_t. + (gpgme_err_code_from_syserror, gpgme_err_set_errno): New prototype. + (gpgme_error_from_syserror): New inline function (why are + gpgme_err_make_from_errno and gpgme_error_from_errno not inline + functions?). + * error.c (gpgme_error_from_errno): Fix return type to gpgme_error_t. + (gpgme_err_set_errno, gpgme_err_code_from_syserror): New functions. + 2010-08-03 Marcus Brinkmann * gpgme-tool.c (result_encrypt_to_xml, result_sign_to_xml) diff --git a/src/error.c b/src/error.c index 6f37ef7d..f970e682 100644 --- a/src/error.c +++ b/src/error.c @@ -74,6 +74,25 @@ gpgme_err_code_to_errno (gpgme_err_code_t code) return gpg_err_code_from_errno (code); } + +/* Retrieve the error code directly from the ERRNO variable. This + returns GPG_ERR_UNKNOWN_ERRNO if the system error is not mapped + (report this) and GPG_ERR_MISSING_ERRNO if ERRNO has the value 0. */ +gpgme_err_code_t +gpgme_err_code_from_syserror (void) +{ + return gpg_err_code_from_syserror (); +} + + +/* Set the ERRNO variable. This function is the preferred way to set + ERRNO due to peculiarities on WindowsCE. */ +void +gpgme_err_set_errno (int err) +{ + gpg_err_set_errno (err); +} + /* Return an error value with the error source SOURCE and the system error ERR. */ @@ -85,7 +104,7 @@ gpgme_err_make_from_errno (gpg_err_source_t source, int err) /* Return an error value with the system error ERR. */ -gpgme_err_code_t +gpgme_error_t gpgme_error_from_errno (int err) { return gpgme_error (gpg_err_code_from_errno (err)); diff --git a/src/gpgme.def b/src/gpgme.def index 1a685ffe..9990b334 100644 --- a/src/gpgme.def +++ b/src/gpgme.def @@ -199,5 +199,8 @@ EXPORTS gpgme_op_passwd_start @152 gpgme_op_passwd @153 + gpgme_err_code_from_syserror @154 + gpgme_err_set_errno @155 + ; END diff --git a/src/gpgme.h.in b/src/gpgme.h.in index eed9daa4..f84cd465 100644 --- a/src/gpgme.h.in +++ b/src/gpgme.h.in @@ -164,30 +164,41 @@ const char *gpgme_strerror (gpgme_error_t err); beginning of the error string as fits into the buffer. */ int gpgme_strerror_r (gpg_error_t err, char *buf, size_t buflen); - /* Return a pointer to a string containing a description of the error source in the error value ERR. */ const char *gpgme_strsource (gpgme_error_t err); - /* Retrieve the error code for the system error ERR. This returns GPG_ERR_UNKNOWN_ERRNO if the system error is not mapped (report this). */ gpgme_err_code_t gpgme_err_code_from_errno (int err); - /* Retrieve the system error for the error code CODE. This returns 0 if CODE is not a system error code. */ int gpgme_err_code_to_errno (gpgme_err_code_t code); - +/* Retrieve the error code directly from the ERRNO variable. This + returns GPG_ERR_UNKNOWN_ERRNO if the system error is not mapped + (report this) and GPG_ERR_MISSING_ERRNO if ERRNO has the value 0. */ +gpgme_err_code_t gpgme_err_code_from_syserror (void); + +/* Set the ERRNO variable. This function is the preferred way to set + ERRNO due to peculiarities on WindowsCE. */ +void gpgme_err_set_errno (int err); + /* Return an error value with the error source SOURCE and the system - error ERR. */ + error ERR. FIXME: Should be inline. */ gpgme_error_t gpgme_err_make_from_errno (gpgme_err_source_t source, int err); +/* Return an error value with the system error ERR. FIXME: Should be inline. */ +gpgme_error_t gpgme_error_from_errno (int err); -/* Return an error value with the system error ERR. */ -gpgme_err_code_t gpgme_error_from_errno (int err); + +static _GPGME_INLINE gpgme_error_t +gpgme_error_from_syserror (void) +{ + return gpgme_error (gpgme_err_code_from_syserror ()); +} /* The possible encoding mode of gpgme_data_t objects. */ diff --git a/src/libgpgme.vers b/src/libgpgme.vers index 9d927cef..3477d318 100644 --- a/src/libgpgme.vers +++ b/src/libgpgme.vers @@ -204,6 +204,9 @@ GPGME_1.0 { gpgme_trust_item_get_string_attr; gpgme_trust_item_release; + gpgme_err_code_from_syserror; + gpgme_err_set_errno; + local: *;