aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2017-11-28 15:36:12 +0000
committerWerner Koch <[email protected]>2017-11-28 15:36:12 +0000
commit513415c71781ab400ebb01f6b4cf2984ec6b1757 (patch)
tree6f9cb0358004276c092d97423c615428579fdef1
parentgpgscm: Some adjustments for use in gpgrt. (diff)
downloadlibgpg-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.c11
-rw-r--r--src/gpg-error.h.in7
-rw-r--r--src/gpgrt-int.h7
-rw-r--r--src/sysutils.c67
-rw-r--r--src/visibility.c9
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 ();
}