diff options
author | Werner Koch <[email protected]> | 2017-11-28 15:36:12 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2017-11-28 15:36:12 +0000 |
commit | 513415c71781ab400ebb01f6b4cf2984ec6b1757 (patch) | |
tree | 6f9cb0358004276c092d97423c615428579fdef1 | |
parent | gpgscm: Some adjustments for use in gpgrt. (diff) | |
download | libgpg-error-513415c71781ab400ebb01f6b4cf2984ec6b1757.tar.gz libgpg-error-513415c71781ab400ebb01f6b4cf2984ec6b1757.zip |
core: Change new functions to return gpg_err_code_t.
* src/gpg-error.h.in (gpgrt_sentenv, gpgrt_mkdir, gpgrt_chdir): Change
return type to gpg_err_code_t.
* src/sysutils.c (_gpgrt_setenv): Implement that.
(_gpgrt_mkdir): Ditto.
(_gpgrt_chdir): Ditto.
* gpgscm/ffi.c (do_setenv, do_mkdir): Adjust for this change.
--
The functions are already a bit different and thus it is useful to let
them return a gpg-error style error code and don't let the user
implement that for each call.
Signed-off-by: Werner Koch <[email protected]>
-rw-r--r-- | gpgscm/ffi.c | 11 | ||||
-rw-r--r-- | src/gpg-error.h.in | 7 | ||||
-rw-r--r-- | src/gpgrt-int.h | 7 | ||||
-rw-r--r-- | src/sysutils.c | 67 | ||||
-rw-r--r-- | src/visibility.c | 9 |
5 files changed, 58 insertions, 43 deletions
diff --git a/gpgscm/ffi.c b/gpgscm/ffi.c index 51de63f..2f3e2f7 100644 --- a/gpgscm/ffi.c +++ b/gpgscm/ffi.c @@ -243,6 +243,7 @@ static pointer do_setenv (scheme *sc, pointer args) { FFI_PROLOG (); + gpg_err_code_t ec; char *name; char *value; int overwrite; @@ -250,8 +251,8 @@ do_setenv (scheme *sc, pointer args) FFI_ARG_OR_RETURN (sc, char *, value, string, args); FFI_ARG_OR_RETURN (sc, int, overwrite, bool, args); FFI_ARGS_DONE_OR_RETURN (sc, args); - if (gpgrt_setenv (name, value, overwrite)) - FFI_RETURN_ERR (sc, gpg_error_from_syserror ()); + if ((ec = gpgrt_setenv (name, value, overwrite))) + FFI_RETURN_ERR (sc, ec); FFI_RETURN (sc); } @@ -490,13 +491,15 @@ static pointer do_mkdir (scheme *sc, pointer args) { FFI_PROLOG (); + gpg_err_code_t ec; char *name; char *mode; FFI_ARG_OR_RETURN (sc, char *, name, string, args); FFI_ARG_OR_RETURN (sc, char *, mode, string, args); FFI_ARGS_DONE_OR_RETURN (sc, args); - if (gpgrt_mkdir (name, mode) == -1) - FFI_RETURN_ERR (sc, gpg_error_from_syserror ()); + ec = gpgrt_mkdir (name, mode); + if (ec) + FFI_RETURN_ERR (sc, ec); FFI_RETURN (sc); } diff --git a/src/gpg-error.h.in b/src/gpg-error.h.in index dffde2e..20d196a 100644 --- a/src/gpg-error.h.in +++ b/src/gpg-error.h.in @@ -453,14 +453,15 @@ void gpgrt_free (void *a); char *gpgrt_getenv (const char *name); /* A setenv and a unsetenv replacement.*/ -int gpgrt_setenv (const char *name, const char *value, int overwrite); +gpg_err_code_t gpgrt_setenv (const char *name, + const char *value, int overwrite); #define gpgrt_unsetenv(n) gpgrt_setenv ((n), NULL, 1) /* A wrapper around mkdir using a string for the mode. */ -int gpgrt_mkdir (const char *name, const char *modestr); +gpg_err_code_t gpgrt_mkdir (const char *name, const char *modestr); /* A simple wrapper around chdir. */ -int gpgrt_chdir (const char *name); +gpg_err_code_t gpgrt_chdir (const char *name); /* Return the current WD as a malloced string. */ char *gpgrt_getcwd (void); diff --git a/src/gpgrt-int.h b/src/gpgrt-int.h index b2f87b9..dc1305e 100644 --- a/src/gpgrt-int.h +++ b/src/gpgrt-int.h @@ -564,13 +564,14 @@ char *_gpgrt_getenv (const char *name); /* A setenv variant which can be used for unsetenv by setting VALUE to * NULL and OVERRIDE to true. */ -int _gpgrt_setenv (const char *name, const char *value, int overwrite); +gpg_err_code_t _gpgrt_setenv (const char *name, + const char *value, int overwrite); /* A wrapper around mkdir using a string for the mode (permissions). */ -int _gpgrt_mkdir (const char *name, const char *modestr); +gpg_err_code_t _gpgrt_mkdir (const char *name, const char *modestr); /* A simple wrapper around chdir. */ -int _gpgrt_chdir (const char *name); +gpg_err_code_t _gpgrt_chdir (const char *name); /* Return the current WD as a malloced string. */ char *_gpgrt_getcwd (void); diff --git a/src/sysutils.c b/src/sysutils.c index 70c2dc3..1f2c293 100644 --- a/src/sysutils.c +++ b/src/sysutils.c @@ -118,14 +118,11 @@ _gpgrt_getenv (const char *name) /* Wrapper around setenv so that we can have the same function in * Windows and Unix. In contrast to the standard setenv passing a * VALUE as NULL and setting OVERWRITE will remove the envvar. */ -int +gpg_err_code_t _gpgrt_setenv (const char *name, const char *value, int overwrite) { if (!name || !*name || strchr (name, '=')) - { - _gpg_err_set_errno (EINVAL); - return -1; - } + return GPG_ERR_EINVAL; #ifdef HAVE_W32_SYSTEM /* Windows maintains (at least) two sets of environment variables. @@ -143,34 +140,30 @@ _gpgrt_setenv (const char *name, const char *value, int overwrite) if (!value && overwrite) { if (!SetEnvironmentVariable (name, NULL)) - { - _gpg_err_set_errno (EINVAL); - return -1; - } + return GPG_ERR_EINVAL; if (getenv (name)) { /* Ugly: Leaking memory. */ buf = _gpgrt_strdup (name); if (!buf) - return -1; - return putenv (buf); + return _gpg_err_code_from_syserror (); + if (putenv (buf)) + return _gpg_err_code_from_syserror (); } return 0; } exists = GetEnvironmentVariable (name, tmpbuf, sizeof tmpbuf); if ((! exists || overwrite) && !SetEnvironmentVariable (name, value)) - { - _gpg_err_set_errno (EINVAL); /* (Might also be ENOMEM.) */ - return -1; - } + return GPG_ERR_EINVAL; /* (Might also be ENOMEM.) */ if (overwrite || !getenv (name)) { /* Ugly: Leaking memory. */ buf = _gpgrt_strconcat (name, "=", value, NULL); if (!buf) - return -1; - return putenv (buf); + return _gpg_err_code_from_syserror (); + if (putenv (buf)) + return _gpg_err_code_from_syserror (); } return 0; } @@ -181,9 +174,17 @@ _gpgrt_setenv (const char *name, const char *value, int overwrite) { if (!value && overwrite) - return unsetenv (name); + { + if (unsetenv (name)) + return _gpg_err_code_from_syserror (); + } else - return setenv (name, value, overwrite); + { + if (setenv (name, value, overwrite)) + return _gpg_err_code_from_syserror (); + } + + return 0; } # else /*!HAVE_SETENV*/ @@ -200,16 +201,18 @@ _gpgrt_setenv (const char *name, const char *value, int overwrite) { buf = _gpgrt_strdup (name); if (!buf) + return _gpg_err_code_from_syserror (); + if (putenv (buf)) return -1; - return putenv (buf); } } else if (overwrite || !getenv (name)) { buf = _gpgrt_strconcat (name, "=", value, NULL); if (!buf) - return -1; - return putenv (buf); + return _gpg_err_code_from_syserror (); + if (putenv (buf)) + return _gpg_err_code_from_syserror (); } return 0; @@ -264,7 +267,7 @@ modestr_to_mode (const char *modestr) * the second for the group and the third for all others. If the * string is shorter than above the missing mode characters are meant * to be not set. */ -int +gpg_err_code_t _gpgrt_mkdir (const char *name, const char *modestr) { #ifdef HAVE_W32CE_SYSTEM @@ -273,11 +276,11 @@ _gpgrt_mkdir (const char *name, const char *modestr) wname = utf8_to_wchar (name); if (!wname) - return -1; + return _gpg_err_code_from_syserror (); if (!CreateDirectoryW (wname, NULL)) { xfree (wname); - return -1; /* ERRNO is automagically provided by gpg-error.h. */ + return _gpg_err_code_from_syserror (); } xfree (wname); return 0; @@ -286,19 +289,25 @@ _gpgrt_mkdir (const char *name, const char *modestr) /* Note: In the case of W32 we better use CreateDirectory and try to set appropriate permissions. However using mkdir is easier because this sets ERRNO. */ - return mkdir (name); + if (mkdir (name)) + return _gpg_err_code_from_syserror (); + return 0; #else - return mkdir (name, modestr_to_mode (modestr)); + if (mkdir (name, modestr_to_mode (modestr))) + return _gpg_err_code_from_syserror (); + return 0; #endif } /* A simple wrapper around chdir. NAME is expected to be utf8 * encoded. */ -int +gpg_err_code_t _gpgrt_chdir (const char *name) { - return chdir (name); + if (chdir (name)) + return _gpg_err_code_from_syserror (); + return 0; } diff --git a/src/visibility.c b/src/visibility.c index c0cab3d..0f6d159 100644 --- a/src/visibility.c +++ b/src/visibility.c @@ -763,25 +763,26 @@ gpgrt_getenv (const char *name) return _gpgrt_getenv (name); } -int +gpg_err_code_t gpgrt_setenv (const char *name, const char *value, int overwrite) { return _gpgrt_setenv (name, value, overwrite); } -int +gpg_err_code_t gpgrt_mkdir (const char *name, const char *modestr) { return _gpgrt_mkdir (name, modestr); } -int +gpg_err_code_t gpgrt_chdir (const char *name) { return _gpgrt_chdir (name); } -char *gpgrt_getcwd (void) +char * +gpgrt_getcwd (void) { return _gpgrt_getcwd (); } |